linux x86_32上的socket系统调用

时间:2014-03-19 23:29:27

标签: linux-kernel system-calls

我正在尝试在linux x86_32上挂接套接字系统调用。此系统调用不存在,但通过socketcall进行门控。

man socketcall:socketcall() is a common kernel entry point for the socket system calls. call determines which socket function to invoke. args points to a block containing the actual arguments, which are passed through to the appropriate call.

我用我自己的函数挂钩了这个系统调用(__NR_socketcall在我的系统上是102,这也在http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html上说明),它打印了一些内容并在之后调用了原始函数。但是,我的函数永远不会被调用。此外,strace显示调用了socket()系统调用。

基本问题:如何在linux x86_32上挂接套接字系统调用?

子问题:为什么strace显示socket()系统调用而不是socketcall()?

在存在套接字系统调用的x86_64上,所有内容都按预期工作。

1 个答案:

答案 0 :(得分:0)

嗨,我就像您正在寻找一种直接调用syscall的方法,例如:socket,bind等。

在Internet上搜索时,我发现您可以调用此文件中定义的syscall: /usr/include/i386-linux-gnu/asm/unistd_32.h

例如socket的系统调用为十进制的359,而bind的系统调用为十进制的361

均已在x86_32中进行了测试