为什么内存中存储的数据是颠倒的?

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 将提供更多信息。