我有汇编代码,
.section .data
value1:
.int 1
value2:
.short 2
value3:
.byte 3
.global _start
_start:
nop
movl value1,%ecx
movw value1,%bx
movw value2,%bx
movb value3,%cl
movl $1, %eax
movl $0, %ebx
int $0x80
我用as和ld得到了可执行的二进制文件,但是在GDB中,我不能打印value2.enter image description here
为什么?我很困惑。
我发现地址不在数据区。
1条答案
按热度按时间xwbd5t1u1#
一些问题...
.section .text
* 应该在 *.global _start
之前,以便_start
在.text
部分中结束1.添加
-g
以获取调试信息不幸的是,将
-g
添加到.c
编译中是可以的,但是对于.s
文件就不太好用了下面是一个简单的C程序,与您的程序类似:
我们可以用
-S
编译得到一个.s
文件。我们可以用-g
也可以不用-g
。没有-g
.s
文件是7行。增加-g
增加到150行。调试信息必须使用特殊的asm指令添加(例如
.loc
和.section .debug_info,"",@progbits
)。这样,
gdb
就有了足够的信息来允许p
(或x
)工作。要让
p
在没有调试信息的情况下工作,我们必须将值转换为正确的类型。以下是
.c
示例文件 * 的.s
输出(不含 *-g
):以下是
.s
的输出 *,带有 *-g
: