質問

私には実行可能ファイルを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 との相殺するものとする。

otx および Hex Fiend が友達になります。 otxはファイル相対オフセットを使用した逆アセンブリを提供し、Hex Fiendはジャンプを修正します。 0x90はNOPの(x86)オペコードであるため、9090909090はfork()呼び出しの適切な代替物であることに注意してください。 (戻り値を生成しないので、奇妙なことがeaxで終わる可能性があることに注意してください。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top