我似乎有一個有趣的問題,雖然我可能做了一些公然錯誤的事情。nasm 64位推qword?
我的問題是,我試圖將AAAABBBBCCCC推入堆棧,然後通過標準輸出打印它們。但是,似乎在我的x86_64環境中,push 0x41414141
推動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
輸出AAAABBBB
中,我認爲是隻有8個字節,竟是12我問。當輸入到輸出文件並以hexedit查看時,我注意到它正在顯示414141410000000042424242
。
我認爲push
指令推動了dword
的值。到一個qword
大小的堆棧?我是否認爲這是正確的?
這可以通過考慮額外的字節並將我的長度更改爲20來避免。但這會導致諸如sys_open
之類的問題。
所以我的問題是,我做錯了什麼?
@DCoder:根據'push'指令上的操作僞代碼,你是對的,因爲操作數會被符號擴展。 ---嗯......他只是刪除了他的評論? – IdiotFromOutOfNowhere