Assembly 8字节值在推送到堆栈上时以4字节为单位而不是以每个字节为单位反转

Assembly 8字节值在推送到堆栈上时以4字节为单位而不是以每个字节为单位反转,assembly,gdb,x86-64,endianness,Assembly,Gdb,X86 64,Endianness,请考虑以下两个说明: movabs rax,0xc931db3146b0c031 mov QWORD PTR [rbp - 0x80], rax 在gdb中单步遍历它们之后,我使用x/2x$rsp-0x80查看刚刚推送到堆栈上的内容。输出为: 0x7fffffffdfe0: 0x46b0c031 0xc931db31 我希望看到以下输出: 0x7fffffffdfe0: 0x31c0b046 0x31db31c9 在little endian机器上,8字节值0xc931db3146b0

请考虑以下两个说明:

movabs rax,0xc931db3146b0c031
mov QWORD PTR [rbp - 0x80], rax
在gdb中单步遍历它们之后,我使用
x/2x$rsp-0x80
查看刚刚推送到堆栈上的内容。输出为:

0x7fffffffdfe0: 0x46b0c031  0xc931db31
我希望看到以下输出:

0x7fffffffdfe0: 0x31c0b046  0x31db31c9
在little endian机器上,8字节值
0xc931db3146b0c031
应作为
0x31 0xc0 0xb0 0x46 0x31 0xdb 0x31 0xc9
存储在内存中,对吗


那么,为什么要将值以4字节为单位进行反转,而不是以字节为单位进行反转?

因为gdb会为您取消DWORD的反转。使用
x/8bx
查看实际的字节。好的,这样就行了。谢谢,我很困惑!