添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

顺便再讲下关于调用约定和函数符号的关系,即_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 ,然后