首页
社区
课程
招聘
[旧帖] [求助]EXE与DLL间的关系 0.00雪花
发表于: 2012-2-17 21:19 1939

[旧帖] [求助]EXE与DLL间的关系 0.00雪花

2012-2-17 21:19
1939
如何弄懂EXE与DLL之间的关系呢,我想重新写一个DLL来替换掉原来的DLL,应该怎么办呢

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

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 292
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
dll不能独立运行,需要exe加载。

如果想要替换原来的dll,你需要知道原来的dll导出了那些函数,并在新dll中实现。
2012-2-17 21:34
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
导出的函数可以用工具看到啊,直接在新的DLL中写一个同名的就OK了吗
2012-2-17 21:40
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
4
如果是按函数名(还有序号的哦)导入,那这样确实可以运行
但是崩不崩就是两回事了 因为还有参数数量 调用约定 返回值那些东西都要实现
2012-2-17 21:48
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
能不能有什么办法找到EXE是怎样调用DLL中的函数,获取DLL中的函数的参数信息,返回信息啊。
2012-2-17 22:09
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
可以的。观察dll导出表的每一个地址,那里就是函数的开头。
顺着函数的开头往下找,看看函数是怎么返回的,到时候自己的函数用一样的方式返回就可以了。

简单来说就是区分ret返回和ret n返回。
2012-2-17 22:12
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
是用OD看?
2012-2-17 22:15
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
用你喜欢的任何可以反汇编的工具。。。objdump、ndisasm之类的静态工具也不错。。
2012-2-17 22:20
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我接触过的就只有IDA反汇编,还只是入门,有木有这方面的教程啊~
2012-2-17 22:45
0
雪    币: 62
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
看着都蛋疼啊,一个复杂点的DLL各种调用

F5到手发软

楼主还是修改DLL中某函数来得快。。。。
2012-2-17 22:47
0
雪    币: 106
活跃值: (569)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
动态用od应该也可以看。
2012-2-17 22:48
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
对啊,但上面不是说了修改DLL中的函数要知道参数信息与返回信息吗,还得用反汇编分析啊。
2012-2-17 22:55
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
只需要知道怎么返回,这是为了处理__stdcall和__cdecl调用约定。

不需要知道参数的情况,除非你的函数想要分析传来的参数。我看你的样子好像不准备分析参数吧。
2012-2-17 23:41
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
可能它有参数传入,可能还访问了其他的硬件,我随便这样写一个,应该会崩吧~其实我都还不是太明白那个DLL中的函数内容,能不能先搞清楚它的函数内容?
2012-2-17 23:55
0
雪    币: 428
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
涉及到的知识还真不少啊~
2012-2-18 10:33
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
DLL是不跟application绑定的可独立运行的程序,要想用新的DLL替换以前的DLL,就得先了解老的DLL中包含什么样的函数,这些函数的参数要求及返回信息等,必须了解这些信息,还有,得找到应用程序和DLL的接口,再构造新的DLL
2012-2-18 11:05
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
简单的解决方案:自己知道是什么作用的函数就自己做完该做的事情然后返回
不知道什么作用的函数直接调用原函数,返回原函数返回的值。
2012-2-19 18:20
0
游客
登录 | 注册 方可回帖
返回
//