進(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

復(fù)制代碼
int main()
{ int i; for(i = 0;i < 10; ++i) {
        printf("My counter: %d\n", i);
        sleep(2);
    } return 0;
}

網(wǎng)友評(píng)論