国产爱久久久精品_看**视频一一级毛片_91啪国自产中文字幕在线_国内精品伊人久久久久妇

網(wǎng)絡(luò)消費網(wǎng) >  5G > > 正文
監(jiān)視嵌入式系統(tǒng)內(nèi)進(jìn)程間通信的技術(shù)原理介紹
時間:2022-01-31 10:22:03

本文詳細(xì)描述了一種利用 ptrace 系統(tǒng)調(diào)用,實現(xiàn)嵌入式系統(tǒng)內(nèi)部進(jìn)程通信監(jiān)視方法,并提供了相應(yīng)的實現(xiàn)方案。 概述

復(fù)雜的嵌入式系統(tǒng)中,常常同時運行著相當(dāng)多的進(jìn)程。這些進(jìn)程之間頻繁的進(jìn)行著大量的通信動作。進(jìn)程的運行狀態(tài)與這些不斷發(fā)生的通信有著直接和緊密的聯(lián)系。通過對進(jìn)程間通信的監(jiān)視,開發(fā)人員可以掌控系統(tǒng)內(nèi)部運轉(zhuǎn)的狀態(tài)。發(fā)現(xiàn)錯誤時,利用獲取到的進(jìn)程間通信的信息,調(diào)試工程師更容易發(fā)現(xiàn)問題之所在。

但是,嵌入式系統(tǒng)與開發(fā)人員的接口往往較為單一。開發(fā)人員廣泛使用通常是基于串口或是網(wǎng)絡(luò)接口的終端( console )方式。在這個模式下,開發(fā)人員難以細(xì)致準(zhǔn)確的觀察進(jìn)程間的通信。而且對于計算能力薄弱的嵌入式系統(tǒng)來說,在終端上打印出通信報文既會影響系統(tǒng)內(nèi)部的運行,同時,也會使屏幕上充斥的過多的無用信息,使開發(fā)人員的分析工作無從下手。

為了解決這個問題,在嵌入式 Linux 的平臺上,我們開發(fā)了一整套用于監(jiān)視嵌入式系統(tǒng)內(nèi)進(jìn)程間通信的軟件,用于調(diào)試我們開發(fā)的嵌入式產(chǎn)品。本文詳細(xì)介紹了監(jiān)視嵌入式系統(tǒng)內(nèi)進(jìn)程間通信的技術(shù)原理和實現(xiàn)監(jiān)視軟件的推薦方案。

監(jiān)視方法的基本原理

Linux 中的 ptrace 系統(tǒng)調(diào)用是監(jiān)視進(jìn)程間通信的關(guān)鍵。 ptrace 為我們提供了一種觀察和控制其它進(jìn)程的方法。利用 ptrace ,我們可以截獲正在運行的進(jìn)程的所有的系統(tǒng)調(diào)用。所謂截獲是指,監(jiān)視程序可以在這些系統(tǒng)調(diào)用發(fā)生和退出時,獲得系統(tǒng)調(diào)用的參數(shù),甚至修改參數(shù)。這些系統(tǒng)調(diào)用包括: read , write , sendto, recv 等等。在 Linux 中,用戶可以通過“ man syscalls ”來查看當(dāng)前版本的 Linux 所支持的系統(tǒng)調(diào)用。

在我們的 Linux 嵌入式產(chǎn)品中, AF_UNIX 域的 socket 被廣泛使用。它被用來完成進(jìn)程間通信的工作。 AF_UNIX 域的 socket 的編程模型與通常的 socket 編程模型完全相同。我們的使用方法是:接收進(jìn)程創(chuàng)建一個 AF_UNIX 域的 socket ,設(shè)定其模式為數(shù)據(jù)報( SOCK_DGRAM )。在這之后,為其綁定一個含路徑的文件名,例如: /var/tmp/receive.unix 。這個文件名被內(nèi)核用于標(biāo)識socket。發(fā)送進(jìn)程創(chuàng)建一個相同模式的 AF_UNIX 域的 socket 。然后,調(diào)用 sendto 向接收進(jìn)程發(fā)送消息。用來標(biāo)識接收進(jìn)程 socket 的就是前面提到的文件名,也就是 /var/tmp/receive.unix 。而接收進(jìn)程使用 recvfrom 系統(tǒng)調(diào)用,就可以收到發(fā)送進(jìn)程發(fā)出的消息。

