После успешного создания «Привет, мир!» Программу в 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
в этом случае, но я хочу научиться делать это таким образом.)