一部の IA32 アセンブリ コードのリバース エンジニアリングに問題があります。つまり、これらの行:
0x08049d6d <+206>: mov -0xc(%ebp),%edx
0x08049d70 <+209>: mov -0x14(%ebp),%eax
0x08049d73 <+212>: mov %edx,%ecx
0x08049d75 <+214>: sub %eax,%ecx
0x08049d77 <+216>: mov %ecx,%eax
0x08049d79 <+218>: cmp $0x5,%eax
0x08049d7c <+221>: je 0x8049d83 <level_6+228>
ここでは、$edx
レジスタは文字列を保持しており、$eax
レジスタは同じ文字列を保持していますが、インデックス 0 の文字のみが削除されています。
ステップ 214の命令から混乱が生じsub
ます。文字列の先頭にある 2 つの文字が何であっても、1 になるようです。文字列の長さを比較しているのでしょうか。
さらに、2 つの文字列の呼び出しcmp
は何を比較しますか?
どうもありがとう!
編集:
前に、2 つの文字列が cmp されています。
0x08049d68 <+201>: cmp -0xc(%ebp),%eax
0x08049d6b <+204>: jb 0x8049cfa <level_6+91>