2016-04-02 10 views
1

いくつかの共有オブジェクトの命令を勉強してアセンブリ言語について学んでいます。明らかに宛先アドレスが、私はこのケースでは知っている適切な機能(によって置き換えられなければならないこの再配置されたコールをデコードする方法は?

af6fc | e8fcffffff call af6fdh 

:私はcall命令がその開始後1バイトにつながる建設、例えば(hteからの出力)を発生していますstrcmp)。私は理由同じstrcmp機能が.textの部分を書き換える必要がなくなり.got/.pltメカニズムを使用して呼び出され同じ共有オブジェクトの他の部分で、これは奇妙な見つけます。後者の場合、宛先機能は、.dynsymと共に.rel.pltテーブルを調べることによって識別することができる。しかし、直前のアドレスがどこにリダイレクトされているのかを私はどのようにして見つけることができますか?少なくともhteでアクセスできるようになっていないセクションでは、いずれのセクションにもアドレスaf6fcまたはaf6fdが見つかりませんでした。

答えて

1

あなたはあなたがどのプラットフォームを使用しているかは言いませんでした。 ix86と思われます。

ix86には、コンパイルされたコードを共有ライブラリにリンクすることができます(これは、最適化されていないテキスト再配置ライブラリを生成します)。

objdump -R foo.soを使用して動的再配置をダンプすると、アドレス0xaf6fdに対して再配置が行われているはずです。動的リンカは、をロードした後に再配置が指示する場所を指すように、0xaf6fdに4バイトを更新します。同一の共有オブジェクト同一のstrcmp関数はこれらのコールは(正しく)-fPICでコンパイルされたオブジェクトから来る.gotを/ .PLT機構を

を使用して呼ばれるの他の部分に

関連する問題