首页
社区
课程
招聘
[求助]动态加载exe时遇到问题,希望有兄弟能帮忙解答一下,多谢!!!
发表于: 2014-7-30 22:00 4549

[求助]动态加载exe时遇到问题,希望有兄弟能帮忙解答一下,多谢!!!

2014-7-30 22:00
4549
之前看到论坛中的帖子提到把exe作为dll进行加载(http://bbs.pediy.com/showthread.php?t=68730),这两天实践了一下,主要工作如下:
1、先收集exe中需要重定位处理的位置信息,按照重定位信息格式为exe添加了一个reloc段;
2、加载exe进内存,进行了对齐处理、导入表修复、重定位处理,然后调用exe中的函数。
在调用过程中通过调试可以发现,需要重定位的地方经过处理已经都能正常运行,但是在一个地方遇到了问题,百思不得其解,当中有用到msvcrt._beginthreadex创建一个线程,跟进去内部是通过调用kernel32.CreateThread,thread function指向msvcrt.77C0A341
77C0A42D    50              push    eax
77C0A42E    FF75 18         push    dword ptr [ebp+18]
77C0A431    56              push    esi
77C0A432    68 41A3C077     push    77C0A341
77C0A437    FF75 0C         push    dword ptr [ebp+C]
77C0A43A    FF75 08         push    dword ptr [ebp+8]
77C0A43D    FF15 3412BE77   call    dword ptr [<&KERNEL32.CreateThread>]          ; kernel32.CreateThread
直接运行exe时,在msvcrt.77C0A341处下断,kernel32.CreateThread之后F5就能断下,而自行加载exe调用时,kernel32.CreateThread之后F5就断不下来,利用PCHunter等工具察看,线程也已经创建了,但感觉线程没有工作,像是被挂起了,一直没想明白这个问题,希望有兄弟能点拨一下,多谢

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

收藏
免费
支持
分享
最新回复 (7)
雪    币: 268
活跃值: (468)
能力值: ( LV9,RANK:375 )
在线值:
发帖
回帖
粉丝
2
有兄弟能帮忙解答下不???
2014-7-30 22:06
0
雪    币: 268
活跃值: (468)
能力值: ( LV9,RANK:375 )
在线值:
发帖
回帖
粉丝
3
还是说我的表述不够清晰,问题没讲清楚??
2014-7-30 22:07
0
雪    币: 13171
活跃值: (5873)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
:lol
大牛们都不在吧,偶也想了解这个问题
2014-7-30 22:37
0
雪    币: 268
活跃值: (468)
能力值: ( LV9,RANK:375 )
在线值:
发帖
回帖
粉丝
5
坐等大牛吧....
2014-7-30 22:49
0
雪    币: 4827
活跃值: (1843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
TlsAlloc()
TlsSetValue(__tlsindex, ptd);  //这里不对
_beginthreadex创建一个线程的_tlsindex没有初始化
2014-7-31 01:26
0
雪    币: 268
活跃值: (468)
能力值: ( LV9,RANK:375 )
在线值:
发帖
回帖
粉丝
7
那应该如何解决?在调用前人为进行初始化行不?
2014-7-31 06:26
0
雪    币: 268
活跃值: (468)
能力值: ( LV9,RANK:375 )
在线值:
发帖
回帖
粉丝
8
看来还是把加载运行的过程考虑的有些简单了,还有很多初始化的工作没有完成,又参考了一下Reload And Run大法(http://bbs.pediy.com/showthread.php?t=136304),采取创建线程的方式,把exe的入口函数赋值给线程函数地址,这样后续运行都正常了,谢谢大家
2014-7-31 10:18
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册