gpt4 book ai didi

c - 从 ELF 二进制文件中仅提取我的函数名称

转载 作者:IT王子 更新时间:2023-10-29 00:50:39 24 4
gpt4 key购买 nike

我正在编写一个脚本来提取二进制文件中的所有函数(由用户编写)。

下面的shell脚本提取了我的函数名以及一些以__开头的库函数

readelf -s ./a.out | gawk '
{
if($4 == "FUNC" && $3 != "0" && $7 == "13" && $8 != "main") {
print "b " $NF; //***Updated
}
}' &> function_names;

function_names 文件的输出:

b __libc_csu_fini
b PrintDivider
b PrintFooter
b __libc_csu_init
b PrintHeader

我只想提取我的函数。那么如何检查函数名称是否以 __ 开头,或者其他任何替代方法也非常适用。

更新:
@djf 解决方案工作正常。如果编译的 .c 文件也可能包含以 __ 开头的函数怎么办?那么,如何区分呢?

最佳答案

如何在目标文件而不是链接的可执行文件上使用 readelf?这样就没有来自库函数的垃圾邮件。使用 -c 标志编译为目标文件,而不是立即链接。

PS:从可执行文件或目标文件中提取名称的正确工具是 nm,而不是 readelf。使用 nm -P file 拥有您想要的一切。

$ nm -P tst.o | awk '$2 == "T" {print "b " $1}'
b foo
b main

编辑:要忽略 main 和以下划线开头的符号,请使用

$ nm -P a.out | awk '$2 == "T" && $1 !~ /^_/ && $1 != "main" {print "b " $1}'

关于c - 从 ELF 二进制文件中仅提取我的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17487089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com