如何从ELF和PE文件中找到所有“用户定义的函数”?

时间:2014-02-02 15:19:50

标签: c assembly elf libc

测试平台位于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文件的任何答案!

感谢你!

1 个答案:

答案 0 :(得分:1)

  

基本上我认为像version_etc atexit这样的函数是在包含的头文件basename中定义的

您构建basename的心理模型似乎完全不正确。

basename是根据basename.o 构建的一大堆其他对象(属于coreutils的一部分从其他图书馆引入更多的对象。

链接basename后,无法确定哪些功能来自哪里。

此外,“用户定义的功能”甚至意味着什么?