我在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