亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Windows平臺(tái)下串口通信數(shù)據(jù)實(shí)時(shí)獲取與監(jiān)測(cè)

        2012-07-26 04:57:04陳學(xué)軍
        自動(dòng)化儀表 2012年3期
        關(guān)鍵詞:鉤子調(diào)用進(jìn)程

        陳學(xué)軍

        (重慶川儀自動(dòng)化股份有限公司,重慶 401121)

        0 引言

        串口通信以其成本低廉、互聯(lián)方式簡(jiǎn)潔有效等特點(diǎn)被眾多智能設(shè)備所采用,它在工業(yè)過(guò)程控制、科學(xué)試驗(yàn)分析等領(lǐng)域的設(shè)備互聯(lián)過(guò)程中得到大規(guī)模的應(yīng)用。而微軟的Windows操作平臺(tái)也以其良好的通用性、圖形用戶(hù)界面(graphical user interface,GUI)以及眾多的技術(shù)支持基礎(chǔ)而成為主要的上位監(jiān)控應(yīng)用平臺(tái)。

        目前,智能設(shè)備的串口通信協(xié)議標(biāo)準(zhǔn)眾多,同時(shí)還存在多種自定義協(xié)議。要實(shí)現(xiàn)與其信息互聯(lián),通過(guò)分析其固有的上位平臺(tái)與設(shè)備的通信流程,獲得交換數(shù)據(jù),從而逆向推斷出通信協(xié)議的方式不失為一種好的解決途徑。

        相對(duì)于傳統(tǒng)的串口通信分析與監(jiān)測(cè)方法(主要有增加示波器或并聯(lián)串行接口)[1],本文采用Windows平臺(tái)下的純底層軟件設(shè)計(jì)技術(shù)。該技術(shù)不需要增加另外硬件設(shè)備或終端,達(dá)到了實(shí)時(shí)獲取監(jiān)測(cè)完整通信數(shù)據(jù)的目的。

        1 實(shí)現(xiàn)原理分析

        1.1 串口通信流程管理

        Windows平臺(tái)的最大特征之一是設(shè)備無(wú)關(guān)性,通過(guò)設(shè)備驅(qū)動(dòng)程序?qū)indows應(yīng)用程序和不同的設(shè)備相隔離,使得Windows程序訪問(wèn)設(shè)備時(shí),不需要直接對(duì)相應(yīng)的硬件端口進(jìn)行操作,而只需要通過(guò)Windows操作系統(tǒng)提供的設(shè)備驅(qū)動(dòng)程序來(lái)進(jìn)行數(shù)據(jù)交互即可[2]。

        Windows對(duì)串行通信的通信機(jī)制也進(jìn)行了封裝,對(duì)串口的相應(yīng)操作等同于普通文件的操作,同樣有打開(kāi) (CreateFile)、讀寫(xiě) (ReadFile/WriteFile)、關(guān)閉(CloseHandle)等功能支持。同時(shí),針對(duì)串口通信的獨(dú)特性,又增加了專(zhuān)用的API函數(shù)支持,如串口參數(shù)配置(SetCommState)等[3]。

        通過(guò)以上分析可知,Windows平臺(tái)下的串口通信實(shí)現(xiàn)較為容易,只需根據(jù)通信協(xié)議需要,調(diào)用相應(yīng)的I/O函數(shù)與通信函數(shù)即可達(dá)到目的。而通過(guò)高級(jí)語(yǔ)言平臺(tái)(如 VC/VB/Delphi等)調(diào)用串口通信控件(如MsCOMM)實(shí)現(xiàn)的串口通信也只是訪問(wèn)同樣的I/O函數(shù)與通信函數(shù)封裝而已。因此,這種調(diào)用底層的歸一化正是Windows平臺(tái)下串口通信的重要特點(diǎn)。這也是本文能夠?qū)崿F(xiàn)串口通信監(jiān)控的基礎(chǔ)。只要采用API鉤子技術(shù)對(duì)這些主要API函數(shù)調(diào)用Hook并進(jìn)行相應(yīng)的功能擴(kuò)展,就能達(dá)到實(shí)時(shí)獲取相應(yīng)的串口交換數(shù)據(jù)信息的目的。

        1.2 Windows平臺(tái)進(jìn)程管理

        進(jìn)程是Windows平臺(tái)中正在執(zhí)行的應(yīng)用程序。一個(gè)進(jìn)程指的是一個(gè)執(zhí)行中的文件使用資源的總和,包括虛擬地址空間、代碼、數(shù)據(jù)、對(duì)象句柄、環(huán)境變量和執(zhí)行單元等[4]。在Windows系統(tǒng)中,不同進(jìn)程之間的地址空間是隔離的,用指令直接存取其他進(jìn)程地址空間中的代碼和數(shù)據(jù)是不允許的,甚至連在自己的代碼段中寫(xiě)數(shù)據(jù)都是不合法的,這是由Windows中所設(shè)置的安全機(jī)制中所保障的。

        為了實(shí)現(xiàn)對(duì)關(guān)注的串口通信數(shù)據(jù)進(jìn)行實(shí)時(shí)獲取與監(jiān)測(cè),必須對(duì)其所在的應(yīng)用進(jìn)程進(jìn)行程序注入和API鉤子安裝。Robert Kuster提供了三種進(jìn)程注入方法,用來(lái)實(shí)現(xiàn)將我們編制的串口監(jiān)測(cè)程序注入到我們關(guān)注的進(jìn)程中[5]。

        本文選擇采用CreateRemoteThread方式并根據(jù)實(shí)際需要作了適當(dāng)改變。其基本流程具體如下。

        ①調(diào)用GetOpenFileName,選定需要運(yùn)行的上位運(yùn)行平臺(tái)可執(zhí)行文件。

        ②采用CREATE_SUSPENDED模式調(diào)用CreateProcess加載選定的進(jìn)程,獲得其相應(yīng)的進(jìn)程HANDLE。

        ③在遠(yuǎn)程進(jìn)程中為DLL文件名分配內(nèi)存(VirtualAllocEx)。

        ④把DLL的文件名(全路徑)寫(xiě)到分配的內(nèi)存中(WriteProcessMemory)。

        ⑤使用CreateRemoteThread和LoadLibrary把具備串口監(jiān)測(cè)功能的DLL映射到遠(yuǎn)程進(jìn)程。

        ⑥等待遠(yuǎn)程線程結(jié)束(WaitForSingleObject),即等待LoadLibrary返回。也就是說(shuō)當(dāng)我們的DllMain(以DLL_PROCESS_ATTACH為參數(shù)調(diào)用)返回時(shí),遠(yuǎn)程線程也隨之結(jié)束了。

        ⑦取回遠(yuǎn)程線程的結(jié)束碼(GetExitCodeThread),即LoadLibrary的返回值。

        ⑧釋放第③步分配的內(nèi)存(VirtualFreeEx)。

        ⑨采用CreateRemoteThread和FreeLibrary把DLL從遠(yuǎn)程進(jìn)程中卸載。調(diào)用時(shí),將第⑦步取得的HMODULE傳遞給FreeLibrary(通過(guò)CreateRemoteThread的lpParameter參數(shù))。

        ⑩調(diào)用ResumeThread,繼續(xù)遠(yuǎn)程進(jìn)程的運(yùn)行。

        ?等待線程的結(jié)束(WaitForSingleObject)。

        以上基本流程實(shí)現(xiàn)了將具備串口監(jiān)測(cè)功能的DLL注入到需要監(jiān)測(cè)的上位運(yùn)行軟件進(jìn)程中,而API鉤子的工作則在DLL初始化調(diào)用時(shí)就實(shí)施。

        2 實(shí)現(xiàn)過(guò)程及功能分析

        2.1 主程序功能及流程

        主程序主要用來(lái)完成應(yīng)用界面的生成、被監(jiān)測(cè)分析應(yīng)用程序的加載以及DLL程序的注入。

        主程序功能流程如圖1所示。

        圖1 主程序功能流程圖Fig.1 Functional flowchart of the main program

        2.2 監(jiān)測(cè)DLL功能及流程實(shí)現(xiàn)

        監(jiān)測(cè)DLL是本軟件串口數(shù)據(jù)監(jiān)測(cè)的核心,它主要包括API鉤子的實(shí)施與恢復(fù)、串口數(shù)據(jù)的獲取保存與記錄等功能。

        2.2.1 API鉤子的實(shí)施與恢復(fù)

        分析主程序功能流程可知,API鉤子功能流程重點(diǎn)圍繞串口通信流程所需要調(diào)用的API函數(shù)展開(kāi),主要包括串口初始化(CreateFile)、串口參數(shù)配置(SetCommState)、串口超時(shí)設(shè)置(SetCommTimeouts)、串口通信(ReadFile、WriteFile)、關(guān)閉串口(CloseHandle)。在具體 API鉤子功能實(shí)施過(guò)程中,為保證在眾多Windows平臺(tái)(Windows7/XP/2003/2000/NT)運(yùn)行的可靠性、穩(wěn)定性與通用性,采用自編的X86指令反編譯引擎對(duì)需要Hook的API函數(shù)入口指令進(jìn)行完整性分析[6-7],計(jì)算得到不小于 5 B 的完整程序指令字節(jié)空間,從而可以替換成跳轉(zhuǎn)到新的API函數(shù)的程序指令[8-9]。實(shí)踐證明,這樣的替換過(guò)程使得程序的通用性和穩(wěn)定性更佳。

        API鉤子安裝流程(DLL_PROCESS_ATTACH觸發(fā))如圖2所示。

        圖2 API鉤子安裝流程圖Fig.2 Flowchart of API hook installation

        2.2.2 串口數(shù)據(jù)的獲取、保存與記錄

        替換的API函數(shù)除了完成原API函數(shù)的功能外(通過(guò)調(diào)用原API函數(shù)),還能完成通信串口的捕獲、串口數(shù)據(jù)的完整獲取與轉(zhuǎn)存,以實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)的最終目的。

        下面就關(guān)鍵的幾個(gè)API函數(shù)的替換做簡(jiǎn)要分析,為了簡(jiǎn)單起見(jiàn),沒(méi)有包含相應(yīng)的錯(cuò)誤處理和支持Unicode的代碼。

        ①擴(kuò)展的CreateFile函數(shù)流程

        CreatFile函數(shù)擴(kuò)展流程增加了識(shí)別串口調(diào)用與一般的文件操作功能。

        CreateFile申明原型語(yǔ)句如下。

        CreateFile (lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDistribution,dwFlagsAndAttributes,hTemplateFile);

        在該流程中,關(guān)注的重點(diǎn)參數(shù)為lpFileName。

        通過(guò)此指針即可獲得需要打開(kāi)的設(shè)備名,從而識(shí)別出調(diào)用者是要監(jiān)控的串口還是一般的文件操作。標(biāo)準(zhǔn)的串口定義為“//./COMx”,通過(guò)判別關(guān)鍵字“COM”,可以識(shí)別出是否是串口操作。

        CreateFile擴(kuò)展流程如圖3所示。

        圖3 CreateFile擴(kuò)展流程圖Fig.3 Flowchart of the expanded CreateFile

        ②擴(kuò)展的ReadFile函數(shù)流程

        ReadFile函數(shù)擴(kuò)展流程擴(kuò)展了獲得串口的數(shù)據(jù)讀入并轉(zhuǎn)存的功能。

        ReadFile申明原型語(yǔ)句如下。

        ReadFile(hFile,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead,lpOverlapped);

        在該流程中,關(guān)注的重點(diǎn)參數(shù)如下。

        hFile:與保存的串口handle相比較,就可知道是否是串口讀操作。

        lpBuffer:串口讀入的數(shù)據(jù)存放在此區(qū)域。

        nNumberOfBytesToRead:串口要讀入的字節(jié)數(shù)。

        lpNumberOfBytesRead:指向串口實(shí)際讀入的字節(jié)數(shù)變量。

        ReadFile擴(kuò)展流程如圖4所示。

        圖4 ReadFile擴(kuò)展流程圖Fig.4 Flowchart of the expanded ReadFile

        ③擴(kuò)展的WriteFile函數(shù)流程

        WriteFile函數(shù)擴(kuò)展流程擴(kuò)展了獲得寫(xiě)入串口的數(shù)據(jù)并轉(zhuǎn)存的功能。

        WriteFile申明原型語(yǔ)句如下。

        WriteFile(hFile,lpBuffer,nNumberOfBytesToWrite,pNumberOfBytesWritten,lpOverlapped)。

        該流程中需要關(guān)注的重點(diǎn)參數(shù)如下。

        hFile:與保存的串口handle相比較,就可知道是否是串口寫(xiě)操作。

        lpBuffer:寫(xiě)入串口的數(shù)據(jù)存放在此區(qū)域。

        nNumberOfBytesToWrite:要寫(xiě)入串口的字節(jié)數(shù)。

        lpNumberOfBytesWritten:指向?qū)嶋H寫(xiě)入串口的字節(jié)數(shù)變量。

        其功能流程與ReadFile基本一致,只是寫(xiě)操作與讀操作存在差別。

        ④擴(kuò)展的CloseHandle函數(shù)流程

        CloseHandle函數(shù)擴(kuò)展流程擴(kuò)展的功能是判斷串口操作是否結(jié)束,如是,則清除相應(yīng)的串口捕獲標(biāo)志及handle。

        CloseHandle申明原型語(yǔ)句如下。

        CloseHandle(hObject)。

        關(guān)注的重點(diǎn)參數(shù)是hObject。

        與保存的串口handle相比較,就可知道串口操作是否結(jié)束。

        因其擴(kuò)展功能比較簡(jiǎn)單,故流程圖省略。

        ⑤串口獲取數(shù)據(jù)的轉(zhuǎn)換與保存

        在新API函數(shù)擴(kuò)展功能中,每個(gè)API函數(shù)的擴(kuò)展目標(biāo)明確。針對(duì)串口操作狀態(tài)以及獲得的輸入輸出數(shù)據(jù)進(jìn)行了直接轉(zhuǎn)存,其目的就是為了盡量減小運(yùn)行擴(kuò)展功能占用的時(shí)間,以保障原固有通信流程的實(shí)時(shí)性。但為了便于后續(xù)分析查看等的需要,還要對(duì)轉(zhuǎn)存的數(shù)據(jù)進(jìn)行標(biāo)注、轉(zhuǎn)換(如輸入數(shù)據(jù)、輸出數(shù)據(jù)的區(qū)分,十六進(jìn)制數(shù)據(jù)到十進(jìn)制的轉(zhuǎn)換等)及保存。本文采用的是在被監(jiān)控進(jìn)程結(jié)束時(shí)一次性完成標(biāo)注、轉(zhuǎn)換、保存工作,具體實(shí)現(xiàn)過(guò)程不再詳述。

        3 結(jié)果分析及驗(yàn)證

        按照本文分析的思路,設(shè)計(jì)了基于串口通信數(shù)據(jù)獲取與監(jiān)測(cè)的軟件包 COMSPY,它包括運(yùn)行于Windows平臺(tái)上的可執(zhí)行程序COMSPY.EXE以及串口監(jiān)測(cè)功能的COM.DLL。通過(guò)產(chǎn)品研發(fā)、實(shí)際使用過(guò)程驗(yàn)證(智能儀表通信平臺(tái)、科學(xué)儀器通信平臺(tái)、過(guò)程控制通信平臺(tái))以及市面上常用串口通信調(diào)試,達(dá)到了預(yù)期的實(shí)時(shí)性、準(zhǔn)確性、通用性效果,并實(shí)現(xiàn)了完整通信數(shù)據(jù)獲取的目的。其準(zhǔn)確性主要體現(xiàn)在通信串口選擇的一致性、通信參數(shù)設(shè)置的一致性(包括Baud、Size、Parity、Stop bit等)、通信流程(讀/寫(xiě))和數(shù)據(jù)幀的一致性以及通信周期時(shí)間的一致性

        4 結(jié)束語(yǔ)

        本研究采用了進(jìn)程注入和基于串口的API鉤子等系統(tǒng)底層軟件設(shè)計(jì)技術(shù),將數(shù)據(jù)獲取與監(jiān)控同步并存于設(shè)備的正常工作過(guò)程中,不影響相關(guān)智能設(shè)備與上位監(jiān)控平臺(tái)串口固有通信流程[10],數(shù)據(jù)可靠準(zhǔn)確。相對(duì)于傳統(tǒng)的依靠增加硬件進(jìn)行串口數(shù)據(jù)獲取的方法,本研究更體現(xiàn)了其應(yīng)用的便捷性,在串口通信協(xié)議機(jī)理分析、通信故障分析和改進(jìn)等方面具有廣泛的應(yīng)用價(jià)值。

        [1]謝菁.基于遠(yuǎn)程注入的串口監(jiān)視程序[J].西南民族大學(xué)學(xué)報(bào),2008(8):600-605.

        [2]晁永生,樊軍,申曉萍,等.淺談Visual C++串口通信編程[J].科技廣場(chǎng),2007(1):73-75.

        [3]孫達(dá),羅海福.Windows API在串口通信中的應(yīng)用[J].微計(jì)算機(jī)信息,2004(4):106-108.

        [4]羅云彬.Windows環(huán)境下32位匯編語(yǔ)言程序設(shè)計(jì)[M].北京:電子工業(yè)出版社,2003:453-528.

        [5]Robet K.Three ways to inject your code into another process[EB/OL].[2003- 08- 20].http://www.codeproject.com/KB/threads/winspy.aspx.

        [6]Linxer.x86機(jī)器碼識(shí)別及其反匯編算法[EB/OL].[2006-05-12].http://linxer.bokee.com/4277473.html.

        [7]Egogg.打造自己的反匯編引擎[EB/OL].[2008-10-22].http://bbs.pediy.com/showthread.php?t=75094.

        [8]Huwei.hook api技術(shù)心得[EB/OL].[2010-09-16].http://home.51.com/huwei765/diary/item/10047018.html.

        [9]段鋼.加密與解密[M].3版.北京:電子工業(yè)出版社,2008:471-483.

        [10]段敬紅,馮江,張發(fā)存.基于軟件構(gòu)件的表面缺陷檢測(cè)軟件開(kāi)發(fā)[J].計(jì)算機(jī)工程與科學(xué),2009,31(10):77-79,153.

        猜你喜歡
        鉤子調(diào)用進(jìn)程
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        債券市場(chǎng)對(duì)外開(kāi)放的進(jìn)程與展望
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        誰(shuí)和誰(shuí)好
        幸福的一家
        《脈望館鈔校本古今雜劇》穿關(guān)之“鉤子困帶”考
        中華戲曲(2017年2期)2017-02-16 06:53:24
        基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
        精鉤子
        金山(2016年5期)2016-05-30 14:18:17
        社會(huì)進(jìn)程中的新聞學(xué)探尋
        我國(guó)高等教育改革進(jìn)程與反思
        欧美大屁股xxxx高跟欧美黑人 | 亚洲av午夜成人片精品| 操国产丝袜露脸在线播放| 中文字幕亚洲乱码成熟女1区| 久久人人爽人人爽人人片av东京热| 亚洲人在线观看| 精品一区二区中文字幕| 有坂深雪中文字幕亚洲中文| 日韩aⅴ人妻无码一区二区| 欧美做受视频播放| 中文字幕人成乱码中文乱码 | 美女用丝袜脚玩我下面| 国产又a又黄又潮娇喘视频| 在线国产小视频| 牛鞭伸入女人下身的真视频| 亚洲男人堂色偷偷一区| 亚洲精品天堂日本亚洲精品| 国产做无码视频在线观看| 日日噜噜夜夜爽爽| 久久精品国产亚洲AⅤ无码剧情| 一区二区三区日本高清| 天天狠天天添日日拍| 久久6国产| 亚洲综合天堂av网站在线观看| 97成人精品国语自产拍| 免费无码黄动漫在线观看| 国产欧美日韩在线观看| 日本一区二区在线播放观看| 极品粉嫩小仙女高潮喷水操av| 亚洲精品一区国产欧美| 热久久这里只有| 国产优质女主播在线观看| 少妇被黑人嗷嗷大叫视频| 日韩亚洲欧美中文在线| 四虎影视久久久免费| 亚州中文字幕乱码中文字幕| 国内精品久久久久影院薰衣草| 五月天激情小说| 色青青女同性恋视频日本熟女| 国产情侣一区二区三区| 欧洲日本一线二线三线区本庄铃 |