我似乎有一个有趣的问题,尽管我可能做错了什么。
我的问题是我试图将 AAAABBBBCCCC 推入堆栈,然后通过标准输出打印它们。但是,在我的 x86_64 环境中,似乎是push 0x41414141
pushes 4141414100000000
。
所以下面的代码块:
global _start
section .text
_start:
push 0x43434343 ; CCCC
push 0x42424242 ; BBBB
push 0x41414141 ; AAAA
xor rax,rax ; Zero RAX
mov byte al,0x1 ; 1 for sys_write
mov rdi,rax ; 1 for stdout
mov rsi,rsp ; RSP for source
mov byte dl,0xC ; 12
syscall
xor rax,rax ; Zero RAX
mov al, 0x3C ; 60 for sys_edxit
cdq ; 0 for clean exit.
syscall
Outputs AAAABBBB
,我认为只有 8 个字节,实际上是我要求的 12 个字节。当通过管道传输到输出文件并在 hexedit 中查看时,我注意到它正在显示414141410000000042424242
.
我认为push
指令推动了一个dword
价值。到一个qword
大小的堆栈上?我这样想对吗?
这可以通过考虑额外的字节,并将我的长度更改为 20 来避免。但这会导致诸如sys_open
.
所以我的问题是,我做错了什么?