readelf可以去判断是否函数是extern的
通过readelf -sD可以提取出动态符号表中的内容,如果其中index显示为数字,说明这是binary内部的函数,否则显示UND,说明是外部引入函数,通过这个可以写一个命令快速去找到对应的文件。
#!/bin/bash
# 检查是否提供了目标符号名参数
if [ -z "$1" ]; then
echo "Usage: $0 <symbol_name>"
exit 1
fi
symbol_name="$1"
# 第一步: 使用grep找到含有指定符号名的所有二进制文件
echo "Searching for files containing '$symbol_name'..."
binary_files=$(grep -rl "$symbol_name" .)
# 第二步: 遍历找到的文件,使用 readelf 检查符号表
for file in $binary_files; do
echo "Processing file: $file"
# 使用 readelf 查看符号表并过滤出符号名,如果不是 UND 则输出文件名
if readelf -sD "$file" 2>/dev/null | grep "$symbol_name" | grep -vq "UND"; then
echo "result: $file"
fi
done
浙公网安备 33010602011771号