鱼C论坛

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

GetModuleHandleA

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

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

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

x
  1. .386  
  2. .model flat,stdcall
  3. option casemap:none
  4. .stack 4096
  5. ExitProcess PROTO,dwExitCode:DWORD

  6. include windows.inc
  7. include gdi32.inc
  8. includelib gdi32.lib
  9. include user32.inc
  10. includelib user32.lib
  11. include kernel32.inc
  12. includelib kernel32.lib

  13. .data     
  14. szUserDll db 'User32.dll',0
  15. hUserDllHandle DWORD ?


  16. .code   
  17. main PROC   
  18.    
  19.     invoke GetModuleHandleA,addr szUserDll
  20.     .if eax
  21.     mov hUserDllHandle,eax
  22.     .endif


  23.     INVOKE ExitProcess,0  
  24. main ENDP   
  25. 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 函数来获取更多的错误信息。例如,在获取句柄之前,可以添加以下代码:

  1. invoke GetLastError
复制代码


然后查看 GetLastError 的返回值,可能会提供更多有关错误的详细信息。

尽管我无法确定具体的问题出现在哪里,但希望这些提示能够帮助你找到问题所在。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 23:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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