You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FASM开发含溢出检查加法函数的DLL时提示‘DLL不正确’错误的排查求助

排查你的FASM DLL编译错误问题

我帮你梳理了这段FASM DLL代码,几个关键问题导致系统提示“DLL不正确”的错误,下面逐一拆解并给出修正方案:

核心错误点分析

1. DLL入口函数不符合Windows规范

Windows对DLL的入口函数有严格要求:它必须处理系统发送的通知消息(比如DLL_PROCESS_ATTACH加载通知、DLL_PROCESS_DETACH卸载通知等),且返回值必须是BOOL类型(表示操作是否成功)。你写的start代码只是简单返回1,完全没有响应系统的DLL加载逻辑,系统自然会判定这个DLL不符合规范。

2. 导出表(.edata段)位置错误

你把导出表段放在了.end start之后——.end start是FASM标记程序结束的指令,后续的段定义会被编译器忽略,系统找不到导出的Hello函数,这也是DLL验证失败的重要原因。

3. 字符串显示的潜在问题(非加载失败直接原因)

你使用了win1251.inc编码,但直接调用MessageBox默认会匹配系统编码,可能导致俄语字符串显示乱码,这个可以同步修正。

修正后的完整代码

format PE gui dll
include 'win32ax.inc'
include 'encoding/win1251.inc'

; 数据段:存放提示字符串
.data
mes0 db 'Библиотека Dll удачно подключена!',0
wName db 'Тест внешнего модуля',0

; 导出表:必须放在代码段之前,确保编译器能识别
section '.edata' export data readable
export 'myDll.dll',\
      Hello, 'Hello'

; 代码段:包含标准入口函数和导出函数
.code
; 标准DLL入口函数DllMain,处理系统通知
proc DllMain hinstDLL, fdwReason, lpvReserved
    mov eax, [fdwReason]
    ; 根据不同通知类型执行对应逻辑
    cmp eax, DLL_PROCESS_ATTACH
    je .on_attach
    cmp eax, DLL_PROCESS_DETACH
    je .on_detach
    cmp eax, DLL_THREAD_ATTACH
    je .on_thread_attach
    cmp eax, DLL_THREAD_DETACH
    je .on_thread_detach

.on_attach:
    ; DLL加载时可执行初始化操作(可选)
    mov eax, TRUE  ; 返回TRUE表示加载成功
    ret
.on_detach:
    ; DLL卸载时可执行清理操作(可选)
    mov eax, TRUE
    ret
.on_thread_attach:
    mov eax, TRUE
    ret
.on_thread_detach:
    mov eax, TRUE
    ret
endp

; 导出的Hello函数,调用MessageBox显示提示
proc Hello
    ; 明确调用ANSI版本MessageBox,适配win1251编码的字符串
    invoke MessageBoxA, 0, mes0, wName, MB_OK
    ret
endp

; 标记程序结束,指定入口点为DllMain
.end DllMain
section '.reloc' fixups data discardable

关键修正说明

  • 标准入口函数:替换原start为DllMain,严格遵循Windows DLL的入口规范,确保系统能正确加载并初始化DLL。
  • 调整导出表位置:把.edata段移到.code段之前,让编译器能正确识别导出的函数信息。
  • 明确字符串编码匹配:调用MessageBoxA而非默认的MessageBox,确保win1251编码的俄语字符串能正常显示。
  • 保留重定位段:.reloc段是Windows DLL必须的,确保DLL在不同内存地址加载时能完成重定位操作。

内容的提问来源于stack exchange,提问作者Артём Копиль

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:27:44