我是新裝配。我試圖通過參考一本名爲「編寫安全工具和漏洞利用」的書來學習。熟悉本書的人都知道彙編代碼是爲32位編寫的,但是我在64位系統上編譯。x86-64彙編代碼未運行
由於這個原因我重寫了在64位上運行的代碼。成功編譯代碼後,當我嘗試運行程序時,所需的輸出未完成。相反,我收到沒有輸出。
我在AMD64 Debian Linux系統上構建這個。這裏是我試圖從接收輸出代碼:
global _start
_start:
xor rax,rax
jmp short string
code:
pop rsi
push byte 15
push rsi
push byte 1
mov al,4
push rax
int 0x80
xor rax,rax
push rax
push rax
mov al,1
int 0x80
string:
call code
db 'Hello, world !',0x0a
我編譯使用下面的命令
它$> NASM -f ELF64 hello.asm $> LD -s -o你好你好。
當我嘗試運行沒有輸出。
任何關於我哪裏出錯的建議?
我從這段代碼假設你正試圖爲堆棧創建代碼基於緩衝區的利用。對於64位代碼,你應該真正使用'syscall'而不是'int 0x80',而64位調用約定傳遞寄存器中的大部分'syscall'參數,而不是堆棧。 –
如果你在'strace'下運行你的代碼,你會得到它所做的系統調用的跟蹤,並帶有錯誤代碼。 –