2

バイナリとアセンブリは初めてですが、バイナリ実行可能ファイルを直接編集する方法に興味があります。バイナリファイルから命令を削除しようとしましたが(によって提供された逆アセンブルされた命令によるobjdump)、実行後、「実行可能」は実行可能形式ではなくなったようです(実行時のセグメンテーション違反gdb。認識できません)。これは、命令の調整の問題が原因であると聞きました。(それは...ですか?)

それで、Linux実行可能ファイルに直接単一のx86命令を追加/削除することは可能ですか?もしそうなら、どのように?前もって感謝します。

4

2 に答える 2

4

それに応じてファイルヘッダーを調整せずにバイナリファイルのチャンクを削除すると、無効になります。

NOP幸い、実際に命令を削除せずに、命令をに置き換えることができます。ファイルサイズは同じままで、チェックサムや署名がない場合(または実際にチェックされていない場合)は、これ以上何もする必要はありません。

命令を挿入する普遍的な方法はありませんが、通常、元のコード JMPを別の場所に上書きします。ここで、元のコードが行ったことを再現し、必要に応じて独自の操作を行ってから、元にJMP戻します。バイナリのサイズを変更せずに新しいコード用のスペースを見つけることは不可能かもしれないので、代わりに実行可能ファイルがロードされた後にコードにパッチを適用します(おそらく特別なLD_PRELOADedライブラリを使用します)。

于 2013-02-15T21:51:57.057 に答える
1

はい。NOP命令( )に置き換える0x90か、命令が複数のバイトにまたがる場合は複数の命令に置き換えてください。これは古いトリックです。

于 2013-02-15T21:48:32.300 に答える