前提・実現したいこと
逆アセンブルについてです。
mov などの命令文の意味これがAT&T記法で書かれているということくらいしか分かりません。
私が知りたいのはmovの後ろに abs (zbl)とあるのですがこれはいったい何を意味しているのか、cmpときて2とedi(第一引数?)を比較するとのことですが、ediには何も入っていないので比較することは不可能なのではないでしょうか。また、なにも命令がなければ上から下に処理していくという形であっていますでしょうか?
逆アセンブルという言葉すら知らない状態でこの問題に取り掛かり、知らない言葉などを調べていたのですが、自分の調べる能力、理解力も低くいので今回知識ある人たちに聞くことにしました。つたない文章ですが、ご指導のほどよろしくお願いいたします。
また初学者でも理解できるようなサイト、おすすめの本などありましたら教えていただけると幸いです。
発生している問題・エラーメッセージ
Debian(amd64)上で動作するあるプログラムのmain関数の逆アセンブル結果から実行結果0になる特定の文字列を求める問題です。
objdumpの表示です。
該当のソースコード
00000000004003c0 <main>:
4003c0: 48 b8 0f 0e 0d 0b 00 movabs $0xc0601000b0d0e0f,%rax
4003c7: 01 06 0c
4003ca: 83 ff 02 cmp $0x2,%edi
4003cd: 48 89 44 24 f0 mov %rax,-0x10(%rsp)
4003d2: 48 b8 04 05 08 0a 02 movabs $0x70903020a080504,%rax
4003d9: 03 09 07
4003dc: 48 89 44 24 f8 mov %rax,-0x8(%rsp)
4003e1: b8 01 00 00 00 mov $0x1,%eax
4003e6: 75 59 jne 400441 <main+0x81>
4003e8: 48 8b 56 08 mov 0x8(%rsi),%rdx
4003ec: 31 c0 xor %eax,%eax
4003ee: 89 c1 mov %eax,%ecx
4003f0: 48 ff c0 inc %rax
4003f3: 80 7c 02 ff 00 cmpb $0x0,-0x1(%rdx,%rax,1)
4003f8: 75 f4 jne 4003ee <main+0x2e>
4003fa: 83 f9 08 cmp $0x8,%ecx
4003fd: b8 01 00 00 00 mov $0x1,%eax
400402: 75 3d jne 400441 <main+0x81>
400404: 48 8b 32 mov (%rdx),%rsi
400407: 31 c0 xor %eax,%eax
400409: 30 c9 xor %cl,%cl
40040b: 48 89 f2 mov %rsi,%rdx
40040e: 48 d3 ea shr %cl,%rdx
400411: 83 e2 0f and $0xf,%edx
400414: 0f b6 54 14 f0 movzbl -0x10(%rsp,%rdx,1),%edx
400419: 48 d3 e2 shl %cl,%rdx
40041c: 83 c1 04 add $0x4,%ecx
40041f: 48 09 d0 or %rdx,%rax
400422: 83 f9 40 cmp $0x40,%ecx
400425: 75 e4 jne 40040b <main+0x4b>
400427: 48 33 05 92 ff ff ff xor -0x6e(%rip),%rax # 4003c0 <main>
40042e: 48 ba 85 03 0e 67 b3 movabs $0x600967b3670e0385,%rdx
400435: 67 09 60
400438: 48 39 d0 cmp %rdx,%rax
40043b: 0f 95 c0 setne %al
40043e: 0f b6 c0 movzbl %al,%eax
400441: c3 retq
### 試したこと ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/25 04:22