我在AT& T组装方面需要一些帮助。 我已经将一些数据加载到内存中,如下所示(十六进制和十进制)
(gdb) x/8xb &buffer_in
0x8049096: 0x03 0x02 0x10 0x27 0xe8 0x03 0x64 0x00
(gdb) x/8db &buffer_in
0x8049096: 3 2 16 39 -24 3 100 0
假设第一个字节=数字计数,第二个=每个数字长度(以字节为单位),然后我们得到(第一个*第二个)字节数字。对于这个例子,3个数字,每个2个字节,第一个数字是16 39,所以一个。 我没有实现它的问题,我可以抓住每个字节并添加。
问题是,为什么地狱十六进制麻木0xE8 = -24十进制只是将数据加载到内存(如下)? 十进制应为 232。
加载数据的代码非常简单:
.align 32
SYSEXIT = 1
SYSREAD = 3
SYSWRITE = 4
STDOUT = 1
STDIN = 0
.bss
buffer_in: .space 10000
buffer_in_len = . - buffer_in
.text
.global _start
_start:
#STDIN READ
movl $SYSREAD, %eax
movl $STDIN, %ebx
movl $buffer_in, %ecx
movl $buffer_in_len, %edx
int $0x80
debug:
movl $0, %edi #do nothing
movl $SYSEXIT, %eax
int $0x80
答案 0 :(得分:1)
d
格式说明符将其参数打印为带符号的十进制数。要打印无符号十进制数,请改用u
。您的命令是x/8ub
。