更改dll名称

来源:互联网 发布:企业网站seo 编辑:程序博客网 时间:2024/05/17 03:17

本文转自往事随风的博客
为了更改目标dll的名称,按如下三步操作。

1 生成.def文件

  • 使用VC++的工具DUMPBIN
    EXAMPLE:
  DUMPBIN   VideoDeCoder.dll   /EXPROTS   /OUT:VideoDeCoder.def   

2 修改.def文件

  • 将导出的.DEF文件整理为一符合.DEF个数的函数导出文件
    EXAMPLE:VideoDeCoder.DEF 文件内容如下
Dump   of   file   VideoDeCoder.dllFile   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@45         4   00010FD0   _TM_GetFileEnd@46         5   00011030   _TM_GetUValue@47         6   00011060   _TM_GetVValue@48         7   00011000   _TM_GetYValue@4 9         8   00010E10   _TM_OpenDecoder@8              10         9   00010F30   _TM_ReturnType@411         A   00010F90   _TM_SetFileEnd@8Summary 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,再次链接即可。

1 0
原创粉丝点击