DLL函数名使用dumpbin.exe
DLL function names using dumpbin.exe
我在visual studio 2010中编写了一个.dll库,其中包含许多函数和类。当我用:
查看文件的内容时dumpbin.exe /EXPORTS myDll.dll
我得到长函数名与某种函数位置指针,它看起来像这样(第二个条目在.dll):
2 1 0001100A ?Initialize@codec@codecX@@SANNN@Z = @ILT+5(?Initialize@codec@codecX@@SANNN@Z)
这有点难读,但我从其他。dll中看到了"更好"的过程/函数列表,比如:
141 8C 00002A08 PogoDbWriteValueProbeInfo
我怎么能使。dll列表看起来那样?
注:我的DLL源代码看起来像这样:
namespace codecX
{
class codec
{
public:
static __declspec(dllexport) double Initialize(double a, double b);
...
您需要将这些静态成员函数拉入全局地址空间,然后用外来的"C"。这将抑制c++名称混淆,取而代之的是给你一个不那么难看的C名称混淆:
extern "C" __declspec(dllexport) Initialize(double a, double b)
{
codec::Initialize(a, b);
}
,然后删除静态成员函数上的__declspec(dllexport):
class codec
{
public:
static double Initialize(double a, double b);
}
这被称为name-mangling,在使用c++编译器编译c++时发生。为了保留"人类可读"的名称,在声明和定义类和函数时必须使用extern "C"
。例如
extern "C" void myFunction(int, int);
看这里,也谷歌mixing C and C++
你看到的是c++对函数名的混淆。
如果这个函数需要保持为c++函数,您可以使用实用程序undname.exe
后处理dumpbin.exe
输出以获得正常的函数名称。
随Microsoft Visual Studio提供了一个实用程序,用于取消修饰c++中被打乱的函数名,称为undname.exe
。
可以这样使用:
C:>undname ?func1@a@@AAEXH@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.
Undecoration of :- "?func1@a@@AAEXH@Z"
is :- "private: void __thiscall a::func1(int)"
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 终端不会为C++文件创建.exe文件吗
- 在Windows中以.exe的形式运行c++
- Visual Studio mkl_link_tool.exe链接错误
- PrintWindow函数在notepad.exe中出错
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 获取当前正在运行的 exe 名称(不是路径)
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 1d.exe找不到SFML文件?
- VI工作室代码错误无法打开输出文件主.exe
- 如何为每个客户生成自定义 exe
- 使用参数在 C# 的C++上运行.exe
- 在 ******.exe 中0x00000000772CA267 (ntdll.dll) 处未处理的异常:0xC0000
- 如何在Visual Studio Code中重命名我的a.exe文件?
- 解析引用 |exe/dll vs lib
- Q没有管理权限的 exe 无法启动维护工具
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- Eclipse 没有在 Windows (C++) 中编译.exe
- DLL函数名使用dumpbin.exe