新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式系統(tǒng)中進(jìn)程間通信的監(jiān)視方法

        嵌入式系統(tǒng)中進(jìn)程間通信的監(jiān)視方法

        作者: 時間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

        被監(jiān)視進(jìn)程進(jìn)入系統(tǒng)調(diào)用和退出系統(tǒng)調(diào)用時,都會觸發(fā) wait() 返回,使我們的程序有機(jī)會運行。因此,我們需要使用 syscall_entry 來記錄當(dāng)前時刻是被監(jiān)視進(jìn)程進(jìn)入系統(tǒng)調(diào)用,還是退出系統(tǒng)調(diào)用。這是一個開關(guān)量,非常容易理解。 最后,每次處理完,都需要再次調(diào)用參數(shù)為 PTRACE_SYSCALL 的 ptrace ,準(zhǔn)備監(jiān)視下一次的系統(tǒng)調(diào)用。

        本文引用地址:http://www.104case.com/article/201610/305865.htm

        上面的程序雖然很簡單,但已經(jīng)可以完整的表現(xiàn)出利用 ptrace 截獲被監(jiān)視進(jìn)程的 sendto 系統(tǒng)調(diào)用的過程。值得補(bǔ)充一點的是,利用 ptrace 也可以獲得 sendto 向外發(fā)送的數(shù)據(jù)。

        sendto 系統(tǒng)調(diào)用的定義是:

                #include sys/types.h>
                #include sys/socket.h>
                size_t sendto(int s, const void *msg, size_t len, int flags, 
                              const struct sockaddr *to, socket len_t tolen);

        sendto 包含了六個參數(shù),特別是 msg 參數(shù)指出了發(fā)送的數(shù)據(jù)內(nèi)容。參數(shù) to 指出了發(fā)送的目標(biāo)。利用 PTRACE_PEEKDATA 參數(shù)的 ptrace ,監(jiān)視程序?qū)⒖梢垣@得 sendto 的全部的六個參數(shù)。這樣監(jiān)視程序就完全獲得了被監(jiān)視進(jìn)程要向外發(fā)送的數(shù)據(jù)和發(fā)送目標(biāo)。具體的實現(xiàn)細(xì)節(jié)在此不再展開論述。請參考 man ptrace說明手冊。

        監(jiān)視系統(tǒng)的體系和應(yīng)用

        利用上面討論的技術(shù),我們開發(fā)了可以運行在 mips 目標(biāo)板上的監(jiān)視程序,名為 ipcmsg 。它是一個命令行程序。在我們的應(yīng)用環(huán)境中,它的使用方法是:

               root@host:~$ ipcmsg -p pid -l xxx.xxx.xxx.xxx -b 6000

        pid 是被監(jiān)視進(jìn)程的 pid ,可以通過 ps 命令獲得。 -l 參數(shù)后面指定 PC 主機(jī)的 IP 地址。 -b 參數(shù)指明了接收的端口號。

        最初進(jìn)行監(jiān)視時, ipcmsg 是沒有 IP 地址和端口號參數(shù)的。所有信息是輸出到串口控制臺中。這既影響了運行的效率(大量的在串口上的輸出會影響目標(biāo)板的運行速度),也不利于信息的處理。由于我們的目標(biāo)板具備以太網(wǎng)接口,我們很容易的想到將 ipcmsg 截獲的數(shù)據(jù)包轉(zhuǎn)發(fā)到 PC 主機(jī)上。使用 PC 主機(jī)更便于對進(jìn)程間通信的數(shù)據(jù)包進(jìn)行分析。在 PC 主機(jī)上,我們使用 wireshark 這個非常流行的開源的網(wǎng)絡(luò)報文分析軟件接收來自目標(biāo)板的信息。

        在實際的使用過程中,我們使用以太網(wǎng)線將目標(biāo)板與 PC 主機(jī)相連。然后,在目標(biāo)板上啟動 ipcmsg ,并為其指定監(jiān)視進(jìn)程的 pid 。 ipcmsg運行后,我們在PC主機(jī)上啟動 wireshark 接收來自 ipcmsg 的數(shù)據(jù)包。這些數(shù)據(jù)包中包含了 mips 目標(biāo)板上進(jìn)程間通信的信息。利用我們?yōu)?ipcmsg 專門開發(fā)的 wireshark 插件,在 wireshark 上,我們可以詳細(xì)的分解 ipcmsg 轉(zhuǎn)發(fā)來的數(shù)據(jù)包,非常直觀的分析進(jìn)程間通信的過程和可能存在的問題。

        從圖中可以看到,我們從 ipcmsg 獲得了進(jìn)程間通信的方式,參數(shù)( path 是 AF_UNIX域 socket 地址參數(shù)),方向和內(nèi)容,以及進(jìn)程名稱。這些信息幫助我們對嵌入式系統(tǒng)的運行狀態(tài)進(jìn)行分析。而這一切非常直觀和便于操作。


        上一頁 1 2 3 4 5 下一頁

        關(guān)鍵詞:

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 堆龙德庆县| 龙陵县| 阜宁县| 隆化县| 巨鹿县| 平远县| 铜鼓县| 榆中县| 阿城市| 那坡县| 汉中市| 万全县| 满城县| 崇礼县| 乌拉特后旗| 庆元县| 望城县| 闽侯县| 焦作市| 婺源县| 昆山市| 讷河市| 旬阳县| 蒙山县| 莱芜市| 藁城市| 乐昌市| 灌云县| 楚雄市| 东宁县| 英吉沙县| 双柏县| 黎城县| 石泉县| 四平市| 长泰县| 普格县| 元江| 隆尧县| 阿拉善左旗| 万源市|