因此,通過 ptrace ,一旦我們接管了被監(jiān)視進(jìn)程的 sendto 和 recvfrom 系統(tǒng)調(diào)用,將使我們能夠截獲到使用這兩個系統(tǒng)調(diào)用進(jìn)行通信的數(shù)據(jù)。

ptrace 系統(tǒng)調(diào)用的定義如下:

#include sys/ptrace.h> long int ptrace(enum __ptrace_request request, pid_t pid, void * addr, void * data);

它共有四個參數(shù)。 request 的值決定 ptrace 執(zhí)行什么樣的任務(wù)。 pid 指明被追蹤的進(jìn)程的 id 。 request 參數(shù)決定了是否需要一個有效的 addr 參數(shù),還是僅用 NULL 即可。如果有必要使用有效的 addr 參數(shù),它的含義是被追蹤的進(jìn)程的進(jìn)程空間的偏移量。 data 類似于 addr 參數(shù),有時也可以使用 NULL 來代替。如果它被使用,它的含義是指向一些數(shù)據(jù),這些數(shù)據(jù)希望被放置到被監(jiān)視的進(jìn)程的用戶空間中。

一個完整的示例代碼將向我們展示監(jiān)視進(jìn)程間通信的技術(shù)細(xì)節(jié)和關(guān)鍵點。代碼按前后順序分段說明。

#include stdio.h> #include stdlib.h> #include sys/ptrace.h> #include sys/wait.h> #include Linux/user.h> #include sys/socket.h> #include sys/un.h> #include Linux/net.h>

為了在程序中使用 ptrace 系統(tǒng)調(diào)用,我們需要增加 ptrace.h 頭文件。為了能夠獲得截獲的系統(tǒng)調(diào)用的函數(shù)入?yún)?,我們需要使?struct user_regs_struct 結(jié)構(gòu)。它在 user.h 中被定義。由于在程序中使用了信號,因此,我們也需要 wait.h 。我們要監(jiān)視通信動作, socket.h 和 un.h 則是必不可少的。

下面是程序的入口主函數(shù):

int main (int argc, char *argv[]) { int status; int syscall_entry = 0; int traced_process; struct user_regs_struct u_in;

status 用于記錄被監(jiān)視進(jìn)程的狀態(tài)變化; syscall_entry 記錄被監(jiān)視進(jìn)程當(dāng)前是進(jìn)入系統(tǒng)調(diào)用,還是從系統(tǒng)調(diào)用中返回; u_in 用來獲得截獲的系統(tǒng)調(diào)用的參數(shù); traced_process 則是被監(jiān)視進(jìn)程的 PID 值。

traced_process = atoi(argv[1]); /* 從命令行得到監(jiān)視進(jìn)程的PID */ ptrace(PTRACE_ATTACH, traced_process, NULL, NULL); wait(status); /* 等待被監(jiān)視進(jìn)程狀態(tài)變化 */ ptrace(PTRACE_SYSCALL, traced_process, NULL, NULL);

參數(shù)為 PTRACE_ATTACH 的 ptrace 對被監(jiān)視進(jìn)程在內(nèi)核中的進(jìn)程結(jié)構(gòu)進(jìn)行修改。使被監(jiān)視進(jìn)程成為當(dāng)前程序的子進(jìn)程。一旦被監(jiān)視進(jìn)程的狀態(tài)發(fā)生變化, wait() 將返回。程序再次調(diào)用 ptrace 。這次的參數(shù)為 PTRACE_SYSCALL 。被監(jiān)視進(jìn)程的進(jìn)程結(jié)構(gòu)再次被修改,其 trace 標(biāo)志被激活。內(nèi)核將在被監(jiān)視進(jìn)程的每一次系統(tǒng)調(diào)用時,觸發(fā)當(dāng)前程序的運行。

While (1) { /* 等待被監(jiān)視程序調(diào)用系統(tǒng)調(diào)用或是發(fā)生其它狀態(tài)變化 */ wait(status); /* 如果被監(jiān)視進(jìn)程退出,函數(shù)返回真。程序退出 */ if ( WIFEXITED(status) ) break; ptrace(PTRACE_GETREGS, traced_process, 0, u_in); if (u_in.orig_eax == 102 u_in.ebx == SYS_SENDTO) { if (syscall_entry == 0) { /* syscall entry */ insyscall = 1; printf(call sendto()n); } else { /* Syscall exit */ Syscall_entry = 0; } } ptrace(PTRACE_SYSCALL, traced_process, NULL, NULL); } /* while */ return 0; } /* main */

