顺便再讲下关于调用约定和函数符号的关系,即_stdcall,_cdecl.还有就是extern "c"对函数名符号的影响。
上面的Dll1.dll的导出头文件如下:
#pragma once
extern "C" {
//extern "C" + _stdcall,函数导出符号为 _CreateNativeManager@0 : _+函数名+@+传参字节数
//由于_stdcall是被调用方清理堆栈,所以函数符号里面包含了传参的信息
_declspec(dllexport) NativeManager* _stdcall CreateNativeManager();
_declspec(dllexport) void _stdcall ReleaseNativeManager();
_declspec(dllexport) void(_stdcall ExSetLogHandler)(LogHandler handler);
//extern "C" + _cdecl,函数导出符号为 ReleaseNativeManager2 : 函数名
//由于_cdecl是调用方清理堆栈,所以只需要函数名就可以
_declspec(dllexport) void(_cdecl ReleaseNativeManager2)();
//不使用extern的情况下,是C++的导出方式,函数符号如下:
//?ReleaseNativeManager1@@YGXH@Z : ?+函数名+@@YG+返回类型+参数1类型...+@Z
//如果是_cdecl @YG变为@YA
//如果没有参数即参数为void,则以Z结尾,例如:
//?ReleaseNativeManager3@@YAXXZ : ?+函数名+@@YA+返回类型+XZ
//以上 X表示 void类型,H表示int参数类型
_declspec(dllexport) void(_stdcall ReleaseNativeManager1)(int num);
_declspec(dllexport) void(_cdecl ReleaseNativeManager3)();
如果导入dll时发现没有找到该函数,要根据dll的导出约定方式设置对应的导入方式,否则虽然函数名一样但实际上符号是不同的。
利用这个程序可以得到一个
dll
的所有输出
函数
,这没有什么特别的,w32dsm就可以,不过w32dsm输出的是一般人看不懂得“名称修饰”,我这个程序是可以转换为C++
函数
声明的。
其实,这些功能微软都提供了(undname.exe和
DUMP
BIN
.EXE),只不过不是用我们习惯的wins程序,而是控制台程序的形式提供的,我的这个这个程序只不过是提供了一个win程序外壳,所以想要使用这个程序,需要安装过VC6
用法是先用程序打开一个
dll
文件,然后调用“翻译全部...”功能
1. 打开命令行工具
开始-> 所有程序-> Microsoft Visual Studio 2005-> Visual Studio Tools->Visual Studio 2005 命令提示
2.使用
dump
bin
工具
dump
bin
-exports C:\WRMP_BthTransLayer_Win32.lib
dump
bin
-expor
用
dump
bin
.exe工具
查看
DLL
,
dump
bin
.exe是VS自带的工具。我装的是VS2010,所以路径是:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\
bin
\amd64\下就可以看到
dump
bin
.exe了。
怎么使用
dump
bin
.exe呢?因为
dump
bin
.exe有可能会使用很多工具,所以你单单把它拿出来使用,那是不...
有时候我们想
查看
一个exe引用了哪些动态库,或者我们想看某个动态库包含哪些接口
函数
,这个时候可以使用
dump
bin
.exe工具。开始->全部程序->Visual Studio 2017->VS 2017开发人员命令行提示符。
dump
bin
/dependents xxx.exe # 简化版,到加载的
dll
。
dump
bin
-imports xxx.exe # 可以看到
dll
及
dll
函数
。1)
查看
它的输入信息,可以看到加载的
dll
及
dll
函数
。2、
dump
bin
工具的使用。
3.使用 /Exports
参数
查看
DLL
的
导出
函数
符号
顺便再讲下关于调用约定和
函数
符号的关系,即_stdcall,_cdecl.还有就是extern “c”对
函数
名符号的影响。
上面的
Dll
1.
dll
的
导出
头文件如下:
#pragma once
extern "C" {
//extern "C" + _stdcall,
函数
导出
符号为 _CreateNativeManager@0 : _+
说惯了面向硬件的操作系统,也应该说说操作系统的主要使用对象–用户程序。要深入理解程序的运作过程,则需要了解编译原理、链接、装载和运行库等知识。一般都是IDE封装了这些过程,一个简单的Shift+F5指令封装了“预编译+编译+汇编+链接+装载”全过程,而要想分割独立地控制或挖掘这些子过程,则不得不借助一些工具,如预编译编译程序cl、汇编器as、链接器link、
查看
工具
dump
bin
(针对Windows
1. 用工具depends来
查看
该工具可从http://www.dependencywalker.com/下载,打开该软件,再通过该软件打开需要
查看
的
Dll
,比如打开C运行时库,C:\Windows\System32\msvcrt.
dll
,呈现如下:
在窗中右侧中部,看到了我们熟悉的打开文件的C语言标准库
函数
fopen.
2.利用
dump
b...
1.输入
Dump
bin
-imports call
dll
.exe
查看
它的输入信息,可以看到它加载了***.
dll
2.输入
dump
bin
–exports
dll
test.
dll
,列出导
Dump
bin
是自带的一个命令行工具,用于
查看
可执行文件、静态库和动态库的导入表、
导出
表、符号表等信息。在Windows环境下,可以通过以下步骤安装和使用
dump
bin
打开开发人员命令提示符:在Windows菜单中找到的文件夹,然后找到文件夹,里面有一个“开发人员命令提示符”,右键点击并选择“以管理员身份运行”。进入动态库所在目录:在命令提示符中,使用cd命令进入动态库所在的目录。使用
dump
bin
这个命令将会输出动态库中所有
导出
的
函数
的名称和地址。
有时候我们想
查看
一个exe引用了哪些动态库,或者我们想看某个动态库包含哪些接口
函数
,这个时候可以使用
dump
bin
.exe工具。
1、vs下进入
dump
bin
工具环境
开始->全部程序->Visual Studio 2017->VS 2017开发人员命令行提示符。
在使用vs写程序的时候,我们经常会将程序生成为
dll
或是exe文件,而这些文件通常也会需要依赖其他库的
dll
才能单独使用。那我们该如何确定某个
dll
或是exe文件依赖了哪些
dll
呢?这个问题可以通过使用vs自带的
dump
bin
工具来解决。下面详细介绍其使用方法:首先点击开始菜单,打开vs命令行程序,如下图所示。
在打开的界面上输入
dump
bin
/dependents +
dll
/exe文件路径,比如
dump
bin
/dependents E:\xxx\xxx\plugins\qPDALIO.
dll
,然后