Linux退出功能

时间:2016-01-21 17:07:33

标签: linux linux-kernel

我正在尝试了解linux系统调用机制。我正在读一本书,它在书中说退出函数看起来像那样(用gdb):

mov $0x0,%ebx
mov $0x1,%eax
80 int $0x80

我知道这是一个退出的系统调用,但在我的Debian中它看起来像是:

jmp    *0x8049698
push   $0x8
jmp    0x80482c0
也许有人可以解释一下为什么它不一样?当我尝试在0x80482c0上做disas时 gdb打印我:

  

没有函数包含指定的地址。

另外,有人可以给我一个很好的Linux Internals材料参考(作为Windows内部)吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您最有可能调用的函数是来自C标准库的exit()(请参阅man 3 exit)。此函数是一个库函数,它反过来调用SYS_exit系统调用,但不是系统调用本身。您不会在C程序反汇编中看到漂亮的int 0x80代码。所有现有函数(exit()syscall()等)都是从某个库中调用的,因此您的程序只调用该库,而这些函数不属于您的程序。

如果您想要查看int 0x80代码 - 您可以在C应用程序中内联asm代码。但是,这被认为是一种不好的做法,因为您的代码依赖于体系结构(在您的情况下仅适用于x86体系结构)。

  

有人可以给我一个很好的Linux Internals材料参考

代码本身是最新的参考。所有书籍或多或少都过时了。另请查看内核源代码中的Documentation/目录。