我正在尝试在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上,所有内容都按预期工作。
答案 0 :(得分:0)
嗨,我就像您正在寻找一种直接调用syscall的方法,例如:socket,bind等。
在Internet上搜索时,我发现您可以调用此文件中定义的syscall:
/usr/include/i386-linux-gnu/asm/unistd_32.h
例如socket
的系统调用为十进制的359,而bind
的系统调用为十进制的361
均已在x86_32中进行了测试