プロセスから呼び出された他のプロセスからの呼び出しを傍受する方法を教えてください。 (例えば、私はmakeを呼び出し、makeからgccへの呼び出しを傍受して変更したいと思っています)。OS-X Linuxインターセプトプロセスコール
0
A
答えて
1
を呼び出すよりも何かをエコーしますが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
は、コマンドをローカルで再定義することができます.gccのマクロを再定義するだけで、CCマクロを再定義するだけで済みます。
は、コマンドからのような、
make CC=echo
ようecho
からgcc
からすべてのコールの代わり(非常に有用ではありませんが、しかし、あなたのアイデアを得る)ことになることを行うことができます。 それとも、
CC=echo
testprogram: testprogram.o
のような行を追加することにより、Makefileの中でそれを行うことができますし、make testprogram
を行う際にmakeが、むしろここでのgcc
関連する問題
- 1. インストール行く - OSXやLinux
- 2. Linuxのアプリケーションカウンタ? (およびOSX?)
- 3. "locate"マックOSXのLinuxコマンド代替
- 4. Mac OSX? Linux?バツ?グノーム? KDE?なぜosxはLinuxとみなされ、なぜLinuxと見なされないのですか?
- 5. UNIX/Linux/Mac OSXファイルのパーミッションを数字として取得
- 6. OSX/Linux、端末からの出力を遅くする
- 7. LinuxとOSXの両方でCocos2d-xプロジェクトをコンパイル
- 8. Windows/OSX/Linux上のPythonのアイコンにバッジを追加する
- 9. Perfect/Swift Compilation OSXでの作業、Linuxでの失敗
- 10. linux/osxからiOSデバイスへのDIYビデオファイルのストリーミング
- 11. 2次元ゲームプログラミング(Linux、OSX、およびWindows) - C++/Python/OpenGL?
- 12. NuGetパッケージをOSX/LinuxのMonoDevelopに復元する
- 13. は、Linuxでファイルを監視するにはOSX
- 14. LinuxまたはOSXでライブラリを動的にロードするには?
- 15. JavaFXのWindowsで失敗し、OSXで動作テストおよびLinux
- 16. OSXとLinuxでのドッキング用のボリュームマウントの動作が異なる
- 17. Linuxではなく、OSX上で拡張可能なテンプレート
- 18. 最大PIDはOSX
- 19. OSXカーネルプログラミング入門
- 20. Qt/OSX WebSocketオープンハンドシェイクタイムアウト
- 21. python:howto open firefox(osx)
- 22. osxでビルドエラー
- 23. OSX -
- 24. OSX
- 25. OSX
- 26. OSX
- 27. OSXのGitクライアント
- 28. osx truncate sd card img
- 29. OSXとLinux上のg ++コンパイラの主な違いは何ですか?
- 30. python 3とOSXまたはLinuxを使用してWonderware Historian OLE DBに接続
* OS-X Linuxインターセプトプロセスコール* OSXまたはLinux?一つを選ぶ。 – cnicutar