アセンブリ言語の宿題がわかりません。
爆弾を解除するプログラムです。exeファイルしか与えられていません。
phase1から5まであり、それぞれにインプットを求められ、正しいインプット(解除コード)を入力すると解除できます。
間違ったコードを入力すると爆発してしまいます。1,2は解けましたが、3で躓きました。objdumpしてみて、あるstring(恐らくglobal定数)と同じインプットをすれば解除できると踏んだのですが、どうしてもその特定のstringがわかりません。
以下にobjdumpした内の一部を載せておきました。都合上最小限のコードだけ載せざるを得ませんでしたので、
下記URLに、exeファイル、逆アセンブルファイル、phase1,2のanswerをアップロードしております。お時間があれば是非ご協力をお願いします。
環境
OS:ubuntu 9.04
デバッガ:Gnu DeBugger
08048424 <_IO_getc@plt>:
8048424: ff 25 10 a0 04 08 jmp *0x804a010
804842a: 68 20 00 00 00 push $0x20
804842f: e9 a0 ff ff ff jmp 80483d4 <_init+0x18>
08048723 <phase_3_of_5>:
8048723: 55 push %ebp
8048724: 89 e5 mov %esp,%ebp
8048726: 57 push %edi
8048727: 56 push %esi
8048728: 53 push %ebx
8048729: 83 ec 1c sub $0x1c,%esp
804872c: a1 30 a0 04 08 mov 0x804a030,%eax
8048731: 89 04 24 mov %eax,(%esp)
8048734: e8 eb fc ff ff call 8048424 <_IO_getc@plt>
8048739: bb 00 00 00 00 mov $0x0,%ebx
804873e: 8d 75 e6 lea -0x1a(%ebp),%esi
8048741: eb 04 jmp 8048747 <phase_3_of_5+0x24>
8048743: 88 44 33 ff mov %al,-0x1(%ebx,%esi,1)
8048747: a1 30 a0 04 08 mov 0x804a030,%eax
804874c: 89 04 24 mov %eax,(%esp)
804874f: e8 d0 fc ff ff call 8048424 <_IO_getc@plt>
8048754: 83 f8 0a cmp $0xa,%eax
8048757: 74 06 je 804875f <phase_3_of_5+0x3c>
8048759: 43 inc %ebx
804875a: 83 fb 0f cmp $0xf,%ebx
804875d: 75 e4 jne 8048743 <phase_3_of_5+0x20>
804875f: c6 45 f3 00 movb $0x0,-0xd(%ebp)
8048763: 8d 75 e6 lea -0x1a(%ebp),%esi
8048766: bf e4 8b 04 08 mov $0x8048be4,%edi
804876b: b9 0d 00 00 00 mov $0xd,%ecx
8048770: fc cld
8048771: f3 a6 repz cmpsb %es:(%edi),%ds:(%esi)
8048773: 0f 97 c2 seta %dl
8048776: 0f 92 c0 setb %al
8048779: 38 c2 cmp %al,%dl
804877b: 74 0c je 8048789 <phase_3_of_5+0x66>
804877d: c7 04 24 03 00 00 00 movl $0x3,(%esp)
8048784: e8 31 fe ff ff call 80485ba <explode>
8048789: 83 c4 1c add $0x1c,%esp
804878c: 5b pop %ebx
804878d: 5e pop %esi
804878e: 5f pop %edi
804878f: 5d pop %ebp
8048790: c3 ret
お礼
ありがとうございます♪ なるほど、そっちに依存する可能性の方が高いと考えて良いのですね! というより、そうであってもなくても、そこまで速度にこだわるならどの道チェックしなければベストを尽くしたことにはならないということに気付きましたw 今のところアセンブリ言語については ちょこっとかじった程度しか知らないので、吐き出すアセンブラをみると「うっw」となり、調べたりしつつ読むのにとても時間がかかるのですが、時間がとれれば、あわよくば難なく読めるようにこれからもうちょい勉強を重ねていこうと思います。