我正在使用 gdb 来检查程序。在汇编中,代码正在执行:
cmp $0x5, %eax
但是,当我检查 的内容时%eax,我得到:\020\343\377\377\377\177当作为字符串检查时。
\020\343\377\377\377\177与组装中的 0x5 美元相比如何?
cmp,在这种情况下,是将 in 的值eax与常量进行比较5。指向的值eax,如果您认为它实际上是一个指针,则根本不与常量进行比较。
比较是通过减法完成的 - 在您的情况下,这意味着5从 中的值中减去eax,并且适当地设置了几个标志(CF、OF、SF、ZF、AF 和 PF,根据文档)。通常,该cmp指令后跟某种条件指令(通常是跳转),根据比较结果执行不同的操作。
如果您告诉我们 in 的值eax,而不是解释eax为指针,我也许可以为您提供更多信息。您可以使用p $eaxorinfo registers来获取eaxgdb 中的值。