为什么内存中存储的数据是颠倒的?
Why is data stored in memory reversed?
这是我的源代码:
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
这里的“70”代表'p'字,“61”显然代表'a'字
我很困惑的是,为什么位置 0x804a010 的数据是 0x61707070 (appp) 而在 0x804a014 向前移动 4 个字节的数据是 --aa ?
我希望在第一个位置看到 (pppa),在第二个位置看到 (aa--)。为什么会这样?
GDB 不知道你有一堆字符。您只是要求它查看内存位置,它会显示那里的内容,默认为 4 字节整数。它假定整数首先存储最低有效字节,因为英特尔就是这样做的,因此您可以颠倒字节。
要解决此问题,请在 x
命令中使用格式说明符,如下所示:
x/10c 0x804a010
(将从 0x804a010 开始打印 10 个字符)。
GDB 中的 help x
将提供更多信息。
这是我的源代码:
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
这里的“70”代表'p'字,“61”显然代表'a'字
我很困惑的是,为什么位置 0x804a010 的数据是 0x61707070 (appp) 而在 0x804a014 向前移动 4 个字节的数据是 --aa ?
我希望在第一个位置看到 (pppa),在第二个位置看到 (aa--)。为什么会这样?
GDB 不知道你有一堆字符。您只是要求它查看内存位置,它会显示那里的内容,默认为 4 字节整数。它假定整数首先存储最低有效字节,因为英特尔就是这样做的,因此您可以颠倒字节。
要解决此问题,请在 x
命令中使用格式说明符,如下所示:
x/10c 0x804a010
(将从 0x804a010 开始打印 10 个字符)。
GDB 中的help x
将提供更多信息。