首页
社区
课程
招聘
[旧帖] [讨论]如何动态内存补丁 0.00雪花
发表于: 2008-12-12 09:46 5043

[旧帖] [讨论]如何动态内存补丁 0.00雪花

2008-12-12 09:46
5043
请教高手们:
了解到我调试的软件使用Visual Stadio 2005 C#编写的,软件中有用Sharpziplib 带Checksum CRC32,编译连接后产生exe和很多动态连结库,运行时需要注册文件,调试exe文件
问题是:
1.用Ollyice1.1调试中有时会反应很慢,没法调试下去,如何解决.(使用softice没有这个问题)
2.软件一边运行一边解压,每次重新调试时,代码在内存中的地址又不同,
......................................
055492f9  0f94c0 sete,al
055492fc   0fb6c0 movzx eax,al
055492ff    ...............................
05549305  ................................
这段代码在原程式中没有,是解压产生的,我希望更改0f94c0 sete,al代码,但下次调试时,它的地址又变成了05432163,每次重新运行,地址都不一样,如何进行内存补丁呢?

知道这段代码出自一个dll文件的解压,需要动态内存补丁.

软件是在编译时用Sharpziplib分段压缩CRC32检校.

非常感谢师傅们的指导

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第一个问题解决好了
2008-12-18 18:30
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
只要找对下断的时机就行了。
比如说,可能软件的思路是这样的:
申请一块内存1
解压一段代码到内存1
申请一块内存2
解压一段代码到内存2
.....

假如你要修改内存2里面的代码,就断2次
申请一块内存1
解压一段代码到内存1
申请一块内存2
记录内存2的地址 <------ 第一次断下
解压一段代码到内存2
计算你要改的代码的地址=记录的内存2的地址+偏移,修改代码  <------ 第二次断下
......

如果程序本身在固定地址存储了内存2的地址,就不需要第一次断下了。直接找到它并计算修改就行了。
2008-12-19 01:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢icersg
我将软件调试时的过程截图后,附载给大伙看看,希望能有些解答思路
2008-12-19 22:30
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这是个.NET托管程序,需要用profiler API动态补丁,但我还不会用这个补丁工具编写代码.
http://bbs.pediy.com/showthread.php?t=30940中的三个文件:ProfilerCallback.h,ProfilerCallback.cpp,Profiler.cpp也没有找到,正在找,希望学习学习
2009-1-14 14:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
2009-1-14 17:40
0
游客
登录 | 注册 方可回帖
返回
//