【问题标题】:socket syscall on linux x86_32linux x86_32上的套接字系统调用
【发布时间】:2014-04-26 13:20:48
【问题描述】:

我正在尝试在 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 上一切正常。

【问题讨论】:

    标签: linux-kernel system-calls


    【解决方案1】:

    嗨,我就像你在寻找一种直接调用系统调用的方法,例如:socket、bind 等等。

    在互联网上搜索我发现您可以调用此文件中定义的系统调用: /usr/include/i386-linux-gnu/asm/unistd_32.h

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

    全部在 x86_32 中测试

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 2016-06-23
      • 2013-03-13
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 2012-12-30
      • 2016-05-12
      相关资源
      最近更新 更多