我试图读取组件的文件(86,IA-32)中读取文件,我发现这个例子:在组件86 IA-32
mov ebx,eax
mov al,0x3
mov edi,esp
mov ecx,edi
xor edx,edx
mov dh,0xff
mov dl,0xff
int 0x80
其中eax中(第一指令)有开放系统调用的返回码。
有,我还没有完全了解两两件事:
- 为什么做
mov edi,esp
然后mov ecx,edi
而不是做直接mov ecx,esp
? - 为什么把
0xff
和0xff
放在edx寄存器里面?读系统调用期望count
所以在这种情况下的文件大小。
EDIT(完整代码):
section .text
global _start
_start:
;read the file
jmp short call_rw
rw:
push 0x5
pop eax
pop ebx
xor ecx,ecx
int 0x80
mov ebx,eax
mov al,0x3
mov edi,esp
mov ecx,edi
xor edx,edx
mov dl,0xff
mov dh,0xff
int 0x80
mov edx,eax
push 0x4
pop eax
mov bl, 0x1
int 0x80
push 0x1
pop eax
inc ebx
int 0x80
call_rw:
call rw
message db "/home/user/file.txt"
你还没有指定你的目标操作系统,但我猜测Linux(?)。 – Michael
对不起!是的Linux(Gentoo x86) – polslinux
@JerryCoffin我的错,我点击太快回答xD我更新了我的问题! – polslinux