999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2012-07-26 04:57:04陳學軍
自動化儀表 2012年3期
關(guān)鍵詞:進程功能

陳學軍

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

0 引言

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

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

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

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

1.1 串口通信流程管理

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

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

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

1.2 Windows平臺進程管理

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

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

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

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

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

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

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

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

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

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

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

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

⑩調(diào)用ResumeThread,繼續(xù)遠程進程的運行。

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

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

2 實現(xiàn)過程及功能分析

2.1 主程序功能及流程

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

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

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

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

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

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

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

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

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

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

CreateFile申明原型語句如下。

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

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

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

CreateFile擴展流程如圖3所示。

圖3 CreateFile擴展流程圖Fig.3 Flowchart of the expanded CreateFile

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

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

ReadFile申明原型語句如下。

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

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

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

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

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

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

ReadFile擴展流程如圖4所示。

圖4 ReadFile擴展流程圖Fig.4 Flowchart of the expanded ReadFile

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

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

WriteFile申明原型語句如下。

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

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

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

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

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

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

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

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

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

CloseHandle申明原型語句如下。

CloseHandle(hObject)。

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

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

因其擴展功能比較簡單,故流程圖省略。

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

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

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

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

4 結(jié)束語

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

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

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

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

[4]羅云彬.Windows環(huán)境下32位匯編語言程序設(shè)計[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機器碼識別及其反匯編算法[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)件的表面缺陷檢測軟件開發(fā)[J].計算機工程與科學,2009,31(10):77-79,153.

猜你喜歡
進程功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
關(guān)于非首都功能疏解的幾點思考
懷孕了,凝血功能怎么變?
媽媽寶寶(2017年2期)2017-02-21 01:21:24
“簡直”和“幾乎”的表達功能
中西醫(yī)結(jié)合治療甲狀腺功能亢進癥31例
辨證施護在輕度認知功能損害中的應(yīng)用
我國高等教育改革進程與反思
Linux僵死進程的產(chǎn)生與避免
男女平等進程中出現(xiàn)的新矛盾和新問題
主站蜘蛛池模板: 国产一区二区在线视频观看| 国产综合精品一区二区| 国产精品99久久久久久董美香| 天天躁狠狠躁| 国产精品一老牛影视频| 中文字幕乱妇无码AV在线| 8090午夜无码专区| 91亚洲精品第一| AV色爱天堂网| 亚洲a级毛片| 亚洲天堂久久久| 亚洲色精品国产一区二区三区| 亚洲女同一区二区| 亚洲成人77777| 久久综合丝袜日本网| 激情网址在线观看| 国产网友愉拍精品视频| 成人午夜亚洲影视在线观看| 国产成人综合亚洲欧美在| 播五月综合| 精品国产黑色丝袜高跟鞋| 国产欧美日韩精品综合在线| 久久国产高清视频| av在线无码浏览| 成人精品免费视频| 国产在线精彩视频论坛| 中文字幕2区| 欧美伊人色综合久久天天| 亚洲av片在线免费观看| 国产爽妇精品| 亚洲免费人成影院| 亚洲免费黄色网| 91丝袜乱伦| 欧美激情伊人| 久久五月视频| 免费一级无码在线网站 | 99re在线免费视频| 黄色网站不卡无码| 精品国产自在在线在线观看| 在线a网站| 亚洲精品桃花岛av在线| 欧美日韩va| 国产福利影院在线观看| 欧美激情二区三区| 五月天久久婷婷| 国产色伊人| 日韩av手机在线| 91国内外精品自在线播放| 亚洲国产精品日韩专区AV| 99久久国产综合精品女同| 日韩国产另类| 国产精品区视频中文字幕 | 国产粉嫩粉嫩的18在线播放91| 久久精品91麻豆| 国产亚洲一区二区三区在线| 欧美亚洲香蕉| 成人午夜在线播放| 在线毛片网站| 97精品久久久大香线焦| 国产香蕉国产精品偷在线观看 | 中文国产成人精品久久一| 日韩在线影院| 在线观看免费黄色网址| 一级看片免费视频| 欧美一区二区福利视频| 久久一本日韩精品中文字幕屁孩| 国产精品亚洲片在线va| 久久国产乱子伦视频无卡顿| 亚洲精品福利视频| 久久精品无码国产一区二区三区| 青青草国产免费国产| 免费一看一级毛片| 色婷婷电影网| 免费国产高清精品一区在线| 国产高清在线观看91精品| 91丝袜美腿高跟国产极品老师| 性色一区| 久久一色本道亚洲| 久青草免费在线视频| 久久久久久久97| 国产在线观看99| a级毛片免费在线观看|