2

我正在使用 gdb 来检查程序。在汇编中,代码正在执行:

cmp $0x5, %eax

但是,当我检查 的内容时%eax,我得到:\020\343\377\377\377\177当作为字符串检查时。

\020\343\377\377\377\177与组装中的 0x5 美元相比如何?

4

1 回答 1

2

cmp,在这种情况下,是将 in 的值eax与常量进行比较5。指向的值eax,如果您认为它实际上是一个指针,则根本不与常量进行比较。

比较是通过减法完成的 - 在您的情况下,这意味着5从 中的值中减去eax,并且适当地设置了几个标志(CF、OF、SF、ZF、AF 和 PF,根据文档)。通常,该cmp指令后跟某种条件指令(通常是跳转),根据比较结果执行不同的操作。

如果您告诉我们 in 的值eax,而不是解释eax为指针,我也许可以为您提供更多信息。您可以使用p $eaxorinfo registers来获取eaxgdb 中的值。

于 2012-01-22T22:28:58.970 回答