为什么此汇编代码不打印堆栈的顶部?

时间:2019-03-10 18:41:47

标签: windows assembly x86-64

成功制作“你好,世界!”之后我想在x86-64中编写程序 制作一个可以窥视堆栈顶部的程序(无需弹出它,并使用esp寄存器,以便我可以了解它的工作原理)。这是NASM中的程序:

extern GetStdHandle, WriteConsoleA, ExitProcess
section .bss
    dummy resd 1
section .text
%macro print 3
    mov rcx, %1
    mov rdx, %2
    mov r8, %3
    mov r9, dummy
    push NULL
    call WriteConsoleA
%endmacro
_start:
    mov rcx, STD_OUTPUT_HANDLE
    call GetStdHandle

    push 65
    print rax, [x], 1

    mov rcx, 0
    call ExitProcess

NULL equ 0
STD_OUTPUT_HANDLE equ -11

print rax, [x], 1行,x被替换为某些东西。我尝试了多种操作,例如rspesprsiesirsp+1rsp+4等,但都没有用。他们要么不编译,要么什么都不打印。

正确的方法是什么? (请注意:这仅出于实验目的。我知道在这种情况下可以使用push / pop,但我想学习如何使用此方法。)

0 个答案:

没有答案