您能从以下命令DUMPBIN/SYMBOLS的输出中导出函数声明吗?我按如下方式运行此命令:DUMPBIN/SYMBOLS libinfinityhook.lib并从转储中获得以下内容:
IfhInitialize@@YAJP6AXIPEAPEAX@Z@Z (long __cdecl IfhInitialize(void (__cdecl*)(unsigned int,void * *)))
上面输出的函数声明是什么?也许是以下内容:
NTSTATUS IfhInitialize(
_In_ INFINITYHOOKCALLBACK InfinityHookCallback);
假设以下类型def:
typedef void (__fastcall * INFINITYHOOKCALLBACK)(_In_ unsigned int SystemCallIndex, _Inout_ void** SystemCallFunction);
Microsoft Visual Studio附带了一个名为undname.exe
的实用程序,它将把大多数修饰的名称反转为未修饰的名称。
GNU Binutils有c++filt
,它将对GCC名称篡改执行同样的操作。
LLVM具有llvm-cxxfilt
符号名称去映射器,它与GNU Binutilsc++filt
兼容,因为LLVM和GCC使用相同的名称篡改方案。
与此相关的是,在处理过程中,Boostdemangle
允许从typeid
name()
中取消装饰符号名称。请记住,typeid
name()
不是由C++标准规定的,而是编译器特定的。因此它不可移植,不适合跨平台序列化/反序列化。唉。