我正在使用 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 $eax
orinfo registers
来获取eax
gdb 中的值。