私はLinux X86_64で作業しています。PLTスタブのアドレスを見つける
エントリが表す動的関数の名前を指定して、ELFファイル内の特定のPLTエントリのアドレスを決定する必要があります。 私はアドレスからのファイルのオフセットを知ることができますが、私はアドレスを決定できる必要があります。
を使用してELFファイルを逆アセンブルすると、objdumpはPLTの各エントリにシンボリック名を使用しています。 (ここで、これらのアドレスやシンボル名との関係を得るobjdumpのでしょうか?)
例:
0000000000000041a2b0 [email protected]:
私はobjdump -T elffile | grep fileno
を使用している場合、私はこのような何かを得る:私はするために必要なもの
0000000000000 DF *UND* 00000000000000000 GLIBC_2.2.5 fileno
"C"から行うことができるのは、特定の動的関数用のELFファイル内のPLTエントリを見つけてアドレスを取得することです。
背景は、既存のELFファイルにパッチを当てており、関数呼び出しを別の動的関数にリダイレクトする必要があるということです。私は手動でELFファイルをobjdumpの逆アセンブリから集めたアドレスを使ってパッチし、これが私の特定のアプリケーションでうまくいくことを証明しました。プログラムから実行できる必要があります。私は、objdump逆アセンブラコードをクロールしてPLTのエントリシンボルとアドレスを取得する方法を理解しないことを望んでいます。
i386の場合、PLTエントリのサイズは正しく報告されません。報告されたpltエントリー・サイズに4を掛けたり、エントリー・サイズに16を使用することができます。 – codemonkey