这是我的源代码:

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字节整数。它假设整数首先被存储为最低有效字节,因为这是在intel上执行此操作的方式,所以您的字节将被反转。
要解决此问题,请在x命令中使用格式说明符,如下所示:

 x/10c 0x804a010

(将从0x804a010开始打印10个字符)。
gdb中的help x将提供更多信息。

关于linux - 为什么存储在存储器中的数据反转了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27849798/

10-10 11:43