關(guān)鍵詞: 技術(shù) 原理 介紹 通信 進(jìn)程 嵌入式 系統(tǒng) 監(jiān)視

版權(quán)聲明:
    凡注明來網(wǎng)絡(luò)消費網(wǎng)的作品,版權(quán)均屬網(wǎng)絡(luò)消費網(wǎng)所有,未經(jīng)授權(quán)不得轉(zhuǎn)載、摘編或利用其它方式使用上述作品。已經(jīng)本網(wǎng)授權(quán)使用作品的,應(yīng)在授權(quán)范圍內(nèi)使用,并注明"來源:網(wǎng)絡(luò)消費網(wǎng)"。違反上述聲明者,本網(wǎng)將追究其相關(guān)法律責(zé)任。
    除來源署名為網(wǎng)絡(luò)消費網(wǎng)稿件外,其他所轉(zhuǎn)載內(nèi)容之原創(chuàng)性、真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考并自行核實。
熱文

網(wǎng)站首頁 |網(wǎng)站簡介 | 關(guān)于我們 | 廣告業(yè)務(wù) | 投稿信箱
 

Copyright © 2000-2020 m.fnsyft.com All Rights Reserved.
 

中國網(wǎng)絡(luò)消費網(wǎng) 版權(quán)所有 未經(jīng)書面授權(quán) 不得復(fù)制或建立鏡像
 

聯(lián)系郵箱:920 891 263@qq.com

備案號:京ICP備2022016840號-15

營業(yè)執(zhí)照公示信息

