您的位置:首页 > 其它

更改dll名称

2016-05-15 19:14 225 查看
本文转自往事随风的博客

为了更改目标dll的名称,按如下三步操作。

1 生成.def文件

使用VC++的工具DUMPBIN

EXAMPLE:

DUMPBIN   VideoDeCoder.dll   /EXPROTS   /OUT:VideoDeCoder.def


2 修改.def文件

将导出的.DEF文件整理为一符合.DEF个数的函数导出文件

EXAMPLE:VideoDeCoder.DEF 文件内容如下

Dump   of   file   VideoDeCoder.dll
File   Type:   DLL
Section   contains   the   following   exports   for   VideoDeCoder.dll 0 characteristics
3D49E48F   time   date   stamp   Fri   Aug   02   09:46:55   2002
0.00   version
1   ordinal   base
11   number   of   functions
11   number   of   names
ordinal   hint   RVA             name
1         0   00010F60   _TM_ClearDecoderBuff@4
2         1   00010E80   _TM_CloseDecoder@4
3         2   00010F00   _TM_DecodePicture@4
4         3   00010ED0   _TM_DecodePictureHeader@4
5         4   00010FD0   _TM_GetFileEnd@4
6         5   00011030   _TM_GetUValue@4
7         6   00011060   _TM_GetVValue@4
8         7   00011000   _TM_GetYValue@4
9         8   00010E10   _TM_OpenDecoder@8
10         9   00010F30   _TM_ReturnType@4
11         A   00010F90   _TM_SetFileEnd@8
Summary
2000   .data
1000   .rdata
1000   .reloc
15000   .text


按照以下方法整理:

1)添加LIB说明 LIBRARY “xx”; “xx”为DLL名称

DESCRIPTION “VideoDeCoder library”

2)去掉导出函数说明端以外的内容,在LIB说明下添加 “EXPROTS” 说明导出函数 LIBRARY “VideoDeCoder”

DESCRIPTION “VideoDeCoder library”

3)将所有的函数放至行首,去掉 “hint” 和 “RVA” 数据,留下函数的序号 “ordinal”, 在序号前加上 “@” 符号 形成 “_导出函数名@参数字节和 @序号” 此种格式(__stdcall 方式调用导出的函数符号是 “函数名称@参数字节和”).

最后形成.DEF文件如下:

LIBRARY   "VideoDeCoder"
DESCRIPTION   "VideoDeCoder   library"
EXPORTS
TM_ClearDecoderBuff@4                       @1
TM_CloseDecoder@4                           @2
TM_DecodePicture@4                          @3
TM_DecodePictureHeader@4                    @4
TM_GetFileEnd@4                             @5
TM_GetUValue@4                              @6
TM_GetVValue@4                              @7
TM_GetYValue@4                              @8
TM_OpenDecoder@8                            @9
TM_ReturnType@4                             @10
TM_SetFileEnd@8                             @11


生成lib

使用VC++的LIB工具,带/DEF:(.def文件名) /MACHINE:IX86(80X86机器),即可输出符合VC++格式的的LIB文件,之后将原有的dll改名为新的名称,也就是def文件中写的名字就可以了。

EXAMPLE:

LIB   /DEF:VideoDeCoder.def   /MACHINE:IX86


其他

编译使用LIB文件链接

注意:当有些动态库DUMPBIN的只有函数名,无”@nn”的参数格式,如C++Builder写的DLL,输出只有函数名符号,链接时就会报错:“ error LNK2002:unresolved external symbol “functionname@nn”

解决方案:提示程序中引入的函数符号无法识别,这时只要将DEF文件中相应的函数名称改为functionname@nn方式,重新生成lib,再次链接即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: