这是我的源代码:
section .data
msg: db "pppaaa"
len: equ $
section .text
global main
main:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
当我调试这段代码时,我会看到:
(gdb) info register ecx
ecx 0x804a010 134520848
(gdb) x 0x804a010
0x804a010 <msg>: 0x61707070
(gdb) x 0x804a014
0x804a014: 0x00006161
&#34; 70&#34;这里代表角色&#39; p&#39;和&#34; 61&#34;角色&#39; a&#39;明显。
我感到困惑的是,为什么位置0x804a010中的数据是0x61707070(appp)并且在0x804a014处向前移动4个字节,数据是-aa?
我希望第一个位置看到(pppa),第二个位置看到(aa--)。为什么会这样?
答案 0 :(得分:2)
GDB不知道你有一堆字符。你只是要求它查看一个内存位置,它显示的是什么,默认为一个4字节的整数。它假设整数首先存储在最低有效字节,因为这是在英特尔上完成的,所以你可以反转你的字节。
要解决此问题,请在x
命令中使用格式说明符,如下所示:
x/10c 0x804a010
(将从0x804a010开始打印10个字符。)
GDB中的 help x
将提供更多信息。