Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 小endian和推进nasm_Assembly_X86_Nasm_Endianness - Fatal编程技术网

Assembly 小endian和推进nasm

Assembly 小endian和推进nasm,assembly,x86,nasm,endianness,Assembly,X86,Nasm,Endianness,我不明白为什么代码的输出是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 d

我不明白为什么代码的输出是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的字节。 在推送dword[x]之后,出现了相同的堆栈图片(向下生长时反转),其中esp指向0a

在以下情况下,同样的问题与代码相关:

  mov dword[x], 0x0a656c4f
  push dword[x]
替换为:

push dword 0x0a656c4f
谢谢。

堆栈向下生长:

推之前:

****
****
**** <--- ESP
堆栈向下增长:

推之前:

****
****
**** <--- ESP
请记住,“小端数”(或大端数)适用于多字节数。“hello world”不会“向后”存储在内存中。同样,堆栈“向下增长”,即
push
减少
esp
——内存不会因为在堆栈上而“颠倒”

Nasm语法的一个相关(?)奇怪之处是,字符常量被假定为按照您编写它们的顺序。例如,如果您搜索环境变量,Nasm会期望:

其他汇编器可能会期望:

cmp dword ptr[esi],“EMOH”
当您将一个汇编程序的语法“转换”为另一个汇编程序的语法时,这通常是一个问题。

请记住,“小尾端”(或大尾端)适用于多字节数。“hello world”不会“向后”存储在内存中。同样,堆栈“向下增长”,即
push
减少
esp
——内存不会因为在堆栈上而“颠倒”

Nasm语法的一个相关(?)奇怪之处是,字符常量被假定为按照您编写它们的顺序。例如,如果您搜索环境变量,Nasm会期望:

其他汇编器可能会期望:

cmp dword ptr[esi],“EMOH”

当你从一个汇编程序的语法“翻译”到另一个汇编程序的语法时,主要是一个问题。

问题的最后一部分有什么意义?寄存器
ebx
ecx
edx
包含
write(2)
系统调用的参数。@Kerrek SB。抱歉,修正了。问题的最后一部分有什么意义?寄存器
ebx
ecx
edx
包含
write(2)
系统调用的参数。@Kerrek SB。对不起,修好了。
cmp dword [esi], 'HOME'
cmp dword ptr [esi], 'EMOH'