【发布时间】:2014-02-02 15:19:50
【问题描述】:
测试平台在 32 位 Linux 和 Windows 上。
我正在尝试识别所有用户定义的动态链接二进制函数,
提取它们的指令并再次将它们组装成二进制文件。
至于ELF文件,我用这个:
nm binary | grep "T"
提取某些函数,我认为所有不以_开头的函数都应该是用户定义的函数。
它适用于小程序...
但是当我测试 coreutils (8.5) 时,例如像 basename
这是nm
的部分输出0804b530 T rpl_fflush
0804b590 T rpl_fseeko
0804a400 T set_char_quoting
0804a480 T set_custom_quoting
08049580 T set_program_name
0804a460 T set_quoting_flags
0804a3e0 T set_quoting_style
08049480 T strip_trailing_slashes
08048f70 T usage
0804b0f0 T version_etc
0804b6c0 T atexit
basename的源码中,只定义了三个函数为
main
usage
remove_suffix
但是我在这里使用 nm 来查找很多函数...
基本上我认为像 version_etc *atexit* 这样的函数是在头文件中定义的 包括基本名称
所以我的问题是:
如何准确地从 ELF 文件中找到所有用户定义的函数?
也欢迎任何关于 PE 文件的答案!
谢谢!
【问题讨论】:
-
ELF 文件包含链接到其中的所有函数,包括链接到的静态库中包含的内容。您想要做的唯一机会就是查看包含在ELF 和猜测。