国产爱久久久精品_看**视频一一级毛片_91啪国自产中文字幕在线_国内精品伊人久久久久妇

        欧美综合一区二区三区| 欧美不卡激情三级在线观看| 精品久久久久久久久久久久久久久久久| 国产精品久久久久永久免费观看| 日韩影院免费视频| 91啦中文在线观看| 五月婷婷欧美视频| 国产亚洲短视频| 免费在线成人网| 久久久国产一区二区三区四区小说| 亚洲6080在线| 久久久精品国产免费观看同学| 午夜精品福利在线| 97精品久久久午夜一区二区三区| 亚洲自拍偷拍图区| 久久亚洲精品小早川怜子| 日韩专区在线视频| 国产人成亚洲第一网站在线播放| 欧美日韩一区二区三区四区五区| 中文字幕一区二区三区在线播放| 激情久久五月天| 日韩理论片网站| 欧美电影免费观看高清完整版在线观看 | 亚洲高清一区二区三区| 99久久久精品| 91国偷自产一区二区三区观看| 亚洲另类在线一区| 制服丝袜日韩国产| 亚洲福利一区二区三区| 91麻豆精品在线观看| 欧洲一区二区三区免费视频| 中文字幕一区二区三区四区| 国产精品资源网| 亚洲一区在线视频| 国产蜜臀av在线一区二区三区| 精品一区二区久久久| 日韩美女久久久| 久久一区二区三区四区| 久久精品国产一区二区三区免费看 | 精品一区二区三区日韩| 亚洲欧洲成人自拍| 久久综合色一综合色88| 精品亚洲免费视频| 一区二区三区四区五区视频在线观看 | 欧美一区二区在线看| 调教+趴+乳夹+国产+精品| 国产蜜臀97一区二区三区| 日韩欧美在线1卡| 捆绑变态av一区二区三区| 亚洲精品日产精品乱码不卡| 国产女人18毛片水真多成人如厕| 国产成人在线影院| 色婷婷狠狠综合| 亚洲在线观看免费| 国产精品区一区二区三| 久久看人人爽人人| 国产成人小视频| 欧美午夜免费电影| 五月激情综合婷婷| 亚洲情趣在线观看| 国产精品久久久久久久久久免费看| www.成人在线| 欧美一级在线视频| 久久99精品久久久| 色播五月激情综合网| 亚洲小说欧美激情另类| 最新国产精品久久精品| 国产精品久线在线观看| 久久免费美女视频| 精品国产污污免费网站入口 | 欧美精品久久99久久在免费线| 日韩二区在线观看| 亚洲国产日韩一区二区| 亚洲综合久久av| 亚洲丝袜制服诱惑| 一区在线中文字幕| 国产拍揄自揄精品视频麻豆| 久久综合狠狠综合久久激情| 成人免费毛片片v| 91精品国产色综合久久ai换脸 | 欧美专区在线观看一区| 轻轻草成人在线| 亚洲成av人影院| 性感美女极品91精品| 一卡二卡三卡日韩欧美| 亚洲卡通动漫在线| 1024国产精品| 亚洲色图视频网站| 中文字幕日韩一区二区| 中文字幕一区av| 中文字幕一区二区三区不卡在线 | 亚洲美腿欧美偷拍| 自拍偷在线精品自拍偷无码专区| 一区视频在线播放| 中文字幕一区二区三区蜜月| 日韩码欧中文字| 国产精品你懂的| 亚洲人成网站色在线观看| 一区在线中文字幕| 亚洲黄色尤物视频| 亚洲精品自拍动漫在线| 亚洲线精品一区二区三区八戒| 亚洲精选一二三| 亚洲国产精品影院| 亚洲成人黄色影院| 日本中文字幕一区| 在线亚洲欧美专区二区| 精品一区二区三区免费观看| 欧美三级日韩在线| 国产成人一级电影| 精品国产欧美一区二区| 久久久久免费观看| 亚洲欧美一区二区视频| 亚洲蜜臀av乱码久久精品| 亚洲成精国产精品女| 色综合天天在线| 国产在线精品一区二区| 日韩欧美在线网站| 久久天堂av综合合色蜜桃网| 中文字幕日本不卡| 夜夜嗨av一区二区三区四季av| 日韩电影在线观看一区| 欧美色涩在线第一页| 国产91精品一区二区麻豆亚洲| 精品国产一区二区三区不卡 | 成人午夜激情影院| 国产丝袜欧美中文另类| 国产精品视频免费| 亚洲成人精品一区| 欧美亚洲国产一区二区三区va| 国产成人综合在线播放| 久久综合九色综合97_久久久| 国产精品系列在线| 亚洲超碰97人人做人人爱| 欧日韩精品视频| 成人免费三级在线| 国产精品久久久久久久久果冻传媒| 亚洲黄色片在线观看| 美女视频免费一区| 日韩欧美高清一区| 中文字幕欧美区| 丝袜亚洲另类欧美| 91精品久久久久久久99蜜桃| 国产亚洲综合在线| 亚洲va欧美va人人爽| 欧美日韩在线播放| 久久综合色8888| 亚洲一区二区三区在线播放| 欧美三级欧美一级| 久久久久综合网| 亚洲国产精品久久艾草纯爱| 欧美日韩精品久久久| 久久久久久久综合| 婷婷综合久久一区二区三区| 91精品婷婷国产综合久久竹菊| 久久精品一区二区| 天堂在线一区二区| 日韩欧美电影在线| 亚洲日本在线天堂| 国产一区视频网站| 国产精品麻豆一区二区 | 亚洲色图视频网| 国产在线视频一区二区| 国产肉丝袜一区二区| 色综合咪咪久久| 99精品在线观看视频| 亚洲小说春色综合另类电影| 正在播放亚洲一区| 一区在线播放视频| 国产麻豆视频一区二区| 国产精品色在线| 欧美性生活久久| 国产日韩综合av| 免费成人在线播放| 国产日韩欧美制服另类| 偷拍日韩校园综合在线| 26uuuu精品一区二区| 日日欢夜夜爽一区| 国产亚洲欧洲997久久综合| 午夜成人免费电影| 成人av小说网| 午夜激情综合网| 欧美大度的电影原声| 亚洲一区二区精品久久av| 成人动漫视频在线| 亚洲国产精品天堂| 久久久久久久久一| 色综合久久88色综合天天6| 久久精品一区蜜桃臀影院| 看电影不卡的网站| 国产精品国产三级国产普通话99 | 国产精品1区二区.| 亚洲曰韩产成在线| 精品国产99国产精品| 午夜精品久久久久久久99水蜜桃| 久久亚洲综合av| 久久国产视频网| 亚洲欧美日韩久久精品| 日韩欧美在线123| 亚洲成人在线观看视频|