実行可能ファイルで nm または readelf -s の出力を処理しようとしています。ただし、出力で静的関数を互いに区別するのに問題があります。
これが私が取り組んでいるものです:
test.c
static int foo() {
int x = 6;
}
main() {}
その他.c
static int foo() {
int x = 5;
}
私はこれらを次のようにコンパイルします:
gcc -o test test.c other.c
次に nm コマンドを実行して、すべてのシンボルを取得します。
nm test
その中には、次の 2 つの記号 (私の静的関数用) が表示されます。
00000000004004ed t foo
0000000000400500 t foo
特定の foo 関数がどのファイルから出現したかを区別できる方法はありますか? または、これを機能させるためにコンパイルする前に魔法をかける必要がありますか?
私のユースケースでは、最終的なバイナリとそれが使用するオブジェクトファイルにアクセスできますが、実際に自分でビルドしてシンボルテーブルがあることを確認することはできません。
ありがとう!