首页
社区
课程
招聘
[旧帖] 如何取出寄存器为的数据?(求助) 0.00雪花
发表于: 2012-3-29 16:39 7220

[旧帖] 如何取出寄存器为的数据?(求助) 0.00雪花

2012-3-29 16:39
7220
如何得到一个正在运行中的寄存器数据,特别是:esp寄存器中的数据。因为我想知道某个程序运行到哪里了? (不好意思,我要取的是eip 寄存器中的数据,不是esp)

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

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 1121
活跃值: (732)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
2
要是好几个线程同时运行的呢?你得说说你要干什么吧。
2012-3-29 16:45
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我在做游戏自动脚本,我想做一个记录程序工作的每个地址,形成一个程序
2012-3-29 17:13
0
雪    币: 139
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
LZ说的是不是在OD里啊
2012-3-29 17:14
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不是用别的人软件,我想自己编个软件取出来。因为我现在不知程序运行到哪里了,我想实时取出。
2012-3-29 17:19
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
也就是进行调试
2012-3-29 17:19
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
脚本语言需要解释器的,你想了解你的代码是怎么运行的,直接调试解释器好了。
2012-3-29 17:52
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
对的,就是解释器如何写啊
2012-3-29 19:14
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不好意思,我要取的是eip 寄存器中的数据,不是esp
2012-3-29 19:22
0
雪    币: 138
活跃值: (475)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10

call li
li: pop ebx
add ebx, 0x6
push ebx
retn

mov ebx, ebx ; ebx = 当前代码 eip


灵活变通下就行了
2012-3-29 19:39
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
你知道Eip指向的指令占多少字节?386指令不等长,感觉还是自己调试解释器看看解释器是如何解释你的脚本的实在。另外你可以找找和你解释器的开发文档或者源码等相关资料。
一般一种脚本对应一种解释器,脚本语言不需要知道功能是怎么实现的,只知道如何去实现就可以了。
2012-3-30 11:14
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢楼上的朋友,我虽然不知:  call li
li:    pop ebx
    add ebx, 0x6
    push ebx
    retn

    mov ebx, ebx   ; ebx = 当前代码 eip
这几句的意思,如果真的能搞定EIP,我就有办法搞定调试了,谢谢朋友
2012-3-30 13:38
0
雪    币: 238
活跃值: (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
不如学学e语言做个外挂得了,冒昧地讲,楼主的思路对于楼主的编程水平来说,是过于高深的,是行不通的
2012-3-30 14:09
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这类问题去stackoverflow上一般都有答案 http://stackoverflow.com/questions/599968/reading-program-counter-directly

----------- quote -------------
0x0001       call _here
0x0002       _here: pop eax  ; eax now holds the PC.
-------------end ---------------

解释:eip永远指向下一条要执行的指令地址,执行到call _here时候,eip的值就是_here:pop eax的地址 0x0002, 此时调用 call _here会将当前eip值压栈,然后跳转到_here执行pop eax,这时候eax的就是刚才压入栈中的eip,也就是当前正在执行的指令地址
2012-4-12 19:21
0
雪    币: 297
活跃值: (265)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
15
获取当前活动的线程然后getthredcontext
2012-4-12 19:41
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
用OD打开那个软件后,然后用OD插件记录EIP不就行了。。。
2012-4-22 03:26
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
17
兄弟的方法不错哦!
2012-4-22 03:47
0
游客
登录 | 注册 方可回帖
返回
//