【发布时间】:2018-02-23 06:28:25
【问题描述】:
我正在编写一个简单的汇编程序以从标准输入中读取(如 scanf)。 这是我的代码。
section .bss
num resb 5
section .txt
global _start
_start:
mov eax,3 ;sys_read
mov ebx,0 ;fd 0
mov ecx,num
mov edx,5
int 0x80
mov eax,4 ;sys_write
mov ebx,1 ;fd 1
mov ecx,num
mov edx,5
int 0x80
mov eax,1 ;sys_exit
mov ebx,0 ;return 0
int 0x80
现在它可以正常工作了,它可以读取和打印。
所以,我尝试将 sys_read 调用中的文件描述符值更改为 1(stdout)、2(syserr)。
代码。
section .bss
num resb 5
section .txt
global _start
_start:
mov eax,3 ;sys_read
mov ebx,1 ;fd 1
mov ecx,num
mov edx,5
int 0x80
mov eax,4 ;sys_write
mov ebx,1 ;fd 1
mov ecx,num
mov edx,5
int 0x80
mov eax,1 ;sys_exit
mov ebx,0 ;return 0
int 0x80
此代码也可以正常工作。
我的问题是,即使在将文件描述符从 0 更改为 1 之后,为什么这段代码可以正常工作。
sys_read 应该取 0 作为 fd。
【问题讨论】:
标签: linux assembly x86 file-descriptor