成功制作“你好,世界!”之后我想在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
被替换为某些东西。我尝试了多种操作,例如rsp
,esp
,rsi
,esi
,rsp+1
,rsp+4
等,但都没有用。他们要么不编译,要么什么都不打印。
正确的方法是什么? (请注意:这仅出于实验目的。我知道在这种情况下可以使用push
/ pop
,但我想学习如何使用此方法。)