从编译好的二进制文件中获取宏值(带调试)
答
鉴于宏由预处理器处理,即使实际的编译器也不知道它们。唯一的选择是对鳕鱼进行反向工程,找到你知道使用宏的地方并从那里提取数值。
编辑:我刚刚检查DWARF规范,标准定义.debug_macinfo
部分尤其是储存关于宏的调试信息,这部分包含DW_MACINFO_define
记录每个定义的宏。
因此,如果您有库的调试版本,则可以尝试使用dwarfdump -m
或readelf --debug-dump=macro
来提取此信息。
但是:我已经在我的系统中的几个库上试过了,它们都没有包含任何宏记录。默认gcc
不会发出它们,库必须编译为gcc -g3
(该开关增加了调试信息级别)。我想这对你来说是个坏消息。
所以你告诉我,有没有办法从调试信息挖掘这个? – 2011-05-17 12:29:47
嗯,其实我错误地认为库编译没有调试信息。事实上,矮人可以提供帮助,让我稍后更新答案。 – 2011-05-17 12:40:20