GetModuleHandleA
.386.model flat,stdcall
option casemap:none
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data
szUserDll db 'User32.dll',0
hUserDllHandle DWORD ?
.code
main PROC
invoke GetModuleHandleA,addr szUserDll
.if eax
mov hUserDllHandle,eax
.endif
INVOKE ExitProcess,0
main ENDP
END main
我的问题:
invoke GetModuleHandleA,addr szUserDll 获取句柄,可是eax返回值是0 ?
根据你提供的代码,可能有几个原因导致 eax 返回值为0。
1. szUserDll 字符串错误:请确保 szUserDll 字符串包含正确的 .dll 文件名。在你的代码中,szUserDll 设置为 "User32.dll",这是一个合法的库文件名。但是,如果实际上没有找到 "User32.dll" 文件,或者文件路径不正确,就会返回 0。请确保 "User32.dll" 文件在正确的位置,并且路径正确。
2. GetModuleHandleA 使用 ANSI 字符集:GetModuleHandleA 函数使用 ANSI 字符集,需要确保 szUserDll 字符串也是按照 ANSI 字符集进行编码的。如果在代码中使用了 Unicode 字符串或者其他字符集,可能会导致函数无法正确识别字符串而返回 0。请确保 szUserDll 字符串是 ANSI 格式的。
3. GetModuleHandleA 函数调用失败:GetModuleHandleA 函数也可能调用失败,这种情况下会返回 0。失败的原因可能是由于权限问题、操作系统不支持该函数或者其他未知问题。请确保代码运行在适用的操作系统上,并且有足够的权限执行该函数。
如果以上这些原因都不是导致 eax 返回值为0的原因,还可以尝试使用 GetLastError 函数来获取更多的错误信息。例如,在获取句柄之前,可以添加以下代码:
invoke GetLastError
然后查看 GetLastError 的返回值,可能会提供更多有关错误的详细信息。
尽管我无法确定具体的问题出现在哪里,但希望这些提示能够帮助你找到问题所在。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]