2017-12-11 5 views
0

テスト目的のために、llvmリンカによって生成されたPLTスタブlldを修正しました。関数の開始アドレスと終了アドレスが正しくないobjdump

前スタブされました:この(オリジナル)のスタブとobjdumpでそれを検査してプログラムをリンクする

0xff, 0x25, 0x00, 0x00, 0x00, 0x00, // jmpq *got(%rip) 
0x68, 0x00, 0x00, 0x00, 0x00,  // pushq <relocation index> 
0xe9, 0x00, 0x00, 0x00, 0x00  // jmpq plt[0] 

はこのようなものが得られます。

00000000002012d0 <[email protected]>: 
    2012d0: ff 25 62 0d 00 00  jmpq *0xd62(%rip)  # 202038 <__TMC_END__+0x28> 
    2012d6: 68 02 00 00 00   pushq $0x2 
    2012db: e9 c0 ff ff ff   jmpq 2012a0 <_fini+0x10> 

私は単純に追加することにより、PLTスタブを修正しました最後のNOP:

0xff, 0x25, 0x00, 0x00, 0x00, 0x00, // jmpq *got(%rip) 
0x68, 0x00, 0x00, 0x00, 0x00,  // pushq <relocation index> 
0xe9, 0x00, 0x00, 0x00, 0x00,  // jmpq plt[0] 
0x0f, 0x1f, 0x40, 0x00    // nop 

私は、 e PltEntrySizeが変更され、サイズの変化が反映されます。この変更でプログラムをリンクして実行するとうまくいくようです。

私はobjdumpにリンクされたプログラムの逆アセンブルを検査しようとすると、しかし、私は奇妙な何かを参照してくださいPLTスタブのアドレスが0x2012d0であることをobjdumpによって解釈される

00000000002012d0 <[email protected]>: 
    2012d0: cc      int3 
    2012d1: ff      (bad) 
    2012d2: ff      (bad) 
    2012d3: ff 0f     decl (%rdi) 
    2012d5: 1f      (bad) 
    2012d6: 40 00 ff    add %dil,%dil 
    2012d9: 25 5a 0d 00 00   and $0xd5a,%eax 
    2012de: 68 02 00 00 00   pushq $0x2 
    2012e3: e9 b8 ff ff ff   jmpq 2012a0 <_fini+0x10> 
    2012e8: 0f 1f 40 00    nopl 0x0(%rax) 

を、本当の[email protected]アドレスは0x2012d8です!

Symbol table '.dynsym' contains 7 entries: 
    Num: Value   Size Type Bind Vis  Ndx Name 
    ... 
    6: 00000000002012d8  0 FUNC GLOBAL DEFAULT UND [email protected]_2.2.5 (2) 

objdumpからその情報を取得ん:これは、readelf -sによって確認されましたか?私はリンカの中で何かを修正するのを忘れていた可能性が非常に高いです。

答えて

0

テストの目的で、llvmリンカーlldによって生成されたPLTスタブを修正しました。 pltエントリの

サイズ及びレイアウトは(79頁参照)ABIによって石に設定され、変更することができません。

この変更でプログラムをリンクして実行するとうまくいくようです。

私は、任意の非自明なプログラムが修正して正常に動作しないだろう - ダイナミックローダーは、ABI pltレイアウトを想定し、偽のplt与えられたときにクラッシュして焼く必要があります。

+0

ありがとうございます、それは迷惑です。しかし、私はダイナミックリンカのソースを見て、それはGOTだけに触れるので、PLTの変更によって影響を受けるべきではありません。私はもっ​​とテストします、それが壊れたら、私は戦略を変えます。 Objdumpは明らかにPLTスタブの固定サイズを想定しているため、誤った情報が表示されます。 – Banex

関連する問題