如何攔截從我的進程調用的其他進程發出的調用。 (說 - 我打電話make,我想攔截並修改make的gcc調用)。OS-X Linux攔截進程調用
0
A
回答
1
這裏做在Makefile是一個小例子與ptrace的:
#include <unistd.h>
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sys/user.h>
#include <sys/prctl.h>
const char *sys_call_name(long num);
int main()
{
pid_t pid = fork();
struct user_regs_struct regs;
if (!pid) {
/* child */
while (1) { printf("C\n"); sleep(1); }
}
else { /* parent */
int status = 0;
ptrace(PTRACE_ATTACH, pid, NULL, 0);
ptrace(PTRACE_SETOPTIONS, pid, NULL, PTRACE_SYSCALL) ;
while (1) {
printf("waiting\n");
pid = wait(&status);
/* child gone */
//if (WIFEXITED(status)) { break; }
ptrace(PTRACE_GETREGS, pid, 0, ®s);
/* regs.orig_eax is the system call number */
printf("A system call: %d : %s\n", regs.orig_eax, sys_call_name(regs.orig_eax));
/* let child continue */
ptrace(PTRACE_SYSCALL, pid, NULL, 0);
}
}
return 0;
}
const char *sys_call_name(long num) {
switch(num) {
case 4: return "write";
case 162: return "nanosleep";
case 165: return "getresuid";
case 174: return "rt_sigaction";
case 175: return "rt_sigprocmask";
default: return "unknown";
}
}
0
你不容易。問題所在的設施是ptrace功能,而不是心臟病。
1
從您的問題聽起來您正在尋找Makefile幫助,特別是您正在尋找所有對C編譯器的調用。
make
允許在本地重新定義任何命令 - 所有您需要做的是重新定義make中的宏 - 對於gcc您只需重新定義CC宏。
你可以做到這一點從命令像,像
make CC=echo
這將取代從gcc
所有調用echo
(不是很有用,但你的想法)。 或者你也可以通過添加像
CC=echo
testprogram: testprogram.o
一條線,當你做make testprogram
化妝會迴音東西,而不是調用gcc的
相關問題
- 1. 攔截在OSX
- 2. 我怎麼攔截linux系統調用?
- 3. 攔截進程執行
- 4. 攔截javascript調用
- 5. Python攔截方法調用
- 6. .NET方法調用攔截
- 7. 攔截COM dllhost.exe調用
- 8. Dojo - 攔截XHR調用
- 9. UITextView攔截調用setSelectedRange?
- 10. 攔截subprocess.Popen調用在Python
- 11. 攔截Dock圖標點擊OSX
- 12. 攔截對golang進程的響應
- 13. 攔截器不攔截
- 14. 使用Selenium攔截Javascript函數調用
- 15. 用Javascript攔截或捕獲Ajax調用
- 16. 如何攔截子進程的父進程
- 17. 使用TAPI進行攔截呼叫
- 18. 用suid調試Linux進程
- 19. 進行AJAX調用而不保留/攔截頁面加載
- 20. C#4攔截方法調用
- 21. 如何攔截/重寫Windows ODBC調用?
- 22. 攔截DOM和JS引擎調用
- 23. 攔截方法調用Objective-C
- 24. 攔截對屬性的調用
- 25. Android - OkHttp攔截器調用onFailure
- 26. Python中的攔截方法調用
- 27. 攔截器沒有被調用retrofit2
- 28. 動態攔截.NET中的調用
- 29. 如何攔截dll方法調用?
- 30. 攔截調用定義的PHP方法
* OS-X Linux攔截進程調用* OSX或Linux?選一個。 – cnicutar 2012-03-21 16:19:26