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

  

posted @ 2024-08-26 16:35  卧龙丹心  阅读(48)  评论(0)    收藏  举报