认识DLL

DLL,全称是Dynamic Link Library,又称[动态链接库文件],又称[应用程序拓展],里面包含了很多函数。

如果你有了某个dll文件,那么你就可以调用这个dll里面的函数。

简单来说相当于一个随意移动的函数库集合,这就是动态链接库文件中的所谓动态的意思。

而且,有了这个dll,大部分编程语言都能够调用其中的函数,以此来实现你需要的功能,相当于你写不出来或者不想写的一些函数都可以拿别人已经写好的函数供你使用。可以两个字形容:白嫖。白嫖别人的智慧和时间。

缺点是,别人的dll文件里的方法你没办法改,有啥就只能使用啥。

(https://jasonkayzk.github.io/2021/01/28/各编程语言加载并调用dll库/)

较为流行的编程语言基本都能够调用dll:

  • Golang
  • Python
  • Java
  • Kotlin
  • JavaScript

如果你的cmd中dumpbin命令无法使用,你可以把dumpbin.exe文件所在目录加入到环境变量中,注意是dumpbin.exe文件所在目录,不包含dumpbin.exe。就像我这个文件的所在目录是

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\

那么我可以把这个目录放到环境变量里,然后重开cmd窗口就可以使用dumpbin命令了。

 如何查看DLL函数的函数名和需要的参数?

可以在cmd窗口中使用指令

dumpbin

 

dumpbin命令的参数说明:
Microsoft (R) COFF/PE Dumper Version 14.00.24210.0
Copyright (C) Microsoft Corporation.  All rights reserved.

usage: DUMPBIN [options] [files]

   options:

      /ALL
      /ARCHIVEMEMBERS
      /CLRHEADER
      /DEPENDENTS
      /DIRECTIVES
      /DISASM[:{BYTES|NOBYTES}]
      /ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
      /EXPORTS
      /FPO
      /HEADERS
      /IMPORTS[:filename]
      /LINENUMBERS
      /LINKERMEMBER[:{1|2}]
      /LOADCONFIG
      /NOLOGO
      /OUT:filename
      /PDATA
      /PDBPATH[:VERBOSE]
      /RANGE:vaMin[,vaMax]
      /RAWDATA[:{NONE|1|2|4|8}[,#]]
      /RELOCATIONS
      /SECTION:name
      /SUMMARY
      /SYMBOLS
      /TLS
(press <return> to continue)

 各参数定义

/ALL

显示除代码反汇编外的所有可用信息。
使用 /DISASM 显示反汇编。可以与 /ALL 一起使用 /RAWDATA :NONE 来省略文件的原始二进制详细资料。
只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/ARCHIVEMEMBERS

显示有关库成员对象的最少信息。
/CLRHEADER

显示有关在任何托管程序中使用的 .NET 头的信息。
/DEPENDENTS

转储图像从中导入函数的 DLL 的名称。不要转储导入函数名。
/DIRECTIVES

转储图像中由编译器生成的 .directive 节。
/DISASM[:{BYTES|NOBYTES}]

显示代码段的反汇编,如果出现在文件中则使用符号。
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}

/ERRORREPORT 参数被 Windows 错误报告服务设置重写。 如果报告由 Windows 错误报告启用,链接器会自动向 Microsoft 发送内部错误报告。 如果被 Windows 错误报告禁用,则不会发送报告。
/EXPORTS

显示从可执行文件或 DLL 导出的所有定义。
/FPO

显示框架指针优化 (FPO) 记录。
/HEADERS

显示文件头和每节的头。当用于库时,显示每个成员对象的头。
/IMPORTS[:filename]

显示导入到可执行文件或 DLL 的 DLL 列表(静态链接的和延迟加载 )和上述每个 DLL 的各个导入。
/LINENUMBERS

显示 COFF 行号。如果对象文件是用程序数据库 (/Zi)、C7 兼容 (/Z7) 或仅限行号 (/Zd) 编译的,则它包含行号。如果可执行文件或 DLL 是与生成调试信息 (/DEBUG) 链接的,则它包含 COFF 行号。
/LINKERMEMBER[:{1|2}]

显示库中定义的公共符号。指定参数 1 将按对象顺序显示符号及其偏移量。指定参数 2 将显示对象的偏移量和索引号,然后按字母顺序列出这些符号及每个符号的对象索引。若要两个输出都获得,指定不带数字参数的 /LINKERMEMBER。
/LOADCONFIG

转储 IMAGE_LOAD_CONFIG_DIRECTORY 结构,此结构是由 Windows NT 加载程序使用并在 WINNT.H 中定义的可选结构。
/NOLOGO

禁止在编译器启动时显示版权横幅,并在编译期间禁止显示信息性消息。
/OUT:filename

指定输出的 filename 。默认情 况下,DUMPBIN 将信息显示到标准输出。
/PDATA

仅限 RISC 处理器。 此选项从图像或对象转储异常表 (.pdata)。 只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。
/PDBPATH[:VERBOSE]

此处: filename 要为其查找匹配 .pdb 文件的 .dll 或 .exe 文件名。
/RANGE:vaMin[,vaMax]

与其他 dumpbin 选项(如 /RAWDATA 或 /DISASM)一起使用时,可修改 dumpbin 的输出。
/RAWDATA[:{NONE|1|2|4|8}[,#]]

此选项显示文件中每个部分的原始内容。 这些参数控制显示格式,如下所示:

参数结果
1 默认值。 内容以十六进制字节形式显示,如果内容具有打印表示形式,则也显示为 ASCII 字符。
2 内容显示为十六进制 2 字节值。
4 内容显示为十六进制 4 字节值。
8 内容显示为十六进制 8 字节值。
NONE 禁止显示原始数据。 此参数可用于控制 /ALL 的输出。
数字 将显示的行设置为每行保留 number 个值的宽度。

只有 /HEADERS DUMPBIN 选项可用于由 /GL 编译器选项产生的文件。

/RELOCATIONS

此选项显示对象或图像中的任何重定位。
/SECTION:name

此选项限制与指定的 section 有关的信息的输出。
/SUMMARY

此选项显示有关节的最少信息(包括总大小)。如果未指定其他选项,则此选项为默认值。
/SYMBOLS

此选项显示 COFF 符号表。符号表存在于所有对象文件中。而对于图像文件,只有当它是与 /DEBUG 链接的时,它才包含 COFF 符号表。
/TLS

显示某个可执行文件中的 IMAGE_TLS_DIRECTORY 结构。
posted @ 2023-11-28 00:55  Rkey  阅读(17)  评论(0编辑  收藏  举报