GDB如何知道值是否已签名?

时间:2017-10-17 22:35:28

标签: debugging assembly gdb

我很好奇GDB如何确定某个值是有符号还是无符号。我创建了一个小程序,将一个带符号的负值存储到eax中。我已通过调试器运行它,我注意到它将eax的值解释为负数。这是怎么回事?我也试过这个没有生成调试信息。这是我的简短程序:

section .text
global _start
_start:
    nop
    mov eax, [doubleWord]
    mov ebx, 0
    mov eax, 1
    int 0x80
section .data
    doubleWord dd -52

1 个答案:

答案 0 :(得分:1)

对于编译器生成的代码,debug info specifies the types for global symbols

没有调试信息,我认为gdb只假设一切都是int

可以自己手动编写调试信息,但它非常麻烦,通常更容易用px命令覆盖带有强制转换或格式说明符的类型。 (https://sourceware.org/gdb/current/onlinedocs/gdb/Data.html#Data

例如,p /x $eax将EAX打印为(无符号)十六进制整数。

此外,layout reg很不错。请参阅代码wiki底部的stracegdb的更多asm调试提示。