AT& T组件添加字节

时间:2017-05-23 19:30:29

标签: assembly gdb hex att

我在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

1 个答案:

答案 0 :(得分:1)

d格式说明符将其参数打印为带符号的十进制数。要打印无符号十进制数,请改用u。您的命令是x/8ub