鱼C论坛

 找回密码
 立即注册
查看: 538|回复: 1

GetModuleHandleA

[复制链接]
发表于 2024-2-8 10:21:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
.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   ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-8 10:22:06 | 显示全部楼层
根据你提供的代码,可能有几个原因导致 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 23:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表