根据dll动态库生成对应的lib文件

一个 dll 动态库文件,编译的时候需要链接该库文件,如果没有提供 lib 文件,得先根据 dll 生成对应的 lib 文件

比如我需要从 libcrypto.dll 生成对应的 lib 文件,以下操作在 vc 环境下运行,需要将路径添加到环境变量 path 中

如 vc 路径为 "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\”

1、使用 dumpbin 生成 exports 列表

dumpbin.exe /exports libcrypto.dll > exports.txt

dumpbin出来的内容如下

Microsoft (R) COFF/PE Dumper Version 14.00.24247.2
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file D:\develop\libcrypto.dll

File Type: DLL

  Section contains the following exports for libcrypto.dll

    00000000 characteristics
    FFFFFFFF time date stamp
        0.00 version
           1 ordinal base
        3477 number of functions
        3477 number of names

    ordinal hint RVA      name

          1    0 000CA5A0 ACCESS_DESCRIPTION_free
          2    1 0013D450 ACCESS_DESCRIPTION_it
          3    2 000CA5B0 ACCESS_DESCRIPTION_new
          4    3 00001000 AES_cbc_encrypt
          5    4 000081E0 AES_cfb128_encrypt
          6    5 00008220 AES_cfb1_encrypt
          7    6 00008260 AES_cfb8_encrypt
          ......

2、准备一个 libcrypto.def 文件(这个名称是和动态库名称一样的),将导出函数抠出来填入,不要序号和地址

文件内容的前两行是固定的,名称改成动态库的名称(参考下面格式)

LIBRARY libcrypto
EXPORTS
	ACCESS_DESCRIPTION_free
	ACCESS_DESCRIPTION_it
	ACCESS_DESCRIPTION_new
	AES_cbc_encrypt
	AES_cfb128_encrypt
	AES_cfb1_encrypt
	AES_cfb8_encrypt
    ......

3、def文件准备好之后,使用下面命令生成动态库对应的 lib 文件

命令这里的 x86 表示生成 32 位的链接文件,如果 64 位的链接文件使用 x64

lib.exe /def:libcrypto.def /machine:x86 /out:libcrypto.lib

4、在 dumpbin 生成函数列表的时候,如 go 编译的动态库文件中,像下面这种格式的不需要作导出处理,中间还有一些有 “=” 符号的

ordinal hint RVA      name

          1    0 0079E040 _cgo_4c605886eead_Cfunc__Cmalloc
          2    1 0079E790 _cgo_667f92909735_Cfunc__Cmalloc
          3    2 0079E7D0 _cgo_667f92909735_Cfunc_free
          4    3 007B36B0 _cgo_667f92909735_Cfunc_free_conn_key_arg
          5    4 007B36C0 _cgo_667f92909735_Cfunc_get_conn_key_val
          6    5 007B2FE0 _cgo_667f92909735_Cfunc_input
          7    6 0079E7E0 _cgo_667f92909735_Cfunc_ipaddr_aton = _ipaddr_ntoa_r
          8    7 0079E820 _cgo_667f92909735_Cfunc_ipaddr_ntoa

         ......

         72   47 00461AB0 _cgoexp_667f92909735_tcpRecvFn
         73   48 00461B40 _cgoexp_667f92909735_tcpSentFn
         74   49 00461CD0 _cgoexp_667f92909735_udpRecvFn
         75   4A          bufio.(*ReadWriter).Available (forwarded to bufio.(*ReadWriter).Available)
         76   4B          bufio.(*ReadWriter).Discard (forwarded to bufio.(*ReadWriter).Discard)
         77   4C          bufio.(*ReadWriter).Flush (forwarded to bufio.(*ReadWriter).Flush)
         78   4D          bufio.(*ReadWriter).Peek (forwarded to bufio.(*ReadWriter).Peek)
         79   4E          bufio.(*ReadWriter).Read (forwarded to bufio.(*ReadWriter).Read)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值