这是我的源代码:
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/