我正在写一个脚本,用于提取二进制文件中的所有函数(由用户编写)。
下面的shell脚本提取了我的函数名以及一些以__
开头的库函数。
readelf -s ./a.out | gawk '
{
if ($4 == "FUNC" && $3 != "0" && $7 == "13" && $8 != "main") {
print "b " $NF; //***Updated
}
}' &> function_names;
函数名称文件的输出:
b __libc_csu_fini
b PrintDivider
b PrintFooter
b __libc_csu_init
b PrintHeader
我想只提取我的函数。所以如何检查函数名是否以__
开头或其他任何替代也非常赞赏。
更新日期:
@djf解决方案可以,如果编译的.c
文件中也可能包含以__
开头的函数,那么如何区分呢?
3条答案
按热度按时间af7jpaap1#
在你的目标文件上使用
readelf
而不是链接的可执行文件怎么样?这样就不会有来自库函数的垃圾信息。使用-c
标志编译到一个目标文件,而不是立即链接。PS:从可执行文件或目标文件中提取名称的合适工具是
nm
,而不是readelf
。使用nm -P file
拥有你想要的一切。EDIT:要忽略
main
和以下划线开头的符号,请使用ykejflvf2#
您可以添加正则表达式检查,以确保函数名以字母开头。
我假设$8包含函数名:
w8f9ii693#
通过
grep ^[^_]
传输。[30个字符]