1

ELF バイナリ内の文字列の長さがそれより短いか等しい場合は置換できますが、より長い文字列に置換するとセグメンテーション違反が発生します。なぜセグメンテーション違反になるのですか?それが機能するために他に変更する必要があるものは何ですか?

4

1 に答える 1

1

ELF バイナリ内の文字列が長さ以下の場合、文字列を置き換えることができます

完全にリンクされたバイナリ (ET_EXECまたはET_DYN) について話しているのか、それともオブジェクト ファイル ( ET_REL) について話しているのかによって、上記の記述が正しい場合と正しくない場合があります。

完全にリンクされたバイナリのセクションで文字列を安全に編集することはできません.dynstr。これを行うと動的シンボル ハッシュテーブルが破損するためです。

ただし、より長い文字列に置き換えるとセグメンテーション違反が発生します。

何を期待していましたか?ELF バイナリには、構造化データが含まれています。そのデータの構造を壊すと、あらゆる種類の問題が予想されます。セグメンテーション違反があったことは幸運です。それはもっと悪いことだったかもしれません (例えば、ディスクに書き込んだデータを黙って壊してしまうかもしれません)。

于 2012-06-09T23:17:17.343 に答える