Linux系统调用
您可以在汇编程序中使用Linux系统调用。您需要执行以下步骤才能在程序中使用Linux系统调用-
- 将系统呼叫号放入EAX寄存器中。
- 将参数保存到系统调用中的寄存器EBX,ECX等中。
- 调用相关的中断(80h)。
- 结果通常在EAX寄存器中返回。
有六个寄存器,用于存储所用系统调用的参数。这些是EBX,ECX,EDX,ESI,EDI和EBP。这些寄存器采用从EBX寄存器开始的连续参数。如果有六个以上的自变量,则第一个自变量的存储位置将存储在EBX寄存器中。
以下代码片段显示了系统调用sys_exit的使用-
以下代码片段显示了系统调用sys_write的使用-
所有系统调用及其编号(在调用int 80h之前放入EAX的值)都列在/usr/include/asm/unistd.h中
下表显示了本教程中使用的一些系统调用-
%eax |
名称 |
%ebx |
%ecx |
%edx |
%esx |
%edi |
1 |
sys_exit |
int |
- |
- |
- |
- |
2 |
sys_fork |
struct pt_regs |
- |
- |
- |
- |
3 |
sys_read |
unsigned int |
char * |
size_t |
- |
- |
4 |
sys_write |
unsigned int |
const char * |
size_t |
- |
- |
5 |
sys_open |
const char * |
int |
int |
- |
- |
6 |
sys_close |
unsigned int |
- |
- |
- |
- |