为什么存储在内存中的数据会反转?

时间:2015-01-08 21:26:37

标签: linux assembly x86 endianness

这是我的源代码:

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--)。为什么会这样?

1 个答案:

答案 0 :(得分:2)

GDB不知道你有一堆字符。你只是要求它查看一个内存位置,它显示的是什么,默认为一个4字节的整数。它假设整数首先存储在最低有效字节,因为这是在英特尔上完成的,所以你可以反转你的字节。

要解决此问题,请在x命令中使用格式说明符,如下所示:

 x/10c 0x804a010 

(将从0x804a010开始打印10个字符。)

GDB中的

help x将提供更多信息。