進(jìn)程附加
在之前的文章中,我們都是trace自己程序fork出來的子進(jìn)程,現(xiàn)在我們來看一下如何trace一個(gè)正在運(yùn)行的進(jìn)程。
trace一個(gè)正在運(yùn)行的進(jìn)程稱為進(jìn)程附加(attach)。使用的是ptrace函數(shù)的PTRACE_ATTACH參數(shù)。當(dāng)一個(gè)進(jìn)程成功附加到一個(gè)正在運(yùn)行的進(jìn)程時(shí),此進(jìn)程會(huì)成為被附加進(jìn)程的父進(jìn)程,同時(shí)向被附加的進(jìn)程發(fā)送一個(gè)SIGSTOP信號(hào),讓其停止,這時(shí)我們就可以對(duì)其進(jìn)行操縱。當(dāng)我們完成對(duì)tracee的操作后就可以使用ptrace的PTRACE_DETACH參數(shù)停止附加。
我們用一個(gè)循環(huán)來模擬一個(gè)正在運(yùn)行的進(jìn)程,下邊稱此程序?yàn)閔ello
int main() { int i; for(i = 0;i < 10; ++i) { printf("My counter: %d\n", i); sleep(2); } return 0; }