测试平台是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* 这样的函数都在头文件中定义,包括basename。
所以我的问题是:
如何准确地从ELF文件中找到所有用户定义的函数?
对PE文件的任何答案也欢迎!
谢谢!