ここでは、コードが何をしているのか、私はそれを解決する方法を理解しています:まず、文字列を見つけて、その文字列をリバースエンジニアリングする必要があります。私が見つけたバイトのルックアップテーブル。私はこれらの "オフセット"の値が60まで加算されなければならないことを知っています。< + 53>を参照してください。二進の爆弾をデフラグする:phase_5
x/s 0x4011feを使用してこの6文字の文字列を検索しようとしましたが、他のコマンド(x/6cなど)を調べても、正しいものが得られません。正しい出力を得るために私が変えることができるものがあるので、私はこの段階を解消し続けることができますか?
私はこの文字列を見つけたら、この必要な出力文字列を見て、予想される出力に到達するのに必要な入力文字列を見つけます。私は考えている - 各文字の16進数を見て、それらを私のテーブル(最下位)と比較して、対応するcharをasciiテーブルを使って見つける。私はこれが正しいアプローチ、おかげであるかどうかだけ疑問に思っています。
ルックアップテーブル:
(gdb) x/16xw 0x402780
<array.3600>: 0x00000002 0x0000000a 0x00000006 0x00000001
<array.3600>: 0x0000000c 0x00000010 0x00000009 0x00000003
<array.3600>: 0x00000004 0x00000007 0x0000000e 0x00000005
<array.3600>: 0x0000000b 0x00000008 0x0000000f 0x0000000d
phase_5の分解:
0x00000000004011bf <+0>: push %rbx
0x00000000004011c0 <+1>: mov %rdi,%rbx
0x00000000004011c3 <+4>: callq 0x401414 <string_length>
0x00000000004011c8 <+9>: cmp $0x6,%eax //6 letter string!
0x00000000004011cb <+12>: je 0x4011d2 <phase_5+19> //if 6, jump over the explode
0x00000000004011cd <+14>: callq 0x401706 <explode_bomb>
0x00000000004011d2 <+19>: mov %rbx,%rax
0x00000000004011d5 <+22>: lea 0x6(%rbx),%rdi
0x00000000004011d9 <+26>: mov $0x0,%ecx
0x00000000004011de <+31>: movzbl (%rax),%edx
0x00000000004011e1 <+34>: and $0xf,%edx //”and” each letter
0x00000000004011e4 <+37>: add 0x402780(,%rdx,4),%ecx
0x00000000004011eb <+44>: add $0x1,%rax
0x00000000004011ef <+48>: cmp %rdi,%rax //compare, and then loop again.
0x00000000004011f2 <+51>: jne 0x4011de <phase_5+31> //loop!
0x00000000004011f4 <+53>: cmp $0x3c,%ecx //final compare, and then done! (0x3c = 60)
0x00000000004011f7 <+56>: je 0x4011fe <phase_5+63> //jump over explode, and finish!
0x00000000004011f9 <+58>: callq 0x401706 <explode_bomb>
0x00000000004011fe <+63>: pop %rbx
0x00000000004011ff <+64>: retq
End of assembler dump.
私は、少なくともいくつかのフィードバックを与えなくても、ダウン投票した人を好きになったことはありません。私は下降投票しませんでしたが、他の人があなたに説明の礼儀をしていないので、あなたは宿題に関する質問を掲示しました。「何をすべきかわからない、答えは何ですか?あなたはあなたの目標が何かを投稿し、正しい方向にナッジを求める場合は、はるかに良い運を持っています...私はstackoverflow.comはそのための場所だとは思わないが。 –
さらに、人々が宿題を投稿して肯定的な回答を得ているのを見たとき、一般的に著者は自分が試したことを概説しているので、著者の宿題をしているように感じることはありません。 –
@BrianVandenbergについてごめんね、本当にありがとうございました!私は私の質問を編集しました、うまくいけばそれは今より良いです。私は数日間されているので、主に調べる文字列を見つける方法に立ち往生しています。私は、私が正しく考えているという確認を得るために私の思考プロセスを説明しようとしました、私はそれをより明確にしようとします。再度、感謝します! – Mary