Little Endian和nasm推送

我不明白为什么代码的输出是Ole小字节序不应该影响push命令吗?

global _start

  section .data
x: dd 3

section .text
_start:
  mov eax, 4
  mov ebx, 1
  mov dword[x], 0x0a656c4f
  push dword[x]
  mov ecx, esp
  mov edx, 4
  int 0x80
  mov eax,1 
  mov ebx, 0
  int 0x80

如果我在mov dword [x],0x0a656c4f之后正确找到则内存布局为:

  0a (higher) 
  65 
  6c 
  4f (lower)

由于x86的字节序很少,因此x指向值为4f的字节push dword [x]之后,有相同的堆栈图片(随着向下增长而反转),其中esp指向0a

同样的问题与代码有关

  mov dword[x], 0x0a656c4f
  push dword[x]

替换为:

push dword 0x0a656c4f

谢谢。

克瑞克(Kerrek SB)

堆栈向下生长

推送之前:

****
****
**** <--- ESP

之后push DWORD 0x0a656c4f

****
****
****            -+
0x0A             |
0x65             ^
0x6C             |
0x4F <--- ESP   -+- write(2) four bytes from here

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Big Endian和Little Endian支持字节排序

Little Endian与Big Endian架构

将Little Endian转换为Big Endian

检查系统为Little Endian或Big Endian

示例中big-endian和little-endian处理器之间的区别

为什么python的结构认为little-endian和big-endian暗示了不同的长度?

在Big Endian和Little Endian机器中解释32位整数时的困惑

(java)在文件little endian中写入

Mp3文件的PCM数据的存储是否取决于Big Endian和Little Endian?

十六进制转换为INT 32和STRING的Little Endian

将数据发送到Little Endian的串行端口

为什么std :: bitset以Little-Endian方式公开位?

如何从长指针中提取 little-endian unsigned short?

在 PHP 中解压签名的 int32 little-endian

字符串是否始终是Little Endian Unicode?

如何在 C# 中读取 Little Endian 编码文件?

OSX-Tor Guard和Little Snitch

Golang使用MD5编码字符串UTF16 little endian和hash

如何在 Python 中从二进制文件读取和写入“Unicode(UTF-16 little endian)”文本?

将 Little Endian 转换为 Big Endian - 未获得预期结果

如何将boost :: multiprecision :: cpp_int从big endian更改为little endian

在Intel上使用ByteBuffers时,我应何时选择Little Endian与Big Endian?

在ARM中将16位big-endian快速转换为little-endian

可以将big-endian哈希与Little-endian哈希进行比较吗?

将 little Endian hexdump 输出转换为 Big Endian(C 编程)的问题

将Big Endian顺序的32位变量转换为Little Endian

Big-endian 或 Little-endian 对结构成员有何影响?

使用python错误将'UCS-2 Little Endian'文件编码为'utf8'

从单通道12位Little Endian原始二进制数据转换