RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
详解VS2019dumpbin查看DLL的导出函数-创新互联

之前有人问过ViewDLL这些软件在哪下载。实际上使用VS就可以查看DLL的导出接口。

目前创新互联已为1000+的企业提供了网站建设、域名、雅安服务器托管成都网站托管、企业网站设计、广平网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

1.先打开VS内部的Power Shell

详解VS2019 dumpbin查看DLL的导出函数

2.打开以后应该如下图所示,首先输入dumpbin查看下用法:

详解VS2019 dumpbin查看DLL的导出函数

3.使用 /Exports 参数查看DLL的导出函数符号

详解VS2019 dumpbin查看DLL的导出函数

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

分享标题:详解VS2019dumpbin查看DLL的导出函数-创新互联
文章来源:http://scyingshan.cn/article/ddsddp.html