我在x86-64上使用Linux。在用户程序开始执行代码之前(但在加载器/链接器映射库之后),我需要插入一个系统调用(本质上需要一个陷阱到OS)。有没有人有建议要达到这个需要二进制修改/重新编译没有最好的方法是什么?主要调用系统调用
Q
主要调用系统调用
0
A
回答
2
使用LD_PRELOAD环境变量在libc之前加载自定义库,该库将拦截对__libc_start_main的调用,_start似乎用于开始实际的main()函数。
或者像调试器那样使用ptrace()附加到进程。
+0
我一直在玩这一点。如果我定义了自己的__libc_start_main(),那么调用它很容易,并且使用dlsym和RTLD_NEXT查找原始地址似乎可行,但到目前为止,我还没有能够调用原始或返回。我怀疑这是因为我没有找到正确的函数签名,所以我正在破坏堆栈。在eglibc源代码中找到这个函数的实际定义并不容易。 –
相关问题
- 1. 系统(“”)调用
- 2. Qemu挂在主系统调用
- 3. MIPS:系统调用
- 4. 调用C“系统” ++
- 5. Ptracing系统调用
- 6. 调用android系统
- 7. Pipe()系统调用
- 8. sys_execve系统调用
- 9. 管系统调用
- 10. python系统调用
- 11. indir系统调用
- 12. 系统调用库
- 13. sigaction系统调用
- 14. fork系统调用
- 15. 系统调用Perl
- 16. 系统调用ARM
- 17. 系统调用write
- 18. Linux系统调用
- 19. Vfork系统调用
- 20. 这是要调用分布式系统
- 21. I/O系统调用需要退出
- 22. XV6加计数系统的系统调用调用
- 23. FreeBSD从另一个系统调用发出系统调用
- 24. 系统调用vs函数调用
- 25. x86 linux系统调用调用约定?
- 26. P /调用ioctl系统调用
- 27. Mutex是否会调用系统调用?
- 28. 从系统调用用C
- 29. 使用write()系统调用
- 30. 使用read()系统调用
为什么你想要做这样的事情,而不需要二进制修改?对我来说,这听起来像你想创建一个软件,然后你会分发和监视人的一些跟踪软件... xD,但请纠正我,如果我错了:) – evotopid