首页
社区
课程
招聘
[原创]调试分析之:怎么从通达信搞出行情数据?
发表于: 2010-12-11 22:30 20271

[原创]调试分析之:怎么从通达信搞出行情数据?

2010-12-11 22:30
20271

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

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

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

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

先把RmtDebug安装包附上


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
目标软件:请到通达信公司网站直接下载.

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

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

上传的附件:
2010-12-11 22:35
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
安装好本软件后,启动本软件,点插入调试.推出进程对话框.选择通信达进程

上传的附件:
2010-12-11 22:39
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
进入调试画面后,通过语言切换按钮切到进程分析脚本(看附图)

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

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

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

他通过

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

创建了两个下级脚本

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

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

上传的附件:
2010-12-11 22:49
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
一般来讲,我们只需要知道进程的模块信息就可以进行分析

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

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

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

上传的附件:
2010-12-11 22:59
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
在excode0000.jmp中

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

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

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

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

上传的附件:
2010-12-11 23:10
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
上图我们几次搜索后定位到008668d5位置.

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

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

上传的附件:
2010-12-11 23:20
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
大家可以看到,该处正好是行情数据位置,图上选中的四个字节,在下面的数据解析窗口显示是浮点数27.7000

这正好是600100的开盘价.最新价27.79在008668f0位置
2010-12-11 23:24
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你仔细观察这段数据,正好是所有自选品种的行情数据,以行情代码为前导.

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

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

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

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

画面出现提示

设置内存断点:008668F0

内存断点:        008668F0       
内存访问违例 EIP:00504c09
00000002        80000001----00000000----0086655C
2010-12-11 23:30
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
点击违例地址,00504C09,然后点击DASM按钮前面的D按钮进行反汇编

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

上传的附件:
2010-12-11 23:34
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
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]

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

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

每当通达信执行到该段代码,就运行一下插入代码,你就可以直接将行情数据取出
2010-12-11 23:37
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
大家明白了吗?有些东东,其实很简单
2010-12-11 23:40
0
雪    币: 291
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
大家晚安.见笑
2010-12-11 23:42
0
雪    币: 104
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
沙发,谢谢分享,看看高手作品!
2010-12-11 23:59
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
佩服佩服,感谢楼主分享!
2011-7-4 12:33
0
雪    币: 236
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
佩服佩服,感谢楼主分享! 有没有例子啊.
2011-8-29 10:24
0
雪    币: 5187
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
能不能拿到所有股票的数据呢,貌似tdx是点播的,看什么股票就申请传什么数据,只拿到列表数据用处不是很大,不过这个思路还是值得学习
2018-2-4 14:41
0
雪    币: 97
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
楼主我对你的调试工具很感兴趣呀...
2018-2-6 11:15
0
游客
登录 | 注册 方可回帖
返回
//