專利名稱:一種監視串口通信數據的方法
技術領域:
本發明涉及通信技術領域,尤其涉及一種監視串口通信數據的方法。
背景技術:
串行接口是一種將數據連續串行發送出去的接口電路,串口按位(bit)發送和接收字節。盡管串口的通信速度比按字節(byte)的并行通信慢,但串口可以在使用一根線發送數據的同時用另一根線接收數據。另外串口很簡單并且能夠實現遠距離通信,比如IEEE488定義并行通行狀態時,規定設備線 總長不得超過20米,并且任意兩個設備間的長度不得超過2米;而對于串口而言,長度可達1200米。因此,串口通訊作為常用的通訊方式,在自動化控制等領域有著大量的應用。同時為了保證自動化系統的安全性及可核查性,大量的串口通訊數據又需要一種有效的監視方式進行監視。現有技術中的串口通訊的監視,一般有兩種在線方式和離線方式,在線方式現在一般使用驅動程序監視,離線方式一般為串口調試工具。現有的串口監視方法普遍采用的是把電腦的一個串口連接到一個被監視的串口,然后在電腦上運行一個串口通信監視軟件,這樣的方法必然需要中斷串口通信才能實現,同時操作非常復雜。因此,常用的串口數據監視方法離線監視或者通過串口驅動監視數據,前者明顯不能監視正常的通訊數據,后者調試、使用都比較麻煩。驅動程序監視的開發調試比較麻煩,并且運行在內核驅動中,容易造成藍屏等問題。串口調試工具只能手工操作運行收發數據,不能完全和實際情況相吻合,發送速度也受到手工操作的限制。專利號為CN200710145241. 5的方式,兩個USB轉串口模塊,每個串口輸出端分別連接到串口通信雙方的發送端,每個地線連接到所述串口通信雙方的共同地線,用于分別將從所述串口通信雙方接收到的數據轉換為USB協議數據;USB集線器模塊,其USB輸出端口分別連接到所述兩個USB轉串口模塊的USB端,輸入端口連接到處理器的USB接口,用于將來自所述兩個USB轉串口模塊的USB協議數據傳給所述處理器;以及所述處理器,用于對所述USB協議數據進行處理并進行顯示。即使采用采用上述USB串口轉換模塊來實現監視串口通信數據,串口通信的仍然要被中斷才能實現串口通信數據的監視,顯然還不足以滿足技術發展的需要。
發明內容
本發明的目的是針對現有技術中的串口監視方式存在開發困難或監視時,通信需要中斷的技術問題,提供一種監視串口通信數據的方法。本發明的目的通過下述技術方案來實現
一種監視串口通信數據的方法,其具體包含以下步驟步驟I.創建遠程線程進入需要監視進程的內存地址空間,通過遠程線程加載動態鏈接庫;步驟2.獲取動態鏈接庫中相關函數的原始入口地址,并將相關函數原始入口地址修改為指定指令區的執行模塊地址;步驟3.根據修改后的入口地址,在執行相關函數之前,執行模塊先將串口通信的數據取出,提交給顯示模塊,顯示模塊將上述提取出的串口通信數據進行顯示;步驟4.將相關函數的入口地址跳轉回原始入口地址。更進一步地,上述步驟I具體包括在需要監視的進程中分配內存,用來存放要加載的動態鏈接庫,并將動態鏈接庫的絕對路徑寫入遠程線程,加載動態鏈接庫,實現動態鏈接庫代碼的注入。更進一步地,上述步驟2中的獲取動態鏈接庫中相關函數的原始入口地址具體為通過從導入地址表中獲取動態鏈接庫中相關函數的原始入口地址。更進一步地,上述步驟2中的相關函數為API函數,其具體包括執行讀寫操作的函數CreateFile、ReadFiIe>WriteFile0更進一步地,上述步驟3中執行模塊將串口通信的數據取出具體包括
a.保存所有的寄存器,以便處理完成后返回正常的流程;
b.將所有的參數壓入堆棧,參數包括文件句柄、輸入/出緩沖區地址、緩沖區長度;
c.調用Iogfunc函數,將緩沖區中的數據發送到顯示界面。本發明的有益效果通過創建遠程線程加載動態鏈接庫,并修改動態鏈接庫中相關函數的入口地址,先運行執行模塊執行將串口數據提取并進行顯示,使得串口通信的數據得到有效的監視,在這個過程完成后,將函數跳轉回正常地址,繼續執行原有函數的正常功能,不影響函數的正常功能。本方法在整個串口數據監視的過程中不會中斷通訊程序,不影響通訊程序的正常使用,使得串口數據監視方便有效。
具體實施例方式下面結詳細說明本發明的具體實施方式
。本發明公開了一種監視串口通信數據的方法,其具體包含以下步驟步驟I.創建遠程線程進入需要監視進程的內存地址空間,通過遠程線程加載動態鏈接庫;步驟2.獲取動態鏈接庫中相關函數的原始入口地址,并將相關函數原始入口地址修改為指定指令區的執行模塊地址;步驟3.根據修改后的入口地址,執行模塊將串口通信的數據取出,提交給顯示模塊,顯示模塊將上述提取出的串口通信數據進行顯示;步驟4.將相關函數的入口地址跳轉回原始入口地址。通過創建遠程線程加載動態鏈接庫,并修改動態鏈接庫中相關函數的入口地址,先運行執行模塊執行將串口數據提取并進行顯示,使得串口通信的數據得到有效的監視,在這個過程完成后,將函數跳轉回正常地址,繼續執行原有函數的正常功能,不影響函數的正常功能。本方法在整個串口數據監視的過程中不會中斷通訊程序,不影響通訊程序的正常使用,使得串口數據監視方便有效。更進一步地,上述步驟I具體包括在需要監視的進程中分配內存,用來存放要加載的動態鏈接庫,并將動態鏈接庫的絕對路徑寫入遠程線程,加載動態鏈接庫,實現動態鏈接庫代碼的注入。其可以使用執行LoadLibrary函數實現加載動態鏈接庫。其中內存分配可以采用VirtualAllocEx函數實現,動態鏈接庫的絕對路徑寫入遠程線程則可以采用WriteProcessMemory函數實現,加載動態鏈接庫可以采用CreateRemoteThread函數實現。上述這些API函數(Application Programming Interface,應用程序編程接口)是一些預先定義好的函數,目的是提供給應用程序與開發人員基于某軟件或硬件的以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。本發明中可以采用直接采用調用API函數的方法,提高了本方法的可操作性和適應性,也使得本發明的方法更加容易實現。更進一地,上述步驟2中的獲取動態鏈接庫中相關函數的原始入口地址具體為通過從導入地址表中獲取動態鏈接庫中相關函數的原始入口地址。從導入地址表中獲取動態連接口庫中相關函數的原始入口地址方便快捷,便于實現,同時將相關函數的入口地址替換為執行模塊的地址,在調用相關函數時先進入執行模塊的地址進行執行,執行模塊將串口數據提取并進行顯示,實現串口通信數據的有效監視。更進一步地,上述步驟2中的相關函數為API函數,其具體包括執行讀寫操作的函數CreateFile、ReadFiIe> WriteFile0采用上述執行讀寫操作的函數進一步提高了本方法的可操作性和適應性,也使得本發明的方法更加容易實現。只需要監視上述執行讀寫操作的函數就可以得到串口通信的數據。將ReadFile的入口地址修改為執行模塊的地址,在執行函數前,先運行執行模塊,執行模塊將窗口通信數據提取并進行顯示,實現串口通信數據的有效監視,然后ReadFile函數的入口地址跳轉回原始的ReadFile函數的 入口地址,繼續執行ReadFile函數,采用上述API函數同樣也提高了本方法的可操作性和適應性,使得本發明的方法更加容易實現。更進一步地,上述步驟3中執行模塊將串口通信的數據取出具體包括a、保存所有的寄存器,以便處理完成后返回正常的流程;b.將所有的參數壓入堆棧,參數包括文件句柄、輸入/出緩沖區地址、緩沖區長度;c.調用Iogfunc函數,處理緩沖區中的數據,將數據發送到顯示界面。采用上述方式將串口通信的數據取出來,提交給窗口進行顯示,最后跳轉到正常的函數地址進行執行正常的函數。例如可以采用以下的程序段實現執行模塊的執行操作,先保存所有的寄存器,然后將返回地址和參數壓入堆棧,再將字節序的參數壓入堆棧,然后將函數名壓入堆棧,調用LogFunc函數,處理需要的數據,即緩沖區中的數據,并將數據發送到顯示界面,然后彈出所有的寄存器,相關函數跳轉到正常的函數地址。DWORD RealAddressOfInterceptedFunction;pushad ;保存所有的寄存器
lea EAX, [ESP+32]
push EAX ;將返回地址和參數壓入堆棧 push [pParamlnfo];將字節序的參數壓入堆棧 push [pszFunctionName];將函數名壓入堆棧 call LogFunc ;調用LogFunc函數,處理需要的數據 popad ;彈出所有的寄存器
jmp [RealAddressOfInterceptedFunction];跳轉到正常的函數地址。這里已經通過具體的實施例子對發明進行了詳細描述,提供上述實施例的描述為了使本領域的技術人員制造或使用本發明,這些實施例的各種修改對于本領域的技術人員來說是容易理解的。本發明并不限于這些例子,或其中的某些方面。本發明的范圍通過附加的權利要求進行詳細說明。上述說明示出并描述了本發明的一個優選實施例,但如前所述,應當理解本發明并非局限于本文所披露的形式,不應看作是對其他實施例的排除,而可用于各種其他組合、修改和環境,并能夠在本文所述發明構想范圍內,通過上述教導或相關領域的技術或知識進行改動。而本領域人員所進行的改動和變化不脫離本發明的精神和范圍,則都應在本發明所附權利要求的保護范圍 內。
權利要求
1.一種監視串口通信數據的方法,其具體包含以下步驟步驟I.創建遠程線程進入需要監視進程的內存地址空間,通過遠程線程加載動態鏈接庫;步驟2.獲取動態鏈接庫中相關函數的原始入口地址,并將相關函數原始入口地址修改為指定指令區的執行模塊地址;步驟3.根據修改后的入口地址,在執行相關函數之前,執行模塊先將串口通信的數據取出,提交給顯示模塊,顯示模塊將上述提取出的串口通信數據進行顯示;步驟4.將相關函數的入口地址跳轉回原始入口地址。
2.如權利要求I所述的監視串口通信數據的方法,其特征在于所述步驟I具體包括在需要監視的進程中分配內存,用來存放要加載的動態鏈接庫,并將動態鏈接庫的絕對路徑寫入遠程線程,加載動態鏈接庫,實現動態鏈接庫代碼的注入。
3.如權利要求I所述的監視串口通信數據的方法,其特征在于所述步驟2中的獲取動態鏈接庫中相關函數的原始入口地址具體為通過從導入地址表中獲取動態鏈接庫中相關函數的原始入口地址。
4.如權利要求I所述的監視串口通信數據的方法,其特征在于所述步驟2中的相關函數為API函數,其具體包括執行讀寫操作的函數CreateFile、ReadFile、WriteFile。
5.如權利要求I至4任意一個權利要求所述的監視串口通信數據的方法,其特征在于所述步驟3中執行模塊將串口通信的數據取出具體包括 a.保存所有的寄存器,以便處理完成后返回正常的流程; b.將所有的參數壓入堆棧,參數包括文件句柄、輸入/出緩沖區地址、緩沖區長度; c.調用Iogfunc函數,將緩沖區中的數據發送到顯示界面。
全文摘要
本發明涉及串口通信技術領域,本發明公開了一種監視串口通信數據的方法,其具體包含以下步驟步驟1.創建遠程線程進入需要監視進程的內存地址空間,通過遠程線程加載動態鏈接庫;步驟2.獲取動態鏈接庫中相關函數的原始入口地址,并將相關函數原始入口地址修改為指定指令區的執行模塊地址;步驟3.根據修改后的入口地址,在執行相關函數之前,執行模塊先將串口通信的數據取出,提交給顯示模塊,顯示模塊將上述提取出的串口通信數據進行顯示;步驟4.將相關函數的入口地址跳轉回原始入口地址。本方法在整個串口數據監視的過程中不會中斷通訊程序,不影響通訊程序的正常使用,使得串口數據監視方便有效。
文檔編號G06F9/445GK102902559SQ201210335959
公開日2013年1月30日 申請日期2012年9月12日 優先權日2012年9月12日
發明者毛虎林, 翟純玉, 付明 申請人:成都四為電子信息股份有限公司