我不知道为什么,但是当我使用下面代码的十六进制作为shell代码时,它可以工作:
Section .text
global _start
_start:
mov ebx,0
mov eax,1
int 0x80
但是当我使用下面代码的十六进制时,它不起作用并且出现分段错误:
Section .text
global _start
_start:
xor ebx,ebx
mov al,1
int 0x80
我知道这是因为使用'al'。我不知道为什么使用'eax'正常工作但使用'al'得到错误?
非常感谢。
Ya Ali。
答案 0 :(得分:1)
因为int 0x80需要32位参数。当你传递低8位(AL)时,eax的高位部分可能包含任何内容(未定义的值),所以不是传递1而是最终传递0x ?????? 01