系统代码来自x86-64汇编?

时间:2014-12-21 19:29:45

标签: assembly nasm

我正在浏览一些程序集演示(在Mac上使用NASM,我是装配新手)并看到这样的事情:

; read a byte from stdin
mov eax, 3     ; 3 is recognized by the system as meaning "read"
mov ebx, 0     ; read from standard input
mov ecx, variable    ; address to pass to
mov edx, 1     ; input length (one byte)
int 0x80             ; call the kernel

我开始明白eaxebx等是"通用寄存器",这是存储常见事物的地方。还有更多要在那里学习,但我得到了它的要点。

但令我感到困惑的是3系统识别为"读" )和0从标准输入读取)来自。你怎么知道0意味着"标准输入"?是否有这样的整数值列表,或某些书籍或标准参考?

1 个答案:

答案 0 :(得分:2)

您将系统调用号与系统调用参数混淆。

系统调用号码(例如" 3 =读取")是特定于操作系统的(特定于内核),有时是特定于版本的。例如,请参阅x86 here和x86_64 here上Linux的系统调用号。如何传递参数,如何调用系统调用,以及系统调用数字的含义都是体系结构和内核特定的。

数字" 0"对于"标准输入"另一方面是UNIX标准化值STDIN_FILENO