测试平台位于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文件的任何答案!
感谢你!
答案 0 :(得分:1)
基本上我认为像
version_etc
atexit
这样的函数是在包含的头文件basename
中定义的
您构建basename
的心理模型似乎完全不正确。
basename
是根据basename.o
和构建的一大堆其他对象(属于coreutils
)和的一部分从其他图书馆引入更多的对象。
链接basename
后,无法确定哪些功能来自哪里。
此外,“用户定义的功能”甚至意味着什么?