在 Windows API 的上下文中,调试符号提供哪些导出表未提供的额外信息?

逆向工程 登录 调试符号
2021-06-17 09:06:05

以'kernel32.dll'为例,导出表已经提供了导出函数的列表,那么在什么情况下,我需要从MS符号服务器下载它的调试符号吗?

2个回答

大多数可用的公共符号文件仅提供全局函数和变量名称(导出的和非导出的)。少数(例如 ntdll、kernel32、ntoskrnl)还包括各种系统类型(结构、枚举),这对于低级调试非常有用。但即使没有类型,您通常也可以仅从函数名称中猜出很多。

没有符号,大多数调用就像 call dword ptr ds :[12345678] 或 call 45678976 或 jmp 86753535 等

使用符号就像 call dword ptr ds:[exitprocess]

呼叫 foo32!等等

jmp some-non-exported-address-that-was-named-by-symbol 等

除了名称符号提供类型信息

就像 push foo->blah

而不是推 [eax+60]

也导出的 apis 可以是有序导出然后所有调用看起来像 call ord1 call ord2 call ordn
没有符号文件你将很难重命名和分析它们
看看 mfcxx.dll