0

コードの出力がOleである理由がわかりません。リトル エンディアンはプッシュコマンドに影響を与えるべきではありませんか?

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

ありがとう。

4

2 に答える 2

2

スタックは下向きに成長します:

プッシュ前:

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

push DWORD 0x0a656c4f:

****
****
****            -+
0x0A             |
0x65             ^
0x6C             |
0x4F <--- ESP   -+- write(2) four bytes from here
于 2013-07-20T15:01:41.327 に答える