所以我一直在学习一些关于汇编的教程,讲师编译了以下代码:
;hello3.asm attempts to make the code position independent
section .text
global _start
_start:
;clear out the registers we are going to need
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
;write(int fd, char *msg, unsigned int len)
mov al, 4
mov bl, 1
;Owned!!! = 4f,77,6e,65,64,21,21,21
;push !,!,!,d
push 0x21212164
;push e,n,w,O
push 0x656e774f
mov ecx, esp
mov dl, 8
int 0x80
;exit(int ret)
mov al,1
xor ebx, ebx
int 0x80
请注意,消息Owned!!!
被压入堆栈而不是保留在.text
段中。因此,当我尝试执行它时,出现Segment Fault
错误!
相反,如果我将消息保留在 中.text
,则一切正常。
我用来执行的命令:
$> nasm -f elf64 hello4.asm
$> ld -o hello hello4.o
有任何想法吗?