更改dll名称

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

1 生成.def文件

  • 使用VC++的工具DUMPBIN
    EXAMPLE:
  DUMPBIN   VideoDeCoder.dll   /EXPORTS   /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,再次链接即可。

阅读更多
换一批

没有更多推荐了,返回首页