首页
社区
课程
招聘
DLL加载到进程中,如何计算函数地址
发表于: 2012-4-23 11:06 5898

DLL加载到进程中,如何计算函数地址

2012-4-23 11:06
5898
test.dll中有一个导出函数add(), depends查看地址为:0000100A

写一个小程序调用add,OD跟踪,先是跳到1000100A 然后才跳到其它入口点10001060

请问,10001060如何计算出来?

test.dll注入到入程中后,通过修汇编指令,可以直接call 10001060 么?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 31
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
操作系统会为dll进行重定位。也就是在加载时把dll导出表中的函数地址放到Pe的导入表。
2012-4-23 11:15
0
雪    币: 297
活跃值: (235)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
3
楼主应该不是这个情况,难道在目标进程导入表的位置depends能知道?dll是release版本的吗?确保没有开启增量链接
2012-4-23 12:39
0
雪    币: 297
活跃值: (235)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
4
可以直接call 10001060
2012-4-23 12:41
0
雪    币: 278
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
GetProcAddress 这个API可以获取函数地址,也可以自己计算
2012-4-23 14:42
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
请问自己怎么计算呀?
2012-4-23 15:40
0
雪    币: 3020
活跃值: (3065)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
这个就不一定了,比如 当程序首先载入的DLL 占用了10000000 基址时候 你 这时候在看到  你那个test.dll 载入的 地址又不一样了,所以  你要定位该函数的地址 可以 用 获取模块地址 + 函数地址偏移  来定位
2012-4-23 15:49
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
8
在你的程序用GetModuleHandle获取被装入到内存的相应dll句柄,返回的句柄就是dll模块的基址,
再根据add()方法的rav或文件偏移计算实际虚拟地址
2012-4-25 12:07
0
游客
登录 | 注册 方可回帖
返回
//