首页
社区
课程
招聘
[求助]VC2010写的DLL,多了几个不存在的导出函数是怎么回事?
发表于: 2013-7-19 00:57 9749

[求助]VC2010写的DLL,多了几个不存在的导出函数是怎么回事?

bxc 活跃值
6
2013-7-19 00:57
9749
DLL的导出表多了几个不存在的函数,地址是73******什么的,OD载入发现该地址并不存在。
我DLL是用def导出函数的,在def里也没有找到未知函数的序号,这是什么情况?

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
头次听说
2013-7-19 01:03
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3
Debug和Release版都有,导出名称为空,地址都一样
2013-7-19 01:08
0
雪    币: 112
活跃值: (57)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
4
您写个Demo, 将工程发上来,大家一起给你实验.
口说无凭啊

///
现下了一个vs2010, 验证了您说的问题, 没有您说的问题
有可能是您除了def文件里面定义的函数, 在别的函数的定义中, 还出现过导出的定义.
您看看我生成dll的工程和您的有啥不同?
我这可是有图有码有真相啊~


DLL工程: srcDllForTest.rar
DLL Bin文件: DllForTestBin.rar

看到楼下2位同学都说没问题,我大概猜到您那咋出的问题了。
您的工程里,包含了第三方的实现, 在那个实现中, 有的函数是导出声明的.
否则已经不能解释这个问题~~
上传的附件:
2013-7-19 03:21
0
雪    币: 1042
活跃值: (500)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也没发现这个问题,是不是楼主工程文件太混乱了? 或者中什么PE感染鸟~
2013-7-19 09:11
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
没发现有这问题
2013-7-19 09:25
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
可能其他地方有导出__declspec(dllexport) 存在于.h文件或者你导入的lib文件.
2013-7-19 10:36
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
8
图片:


如果是第三方的导出函数的话,导出的地址不应该不存在啊,而且序号是固定的,我修改def中的序号跟未知函数的序号一样了,编译出来居然有2个导出序号一样的函数。

我的工程中只包含了3个头文件
#include <SDKDDKVer.h>
#include <stdlib.h>
#include <windows.h>
上传的附件:
2013-7-19 19:01
0
雪    币: 112
活跃值: (57)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
9
您好:
  问题已经查到, 您将.def文件写错了...

您原来的写法:
LIBRARY	MakeObject_IA32

EXPORTS

	CreateObjectHandle		@1
	CreateSection			@2
	UpdateSection			@3
	CopySymbol				@4
	AddSymbol				@5
	AddStringTable			@6
	LockObjectHandle		@7
	UnLockObjectHandle		@8
	ReleaseObjectHandle		@9
	CopyByteToSection		@51
	Asm_Push_Val			@52


正确的写法有2种:
* 将@1, @2... @51, @52 都去掉
* 将@51, @52 改成 @10, @11

我采用的是方法1
LIBRARY	MakeObject_IA32

EXPORTS

	CreateObjectHandle
	CreateSection
	UpdateSection
	CopySymbol
	AddSymbol
	AddStringTable
	LockObjectHandle
	UnLockObjectHandle
	ReleaseObjectHandle
	CopyByteToSection
	Asm_Push_Val


效果图:


我开始将您的工程编译了一下,看了导出函数列表, 觉得奇怪.
又去看您的def文件, 才发现, 空的那些导出函数正好是您定义的那些标号之间的.
就试了一下去掉导出函数序号, 搞定, 嘿嘿
上传的附件:
2013-7-19 21:24
0
雪    币: 112
活跃值: (57)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
10
DLL 使用序号导出的目的, 是不让人看到导出函数的名称。
有资料,可以查下.

如果不是为了隐藏导出函数名称, 可以不用指定导出函数序号.
2013-7-19 21:29
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
11
还真是,本来想预留点序号给别的函数的,但为什么会多这几个莫名其妙的函数呢?
还是谢谢你了~
2013-7-19 22:12
0
游客
登录 | 注册 方可回帖
返回
//