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