Linux 在main之前调用系统调用

Linux 在main之前调用系统调用,linux,linux-kernel,Linux,Linux Kernel,我在x86-64上使用Linux。我需要在用户程序开始执行其代码之前(但在加载程序/链接器映射库之后)插入一个系统调用(本质上需要一个操作系统陷阱)。有没有人对在不需要二进制修改/重新编译的情况下实现这一点的最佳方法有什么建议?使用LD_PRELOAD环境变量在libc之前加载自定义库,这将拦截对u libc_start_main的调用,而start似乎用于开始实际的main()函数 或者使用ptrace()像调试器一样附加到进程。为什么要这样做而不需要二进制修改?对我来说,这听起来像是你想为一

我在x86-64上使用Linux。我需要在用户程序开始执行其代码之前(但在加载程序/链接器映射库之后)插入一个系统调用(本质上需要一个操作系统陷阱)。有没有人对在不需要二进制修改/重新编译的情况下实现这一点的最佳方法有什么建议?

使用LD_PRELOAD环境变量在libc之前加载自定义库,这将拦截对u libc_start_main的调用,而start似乎用于开始实际的main()函数


或者使用ptrace()像调试器一样附加到进程。

为什么要这样做而不需要二进制修改?对我来说,这听起来像是你想为一个软件创建一些跟踪软件,然后你会分发和间谍的人。。。xD但如果我错了,请纠正我:)我一直在玩这个。如果我定义自己的u_libc_start_main(),调用它很容易,用dlsym和RTLD_NEXT查找原始地址似乎可以,但到目前为止,我无法调用原始地址或返回原始地址。我怀疑这是因为我没有找到正确的函数签名,所以我破坏了堆栈。在eglibc源代码中查找此函数的实际定义并不容易。