gpt4 book ai didi

linux - 组装-为什么打印顺序相反?

转载 作者:太空狗 更新时间:2023-10-29 12:06:07 27 4
gpt4 key购买 nike

小端:

mov eax,4
push dword 0x44434241
mov ebx,1
mov ecx,esp
mov edx,4
int 0x80
add esp,4

我不明白为什么它打印 ABCD 而不是 DCBA。41在最低地址,44在最高地址,为什么呢?例如,当我写

x: dd 0x12345678

78 位于最低地址,但这里的数字仍然不是 78563412 而是 12345678。

最佳答案

0x12345678 是一个 32 位值,在小端系统中用最低地址处的 0x78 表示(我们称该地址为 addr ), 以及最高的 0x12:

 addr   addr+1  addr+2  addr+3                single 32-bit number
+----+ +----+ +----+ +----+ +--------------+
| 78 | | 56 | | 34 | | 12 | represents | 12345678 |
+----+ +----+ +----+ +----+ +--------------+

并且32位值0x444342410x41存储在最低地址,0x44存储在最高地址:

 addr   addr+1  addr+2  addr+3                single 32-bit number
+----+ +----+ +----+ +----+ +--------------+
| 41 | | 42 | | 43 | | 44 | represents | 44434241 |
+----+ +----+ +----+ +----+ +--------------+

但是您第一个示例中的代码将内存用作 32 位数字:它使用 write 系统调用来写入 一个序列字节数stdout。这个字节序列是按照它们在内存中存储的顺序写入的:

 addr
+----+
| 41 | => single byte 'A' is printed, then...
+----+

addr+1
+----+
| 42 | => ...single byte 'B' is printed, then...
+----+

addr+2
+----+
| 43 | => ...single byte 'C' is printed, then...
+----+

addr+3
+----+
| 44 | => ...single byte 'D' is printed
+----+

关于linux - 组装-为什么打印顺序相反?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11607267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com