我在逆向工程中遇到了一些麻煩,一些IA32彙編代碼。即,這些行:IA32彙編cmp字符串
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,0123'指令產生混淆。看起來,不管字符串開頭的兩個字符是什麼,它都會出現1.它是比較字符串的長度嗎?
此外,在兩個字符串上調用cmp
的比較是什麼?
非常感謝!
編輯:
早些時候,兩個字符串被cmp'd:
0x08049d68 <+201>: cmp -0xc(%ebp),%eax
0x08049d6b <+204>: jb 0x8049cfa <level_6+91>
再次感謝您的幫助。它很好地解釋了這個問題 - 當兩個寄存器保存地址到不同的和不同的字符串時,會發生什麼情況是'cmp''d?例如,我編輯中包含的內容到我原來的帖子 – user3635296
完全一樣的東西,它只是比較地址,如果指向完全不同的字符串,顯然不會相等。 –