当前位置: 技术问答>linux和unix
求助一条Linux下AT&T的汇编语句
来源: 互联网 发布时间:2016-02-08
本文导语: int res; int fd; ... ... __asm__ ("int $0x80" : "=a" (res) : "0" (5), "b"(fd)); 我想问的是, 开头引号中那句"int $0x80"是什么意思? 是不是和中断有关? | 是的0x80中断,系统调...
int res;
int fd;
...
...
__asm__ ("int $0x80"
: "=a" (res)
: "0" (5), "b"(fd));
我想问的是, 开头引号中那句"int $0x80"是什么意思? 是不是和中断有关?
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 中获得。
Linux 下的系统调用是通过中断(int 0x80)来实现的。在执行 int 80 指令时,寄存器 eax 中存放的是系统调用的功能号,而传给系统调用的参数则必须按顺序放到寄存器 ebx,ecx,edx,esi,edi 中,当系统调用完成之后,返回值可以在寄存器 eax 中获得。
|
还有系统调用表 entry.s
当在程序代码中用到系统调用时,编译器会将宏展开,展开后的代码实际上是将系统调用号放入ax后移用int 0x80使处理器转向系统调用入口,然后查找系统调用表entry.s,进而由内核调用真正的功能函数。
当在程序代码中用到系统调用时,编译器会将宏展开,展开后的代码实际上是将系统调用号放入ax后移用int 0x80使处理器转向系统调用入口,然后查找系统调用表entry.s,进而由内核调用真正的功能函数。