在下上半年抽时间搞了个在进程调试器RmtDebug.exe.

一直没时间介绍怎么使用这个软件.今天就抽空示例一下.

内容有点浅薄.请大虾们不要见笑.

本例题目是怎么从通达信搞出行情数据?

先把RmtDebug安装包附上

上传的附件 rmtdebug_setup.rar

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 22:35:24

目标软件:请到通达信公司网站直接下载.

安装好软件后,请设好自选品种.

设置自选品种的目的在于在内存中定位行情数据

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 22:39:38

安装好本软件后,启动本软件,点插入调试.推出进程对话框.选择通信达进程

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 22:49:45

进入调试画面后,通过语言切换按钮切到进程分析脚本(看附图)

窗口右侧打印按钮下面的上下按钮用于脚本级别切换

左右按钮用于同级别脚本切换.

调试画面上,你看到的第一个脚本是顶级脚本

他通过

var m_path=m_exe_path;
Createsubobj=m_path+"autop\excode0000.jmp";
Createsubobj=m_path+"autop\excode0001.jmp";

创建了两个下级脚本

其中excode0001.jmp用于分析进程模块信息和窗口信息

excode0000.jmp脚本,我们用来做一些特定的分析

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 22:59:55

一般来讲,我们只需要知道进程的模块信息就可以进行分析

我们点模块按钮,切换到模块信息显示画面(假如excode0001.jmp没执行模块信息分析,你也可以点击模块按钮的g按钮来重新获得)

通达信的主模块大概范围在00400000--00f00000

这样我们在excode0000.jmp中作股票数据查询

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 23:10:27

在excode0000.jmp中

var m_smem_dir=Win_SearchProcessMemStringData(0x008668d5,0xF00000,"600100");//搜索进程数据字串*忽略

我们查询自选品种的"600100"

注意了,在修改了脚本后,一定要点S上传按钮,把修改后的脚本上传,因为脚本画面在当前画面,因而脚本处于单步状态(在起始位置),所以你必须点S单步或S执行按钮来执行你的分析脚本

需要注意的是,在通达信内部有好几处有"600100",所以你要不断的修改搜索起始位置,通过观察对象内存数据来确定是不是你要定位的位置.

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 23:20:30

上图我们几次搜索后定位到008668d5位置.

点击"数据"按钮,切换到内存数据画面,输入008668d5,然后鼠标双击008668d5,

这是008668d5地址会进入地址显示框中,点击"数据"按钮前面的D按钮,就可以看到该处的内存数据."数据"按钮前面的D按钮,每点一次,显示向下翻页一次,"数据"按钮前面的U按钮的功能是向上翻页

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 23:24:27

大家可以看到,该处正好是行情数据位置,图上选中的四个字节,在下面的数据解析窗口显示是浮点数27.7000

这正好是600100的开盘价.最新价27.79在008668f0位置

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 23:30:36

你仔细观察这段数据,正好是所有自选品种的行情数据,以行情代码为前导.

到了这步基本上,我们可以通过外挂方式来实现行情数据的获得.

但是,这里有个细节就是,行情数据位置是不是固定的,假如不是固定的,我们就要定位数据地址

现在我们通过内存断点来做这项工作.

我们在内存数据画面输入最新价27.79的位置008668f0,鼠标双击地址,然后点击上部的内存断点按钮

画面出现提示

设置内存断点:008668F0


内存断点:  008668F0  
内存访问违例 EIP:00504c09
00000002  80000001----00000000----0086655C

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 23:34:43

点击违例地址,00504C09,然后点击DASM按钮前面的D按钮进行反汇编

(连续点击DASM按钮前面的D按钮,会自动向下反汇编,连续点击DASM按钮前面的D按钮是向上反汇编)

  • 标 题:答复
  • 作 者:yzwyq
  • 时 间:2010-12-11 23:37:27

00504C09: A1 5C 65 86 00                    mov eax,[0x86655c]
00504C0E: 8B AC 24 98 30 00 00              mov ebp,[esp+0x3098]
00504C15: 83 F8 02                          cmp eax,0x2
00504C18: 0F 8D 0A 04 00 00                 jnl 0x505028
00504C1E: 3B 35 34 6D 84 00                 cmp esi,[0x846d34]


看到这段代码,我们的分析就没必要再进行下去.

因为地址已经出现,我们只要在专门的外挂程序中,在该段代码位置做代码插入.

每当通达信执行到该段代码,就运行一下插入代码,你就可以直接将行情数据取出