首页> 中国专利> 一种不影响前台运行的打印方法

一种不影响前台运行的打印方法

摘要

本发明涉及一种不影响前台运行的打印方法,配合使用前台和后台,其特征在于,包括以下步骤:1.1)前台通过前后台的网络接口发送打印字串的对应标识和打印变参;1.2)后台接收并依所述标识获取对应的打印字串,再结合所述变参一起进行解析。这种方法,通过对打印信息进行替换,把替换后的信息和变参同时发送到后台,由后台进行解析还原出最终需要的信息,从而避免在系统前台进行字串解析,极大节省前台处理器的处理能力和前后台的打印信息传送带宽,提高性能并保证了软件系统运行的安全性。

著录项

  • 公开/公告号CN101178638A

    专利类型发明专利

  • 公开/公告日2008-05-14

    原文格式PDF

  • 申请/专利权人 中兴通讯股份有限公司;

    申请/专利号CN200610138264.9

  • 申请日2006-11-08

  • 分类号G06F3/12;

  • 代理机构北京安信方达知识产权代理有限公司;

  • 代理人许志勇

  • 地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法律部

  • 入库时间 2023-12-17 20:11:07

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-12-28

    未缴年费专利权终止 IPC(主分类):G06F3/12 授权公告日:20111026 终止日期:20151108 申请日:20061108

    专利权的终止

  • 2011-10-26

    授权

    授权

  • 2008-07-09

    实质审查的生效

    实质审查的生效

  • 2008-05-14

    公开

    公开

说明书

技术领域

本发明涉及一种在程序中进行打印的方法,具体涉及在需要在前后台传送大量打印信息的软件系统中进行打印的方法。

背景技术

目前,很多软件系统通过大量的打印来观察软件运行情况。一般的打印方法就是在前台调用打印接口对打印字串和变参进行解析,最后得到一个含有最终信息的字串,再把含有最终信息的字串发送到后台进行保存或显示。

大量的打印信息虽然能直观的反映了软件系统的运行情况,但却对软件系统运行产生了极大影响,包括:(一)在打印过程中,需要前台解析打印字串,影响了软件系统的性能;(二)在打印大量输出时,需要占用前后台大量的网络带宽,从而对软件系统业务造成极大影响。同时由于打印需要对字串进行处理,由于编程错误,导致传入的字串参数有误或者变参和实际要求不一致,都可能导致软件系统前台死机,给系统带来极大的安全隐患。

为了减少大量打印对系统的冲击,一种方法是对打印进行控制。要求在系统运行时能进行有选择的打印,从而减少打印量。但这种方式在无人值守系统中很难使用,因为没人会去调整打印输出;其次在真需要大量打印时,该方法无法控制打印量,还是可能产生问题。一种是对打印方法进行限制,由一个低优先级任务来进行打印任务,在空闲时进行打印,这样不影响系统性能,配合上网络状况检测来控制打印避免影响网络。但该方法在系统繁忙时容易导致低优先级任务无法得到处理,从而大量丢掉打印。

发明内容

本发明需要解决的技术问题是提供一种不影响前台运行的打印方法,无须在前后台传送大量的打印信息,同时也不必在前台对打印字串进行解析。

本发明的上述技术问题这样解决,提供一种不影响前台运行的打印方法,配合使用前台和后台,包括以下步骤:

1.1)前台通过前后台的网络接口发送打印字串的对应标识和打印变参;

1.2)后台接收并依所述标识获取对应的打印字串,再结合所述变参一起进行解析。

按照本发明提供的打印方法,所述打印字串的对应标识是打印字串在内存中的地址。

按照本发明提供的打印方法,所述打印字串所在运行文件是bin格式,所述步骤1.2)中获取包括利用所述内存中的地址减去所述运行文件加载基地址,获得所述打印字串在bin运行文件中的偏移,再从磁盘文件的相应偏移位置读出字串,还原出了前台打印接口所需的所述打印字串。

按照本发明提供的打印方法,所述打印字串标识的对应标识是前台调用打印函数的指令地址。

按照本发明提供的打印方法,所述步骤1.2)中获取包括根据所述指令地址,从带调试信息的运行文件中获得所述打印字串在源码中的位置,并根据该位置从源码中获得所述打印字串。

按照本发明提供的打印方法,该方法还包括前台根据其调用打印函数后返回的地址获得所述变参。

按照本发明提供的打印方法,所述获得包括从该地址获得返回指令的内容,再根据指令格式分析所述内容获得打印的参数长度值len,从该地址开始,往堆栈生长的反方向拷贝对应所述长度值len的长度,获得所述变参。

按照本发明提供的打印方法,所述步骤1.2)中解析由在后台运行的字符串解析程序进行。

本发明提供的打印方法,通过对打印信息进行替换,把替换后的信息和变参同时发送到后台,由后台进行解析还原出最终需要的信息,从而避免在系统前台运行时进行字串解析,极大节省前台处理器的处理能力和前后台的打印信息传送带宽,提高性能并保证了软件系统运行的安全性。

附图说明

下面结合附图和具体实施例进一步对本发明进行详细说明。

图1是运行文件在内存中的存放示意图。

图2是前台调用打印函数后的堆栈布局示意图。

图3是本发明前台变参获取的程序流程示意图。

图4是本发明后台打印字串还原的程序流程示意图。

