どのように思決定の位置分解コードを実行?
-
22-07-2019 - |
質問
私には実行可能ファイルをC++、i386、下MacOS/Xタイガーの場合事項が含まれる。の修正のためのバグを修正するか--あのコードで通話をfork()ではない。ので、修正が簡単での再コンパイルを伴実行ファイルからの難しいです(しない)ので、そういっただけでパッチの実行ファイル/バイナリファイル。
に向けた第一歩として、どうしたらいいでしょうか走り"otool-テレビMyExecutableName"私の実行、出来上がり、この分解力:
./MyExecutableName:
(__TEXT,__text) section
[... many lines omitted ...]
0002ce0d subl $0x10,%esp
0002ce10 calll 0x0051adac
0002ce15 movzbl 0x14(%ebp),%esi
0002ce19 calll 0x00850ac9 ; symbol stub for: _fork
0002ce1e cmpl $0x00,%eax
0002ce21 jll 0x0002cf02
0002ce27 jle 0x0002ce34
[... many more lines omitted ...]
いいですが交換しopcode行0002ce19、その代わりにcalll'ing_fork、その飛躍を無条件での故障の場合(べきであると同じように対応するフォーク()が返され-1)
残念ながら、私は完全新人で体をバイナリパッチングだけではだめを行っています。特に、私の質問:
1)バイトだけ書き込の場所0002ce19を0002xe1d取得私が欲しがっているのか?思うのみなさまに相当する"jmp0x0002cf02"がどんな姿をどのような方はバイトです。
2)オフセット印刷による"otool-テレビ"に登場するオフセットの__テキストセグメントの実行形式にまとめたものです。たいのですが、バイト-デルタの印刷-オフセットの上にファイルができるよう、編集/パッチの正しいバイトのファイルとは何ですか?
謝のためのアドバイスできる!
解決
MacOS / Xについてはよく知りませんが、いくつかのヒントを提供できます。
それを修正する適切な方法は、逆アセンブラを使用してファイルにパッチを適用することです。
0002ce19 calll 0x00850ac9
に置き換えることができます
0002ce19 movl eax, -1 ; mov eax, 0xFFFFFFFF
表示されるオフセットは相対的であるため、ファイル内で見つけることはできません。
たとえば、 jll 0x0002cf02
は実際には jll 0x000000DF
正しければ、以下のコードブロック
0002ce19 calll 0x00850ac9 ; symbol stub for: _fork
0002ce1e cmpl 0x E8 AB3C8200
83F8 00
0F8C DF000000
0F84 0B000000
x00,%eax
0002ce21 jll 0x0002cf02
0002ce27 jle 0x0002ce34
この組み立てられた形式(20バイト)になります:
<*>そのシーケンスがファイル内で一意である場合、逆アセンブラを使用できない場合は、 E8AB3C8200
を B8FFFFFFFF
に変更してみてください。
他のヒント
最き入れる mov $-1, %eax
場してから通報してください。すでに何バイトに対応するようですsファイルをコンパイルして、ダンピングの結果、パディングとnopsの場合よりも短いパッチ。を取得しま"b8ff ff ff ff"へのこだわりを。
きを開始 __TEXT
による走行 otool -l
との相殺するものとする。