代码之家  ›  专栏  ›  技术社区  ›  rdre8

x86指令,堆栈指针解释

  •  -1
  • rdre8  · 技术社区  · 10 月前

    以下说明:

    0xffffd096    push eax
    0xffffd097    push 0x41414141
    Oxffffd09c    push 0x42424242 
    

    按如下方式影响堆栈:

    0xffffd024|+0x0000    "BBBBAAAA"    <- esp
    0xffffd028|+0x0004    "AAAA" 
    0xffffd02c|+0x0008    Ox00000000
    

    为什么堆栈指针会自动引用两个连续的 push imm \x68 合并后的操作码,与之前的不同 push eax \x50 操作码?

    1 回复  |  直到 10 月前
        1
  •  1
  •   Diego Ferruchelli    10 月前

    我认为你误读了输出。

    您有八个字节(“BBBBAAAA”),从0xffffd024|+0x0000开始。

    您有四个字节(“AAAA”),从0xffffd028 |+0x0004开始。

    两个“AAAA”是一样的。

    (您使用的工具可能会打印从起始地址开始的每一行,直到找到0x00,就像它们是C字符串一样。)

    从堆栈顶部(较低地址)到底部:

    0xffffd024|+0x0000    "BBBB" (four bytes, 0x42424242)
    0xffffd028|+0x0004    "AAAA" (four bytes, 0x41414141)
    0xffffd02c|+0x0008    Ox00000000 (four bytes, the content of eax)
    
    推荐文章