注册

CpuDbg x96

查看: 84|回复: 0
收起左侧

ollydbg对名称粉碎的处理导致GetProcAddress失败

[复制链接]
发表于 2025-4-20 01:29:45 | 显示全部楼层 |阅读模式
昨天在写一个demo需要用到dll, 我就找了一个以前随手写的dll项目来用.
结果测试一直不成功. 调试发现是 getprocaddress 返回失败.
我打开ollydbg的输入输出函数(ctrl+n) 反反复复确认导出的函数名是没有错的.
可是怎么测试都是不对, 我怕是手动输入错了, 就复制od上显示的导出名字,  测试还是失败.
如下图:

ollydbg导j出函数的名称

ollydbg导j出函数的名称


我就想可能是DLL有依赖其他DLL导致, 用 depends 查看, 也都是正常的. 没有三方依赖.
百思不得其解. 最后我想用序号加载试试, 一试便成功了...
序号成功, 函数名加载不成功, 那只能是名称粉碎的原因了, 可是od显示的确是正确的名字...
我就拿dumpbin再确认一下
如下图:

DumpBin查看导出函数

DumpBin查看导出函数


原来就是这个原因. 因为ollydbg将C++修饰的函数名强制改成C修饰的函数名.
C++修饰的函数名也被称为名称粉碎(Name Mangling), 一般的DLL正常导出的函数默认都是C++修饰的函数(Name Mangling).
有两种方法改成C修饰的函数. 1. 使用DEF 2. 导出函数前加 extert "C".
显然我两个都没有添加, 又加上ollydbg友好(迷惑)的改名行为. 让我在这个问题上折腾了一晚上...我还是太信任OllyDbg了...
------------------------------------------
2025.04.20
刚刚我又用x64dbg看了一下, 发现x64dbg还是挺贴心的,他有显示名称粉碎后的函数名, 同时也显示C修饰的函数名.如下图:

x64dbg解析函数

x64dbg解析函数


回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2025-5-9 06:36 , Processed in 0.078125 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

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