CN102902559A - 一种监视串口通信数据的方法 - Google Patents
一种监视串口通信数据的方法 Download PDFInfo
- Publication number
- CN102902559A CN102902559A CN2012103359591A CN201210335959A CN102902559A CN 102902559 A CN102902559 A CN 102902559A CN 2012103359591 A CN2012103359591 A CN 2012103359591A CN 201210335959 A CN201210335959 A CN 201210335959A CN 102902559 A CN102902559 A CN 102902559A
- Authority
- CN
- China
- Prior art keywords
- data
- dynamic link
- address
- entry address
- serial communication
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Maintenance And Management Of Digital Transmission (AREA)
Abstract
本发明涉及串口通信技术领域,本发明公开了一种监视串口通信数据的方法,其具体包含以下步骤:步骤1.创建远程线程进入需要监视进程的内存地址空间,通过远程线程加载动态链接库;步骤2.获取动态链接库中相关函数的原始入口地址,并将相关函数原始入口地址修改为指定指令区的执行模块地址;步骤3.根据修改后的入口地址,在执行相关函数之前,执行模块先将串口通信的数据取出,提交给显示模块,显示模块将上述提取出的串口通信数据进行显示;步骤4.将相关函数的入口地址跳转回原始入口地址。本方法在整个串口数据监视的过程中不会中断通讯程序,不影响通讯程序的正常使用,使得串口数据监视方便有效。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种监视串口通信数据的方法。
背景技术
串行接口是一种将数据连续串行发送出去的接口电路,串口按位(bit)发送和接收字节。尽管串口的通信速度比按字节(byte)的并行通信慢,但串口可以在使用一根线发送数据的同时用另一根线接收数据。另外:串口很简单并且能够实现远距离通信,比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。因此,串口通讯作为常用的通讯方式,在自动化控制等领域有着大量的应用。同时为了保证自动化系统的安全性及可核查性,大量的串口通讯数据又需要一种有效的监视方式进行监视。
现有技术中的串口通讯的监视,一般有两种:在线方式和离线方式,在线方式现在一般使用驱动程序监视,离线方式一般为串口调试工具。现有的串口监视方法普遍采用的是把电脑的一个串口连接到一个被监视的串口,然后在电脑上运行一个串口通信监视软件,这样的方法必然需要中断串口通信才能实现,同时操作非常复杂。因此,常用的串口数据监视方法离线监视或者通过串口驱动监视数据,前者明显不能监视正常的通讯数据,后者调试、使用都比较麻烦。驱动程序监视的开发调试比较麻烦,并且运行在内核驱动中,容易造成蓝屏等问题。串口调试工具只能手工操作运行收发数据,不能完全和实际情况相吻合,发送速度也受到手工操作的限制。
专利号为CN200710145241.5的方式,两个USB转串口模块,每个串口输出端分别连接到串口通信双方的发送端,每个地线连接到所述串口通信双方的共同地线,用于分别将从所述串口通信双方接收到的数据转换为USB协议数据; USB集线器模块,其USB输出端口分别连接到所述两个USB转串口模块的USB端,输入端口连接到处理器的USB接口,用于将来自所述两个USB转串口模块的USB协议数据传给所述处理器;以及所述处理器,用于对所述USB协议数据进行处理并进行显示。即使采用采用上述USB串口转换模块来实现监视串口通信数据,串口通信的仍然要被中断才能实现串口通信数据的监视,显然还不足以满足技术发展的需要。
发明内容
本发明的目的是针对现有技术中的串口监视方式存在开发困难或监视时,通信需要中断的技术问题,提供一种监视串口通信数据的方法。
本发明的目的通过下述技术方案来实现:
一种监视串口通信数据的方法,其具体包含以下步骤:步骤1.创建远程线程进入需要监视进程的内存地址空间,通过远程线程加载动态链接库;步骤2.获取动态链接库中相关函数的原始入口地址,并将相关函数原始入口地址修改为指定指令区的执行模块地址;步骤3.根据修改后的入口地址,在执行相关函数之前,执行模块先将串口通信的数据取出,提交给显示模块,显示模块将上述提取出的串口通信数据进行显示;步骤4.将相关函数的入口地址跳转回原始入口地址。
更进一步地,上述步骤1具体包括:在需要监视的进程中分配内存,用来存放要加载的动态链接库,并将动态链接库的绝对路径写入远程线程,加载动态链接库,实现动态链接库代码的注入。
更进一步地,上述步骤2中的获取动态链接库中相关函数的原始入口地址具体为:通过从导入地址表中获取动态链接库中相关函数的原始入口地址。
更进一步地,上述步骤2中的相关函数为API函数,其具体包括执行读写操作的函数:CreateFile、ReadFile、WriteFile。
更进一步地,上述步骤3中执行模块将串口通信的数据取出具体包括:
a、保存所有的寄存器,以便处理完成后返回正常的流程;
b.将所有的参数压入堆栈,参数包括:文件句柄、输入/出缓冲区地址、缓冲区长度;
c.调用logfunc函数,将缓冲区中的数据发送到显示界面。
本发明的有益效果:通过创建远程线程加载动态链接库,并修改动态链接库中相关函数的入口地址,先运行执行模块执行将串口数据提取并进行显示,使得串口通信的数据得到有效的监视,在这个过程完成后,将函数跳转回正常地址,继续执行原有函数的正常功能,不影响函数的正常功能。本方法在整个串口数据监视的过程中不会中断通讯程序,不影响通讯程序的正常使用,使得串口数据监视方便有效。
具体实施方式
下面结详细说明本发明的具体实施方式。
本发明公开了一种监视串口通信数据的方法,其具体包含以下步骤:步骤1.创建远程线程进入需要监视进程的内存地址空间,通过远程线程加载动态链接库;步骤2.获取动态链接库中相关函数的原始入口地址,并将相关函数原始入口地址修改为指定指令区的执行模块地址;步骤3.根据修改后的入口地址,执行模块将串口通信的数据取出,提交给显示模块,显示模块将上述提取出的串口通信数据进行显示;步骤4.将相关函数的入口地址跳转回原始入口地址。通过创建远程线程加载动态链接库,并修改动态链接库中相关函数的入口地址,先运行执行模块执行将串口数据提取并进行显示,使得串口通信的数据得到有效的监视,在这个过程完成后,将函数跳转回正常地址,继续执行原有函数的正常功能,不影响函数的正常功能。本方法在整个串口数据监视的过程中不会中断通讯程序,不影响通讯程序的正常使用,使得串口数据监视方便有效。
更进一步地,上述步骤1具体包括:在需要监视的进程中分配内存,用来存放要加载的动态链接库,并将动态链接库的绝对路径写入远程线程,加载动态链接库,实现动态链接库代码的注入。其可以使用执行LoadLibrary函数实现加载动态链接库。其中内存分配可以采用VirtualAllocEx函数实现,动态链接库的绝对路径写入远程线程则可以采用WriteProcessMemory函数实现,加载动态链接库可以采用CreateRemoteThread函数实现。上述这些API函数(Application Programming Interface,应用程序编程接口)是一些预先定义好的函数,目的是提供给应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。本发明中可以采用直接采用调用API函数的方法,提高了本方法的可操作性和适应性,也使得本发明的方法更加容易实现。
更进一地,上述步骤2中的获取动态链接库中相关函数的原始入口地址具体为通过从导入地址表中获取动态链接库中相关函数的原始入口地址。从导入地址表中获取动态连接口库中相关函数的原始入口地址方便快捷,便于实现,同时将相关函数的入口地址替换为执行模块的地址,在调用相关函数时先进入执行模块的地址进行执行,执行模块将串口数据提取并进行显示,实现串口通信数据的有效监视。
更进一步地,上述步骤2中的相关函数为API函数,其具体包括执行读写操作的函数:CreateFile、ReadFile、WriteFile。采用上述执行读写操作的函数进一步提高了本方法的可操作性和适应性,也使得本发明的方法更加容易实现。只需要监视上述执行读写操作的函数就可以得到串口通信的数据。将ReadFile的入口地址修改为执行模块的地址,在执行函数前,先运行执行模块,执行模块将窗口通信数据提取并进行显示,实现串口通信数据的有效监视,然后ReadFile函数的入口地址跳转回原始的ReadFile函数的入口地址,继续执行ReadFile函数,采用上述API函数同样也提高了本方法的可操作性和适应性,使得本发明的方法更加容易实现。
更进一步地,上述步骤3中执行模块将串口通信的数据取出具体包括:a、保存所有的寄存器,以便处理完成后返回正常的流程;b.将所有的参数压入堆栈,参数包括:文件句柄、输入/出缓冲区地址、缓冲区长度;c.调用logfunc函数,处理缓冲区中的数据,将数据发送到显示界面。采用上述方式将串口通信的数据取出来,提交给窗口进行显示,最后跳转到正常的函数地址进行执行正常的函数。例如可以采用以下的程序段实现执行模块的执行操作,先保存所有的寄存器,然后将返回地址和参数压入堆栈,再将字节序的参数压入堆栈,然后将函数名压入堆栈,调用LogFunc函数,处理需要的数据,即缓冲区中的数据,并将数据发送到显示界面,然后弹出所有的寄存器,相关函数跳转到正常的函数地址。
DWORD RealAddressOfInterceptedFunction;
pushad ; 保存所有的寄存器
lea EAX, [ESP+32]
push EAX ; 将返回地址和参数压入堆栈
push [pParamInfo] ; 将字节序的参数压入堆栈
push [pszFunctionName] ; 将函数名压入堆栈
call LogFunc ; 调用LogFunc函数,处理需要的数据
popad ; 弹出所有的寄存器
jmp [RealAddressOfInterceptedFunction] ; 跳转到正常的函数地址。
这里已经通过具体的实施例子对发明进行了详细描述,提供上述实施例的描述为了使本领域的技术人员制造或使用本发明,这些实施例的各种修改对于本领域的技术人员来说是容易理解的。本发明并不限于这些例子,或其中的某些方面。本发明的范围通过附加的权利要求进行详细说明。
上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (5)
1.一种监视串口通信数据的方法,其具体包含以下步骤:步骤1.创建远程线程进入需要监视进程的内存地址空间,通过远程线程加载动态链接库;步骤2.获取动态链接库中相关函数的原始入口地址,并将相关函数原始入口地址修改为指定指令区的执行模块地址;步骤3.根据修改后的入口地址,在执行相关函数之前,执行模块先将串口通信的数据取出,提交给显示模块,显示模块将上述提取出的串口通信数据进行显示;步骤4.将相关函数的入口地址跳转回原始入口地址。
2.如权利要求1所述的监视串口通信数据的方法,其特征在于所述步骤1具体包括:在需要监视的进程中分配内存,用来存放要加载的动态链接库,并将动态链接库的绝对路径写入远程线程,加载动态链接库,实现动态链接库代码的注入。
3.如权利要求1所述的监视串口通信数据的方法,其特征在于所述步骤2中的获取动态链接库中相关函数的原始入口地址具体为:通过从导入地址表中获取动态链接库中相关函数的原始入口地址。
4. 如权利要求1所述的监视串口通信数据的方法,其特征在于所述步骤2中的相关函数为API函数,其具体包括执行读写操作的函数:CreateFile、ReadFile、WriteFile。
5. 如权利要求1至4任意一个权利要求所述的监视串口通信数据的方法,其特征在于所述步骤3中执行模块将串口通信的数据取出具体包括:
a、保存所有的寄存器,以便处理完成后返回正常的流程;
b.将所有的参数压入堆栈,参数包括:文件句柄、输入/出缓冲区地址、缓冲区长度;
c.调用logfunc函数,将缓冲区中的数据发送到显示界面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103359591A CN102902559A (zh) | 2012-09-12 | 2012-09-12 | 一种监视串口通信数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103359591A CN102902559A (zh) | 2012-09-12 | 2012-09-12 | 一种监视串口通信数据的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102902559A true CN102902559A (zh) | 2013-01-30 |
Family
ID=47574805
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012103359591A Pending CN102902559A (zh) | 2012-09-12 | 2012-09-12 | 一种监视串口通信数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102902559A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107818034A (zh) * | 2016-09-14 | 2018-03-20 | 华为技术有限公司 | 监测计算机设备中的进程的运行空间的方法以及装置 |
CN113377621A (zh) * | 2021-07-01 | 2021-09-10 | 武汉斗鱼鱼乐网络科技有限公司 | 一种数据监听方法、装置、存储介质及电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101101567A (zh) * | 2007-08-17 | 2008-01-09 | 中兴通讯股份有限公司 | 双串口通信的监视系统和方法 |
-
2012
- 2012-09-12 CN CN2012103359591A patent/CN102902559A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101101567A (zh) * | 2007-08-17 | 2008-01-09 | 中兴通讯股份有限公司 | 双串口通信的监视系统和方法 |
Non-Patent Citations (1)
Title |
---|
谢菁: "基于远程注入的串口监视程序", 《西南民族大学学报(自然科学版)》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107818034A (zh) * | 2016-09-14 | 2018-03-20 | 华为技术有限公司 | 监测计算机设备中的进程的运行空间的方法以及装置 |
CN107818034B (zh) * | 2016-09-14 | 2021-02-12 | 华为技术有限公司 | 监测计算机设备中的进程的运行空间的方法以及装置 |
CN113377621A (zh) * | 2021-07-01 | 2021-09-10 | 武汉斗鱼鱼乐网络科技有限公司 | 一种数据监听方法、装置、存储介质及电子设备 |
CN113377621B (zh) * | 2021-07-01 | 2022-08-02 | 武汉斗鱼鱼乐网络科技有限公司 | 一种数据监听方法、装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11599628B2 (en) | Detecting return-oriented programming payloads by evaluating data for a gadget address space address and determining whether operations associated with instructions beginning at the address indicate a return-oriented programming payload | |
US9384106B2 (en) | Real time terminal for debugging embedded computing systems | |
CN105477854B (zh) | 应用于智能终端的手柄控制方法、装置及系统 | |
TWI553485B (zh) | 串列輸出之系統及其方法 | |
CN104050080B (zh) | 用户态调试linux内核的方法及系统 | |
CN105487987B (zh) | 一种处理并发顺序读io的方法及装置 | |
CN104092763B (zh) | 一种应用程序安装包推送方法及装置 | |
CN103699481A (zh) | 一种代码调试方法及调试系统 | |
CN103927256A (zh) | 一种控制多个安卓装置的方法 | |
CN104298602A (zh) | 一种调试应用程序的方法及装置 | |
CN106445182B (zh) | 适用于双机环境的键鼠屏幕安全切换与隔离方法 | |
CN109697035B (zh) | 级联设备的地址数据的写入方法、写入设备及存储介质 | |
CN103970601A (zh) | 执行操作指令方法和装置 | |
CN103473190A (zh) | 一种视频监控系统的控制软件远程升级系统 | |
CN103678125A (zh) | 一种代码调试方法及调试系统 | |
Ruimei et al. | Design of ARM-based embedded Ethernet interface | |
US7805734B2 (en) | Platform management of high-availability computer systems | |
CN102902559A (zh) | 一种监视串口通信数据的方法 | |
CN103581253A (zh) | 一种远程遥控的方法、Web服务器及系统 | |
CN102063366A (zh) | 调试进程的方法和系统 | |
CN106681714A (zh) | 程序环境设置方法、装置及电子设备 | |
CN103677718B (zh) | 一种拼接墙控制方法及终端 | |
CN108696537B (zh) | Ios系统中长连接网络数据分发及处理方法和系统 | |
US9885787B2 (en) | Electronic satellite feed switcher | |
CN109144844A (zh) | 追踪方法、装置、设备和机器可读介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130130 |