求助一条Linux下AT&T的汇编语句
int res;
int fd;
...
...
__asm__ ("int $0x80" \
: "=a" (res) \
: "0" (5), "b"(fd));
我想问的是, 开头引号中那句"int $0x80"是什么意思? 是不是和中断有关?
------解决方案--------------------是的0x80中断,系统调用中断,也就是系统从用户层切换到内核层的中断
Linux 下的系统调用是通过中断(int 0x80)来实现的。在执行 int 80 指令时,寄存器 eax 中存放的是系统调用的功能号,而传给系统调用的参数则必须按顺序放到寄存器 ebx,ecx,edx,esi,edi 中,当系统调用完成之后,返回值可以在寄存器 eax 中获得。
------解决方案--------------------还有系统调用表 entry.s
当在程序代码中用到系统调用时,编译器会将宏展开,展开后的代码实际上是将系统调用号放入ax后移用int 0x80使处理器转向系统调用入口,然后查找系统调用表entry.s,进而由内核调用真正的功能函数。