0

一部の 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>
4

1 に答える 1