具体实施方式

首先,说明本发明思想:本发明方法包括以下组成部分:

1.前台通过前后台的网络接口发送打印信息。

2.后台设置接受程序,接受前台发送来的信息。

3.有一个字串解析程序。但该解析程序设在后台,不设在前台。

同时还包括如下组成部分:

4.在前台,对打印字串以一个可还原打印字串的标识进行替换。

5.在前台,通过堆栈直接获得变参。在前台不再和打印字串结合解析变参内容。

6.把步骤4和步骤5获得的标识和变参,通过步骤1所述的接口把变参内容发送到后台。

7.步骤2中设置的后台程序收到步骤6发来的内容后,通过规则,把其中的标识还原为打印字串。

8.在步骤6还原储打印字串后,后台使用步骤3设置的解析程序,把还原后的打印字串和步骤6发送的变参一起进行解析,得到最后的打印信息。

本发明所述的步骤4的替换可以有如下几种方式

4.1以打印字串在内存中的地址替换打印字串本身的信息

4.2以调用打印函数的指令地址替换打印字串本身的信息

第二,以下面描述的实现方式具体说明本发明方法,该实现方式包括:

1.前台把打印字串地址和从堆栈中获得的变参通过网络接口发给后台。

2.后台收到前台发来的打印信息后,首先取出打印字串的地址,同时读取bin文件,获得真实的打印字串内容。

3.根据获得的打印字串和变参,后台进行打印解析,得到真实的打印内容。

上面的步骤中包括二大关键部分,具体是:

(一)打印字串的替换与还原:

本发明通过对打印字串进行替换,以替换后的标识做为打印信息发给后台。为了后台能够解析打印,要求替换后的信息能够还原成原来的打印字串。一种可行的方法是把打印字串在内存中的地址做为替换标识。

打印输出接口一般如下:printf(const char*fmt,...)。其中的参数fmt表示打印字串在内存中的地址,后面的...表示打印所需的变参。

如果打印字串是在代码中硬编码的,则在运行文件中将会储存该字串。如图1,以运行加载到前台运行文件的格式是bin格式文件为例,该bin文件是整个按顺序加载到内存中的。从bin文件的加载方式可以看出,相对与内存零地址10的fmt值减去一个简单的偏移量11,即加载基地址11,就可以获得fmt所代表的字串在bin文件中的位置。两者是一个简单的线性关系。

后台在获得打印字串的内存地址后,把该地址减去加载基地址,就可以获得打印字串在bin运行文件中的偏移。从文件的相应偏移位置读出字串,就还原出了前台打印接口所需的打印字串。

如果运行文件不是bin格式,而是其它格式,同样也都可以根据文件格式和加载基地址获得打印字串在相应格式文件中的偏移。

(二)变参的获取:

为了在后台解析获得完整的打印信息,还需要前台发送打印字串所需要的变参。为了高效简单的获得变参,我们考察调用打印函数后的反汇编。

0x010e3b0a  68 80 39 0e 01    PUSH    0x10e3980

0x010e3b0f  6a 03              PUSH    3

0x010e3b11  68 0b 02 00 00     PUSH    0x20b

0x010e3b16  6a 12              PUSH    18

0x010e3b18  68 84 01 00 00     PUSH    0x184

0x010e3b1d  68 c0 31 0e 01     PUSH    0x10e31c0

0x010e3b22  e8 09 58 6d ff     CALL    print

0x010e3b27  83 c4 20           ADD     ESP,32

当调用打印函数返回后,需要对原来压参进行调整。ADD ESP,32这句话的意思就是对堆栈进行调整。对堆栈调整的大小32就是压参的长度。因此如果能获得返回后的指令内容,就可以获得打印压参的长度,并通过堆栈来获得变参的内容。

当调用打印函数后,返回地址,fmt,变参等在内存中的布局如图2。

从图中可以看到,根据当前ebp可获得返回指令的地址,从该地址可以获得返回指令的内容,该内容包括add esp len,根据指令格式分析指令内容,获得打印的参数长度值len。从ebp中偏移相应位置开始,往上拷贝len长度2,就可以获得打印的参数。

上述过程对应的前台变参获取的具体程序流程,如图3所示,包括:

310)从打印函数中获得当前EBP的值;

320)根据EBP获得返回指令的地址;

330)分析返回指令地址里的指令信息,获得变参长度;

340)从堆栈中参数存放位置和变参长度拷贝变参。

把字串在内存中的地址和打印变数都发送往后台。后台接受该信息,根据替换规则,从发送来的地址值获得打印字串,并配合发送来的变参进行解析,获得最终打印结果。在这过程中,前台不需要解析字串,只需要通过发送一个标识,并通过简单的分析获得变参发送给后台。极大的提高了效率,减少了信息发送了量,并且由于不用解析字串,系统运行的安全性得到可靠保障。

上述过程对应的后台打印字串还原的具体程序流程,如图4所示,包括:

410)获得打印标识;

420)根据打印标识计算打印字串在版本文件中的位置;

430)根据计算结果从版本文件中获得对应的打印字串。

最后,补充说明:该实现方式对打印字串的替换打印字串在内存中的位置,还可以选用调用打印函数的指令地址。通过指令地址,可从带调试信息的运行文件中获得打印字串在源码中的位置,并根据该位置从源码中获得打印字串。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号