C++ 定义动态调用函数的Windows API头文件

C++ 定义动态调用函数的Windows API头文件,c++,winapi,dynamic,typedef,dllimport,C++,Winapi,Dynamic,Typedef,Dllimport,是否有一个C头文件可用于定义函数调用,以代替为我要进行的每个调用手动写出typedef typedef int (WINAPI *pMessageBoxW)(HWND, LPCWSTR, LPCWSTR, UINT) 以上是我发现自己经常写出来的东西 我隐约记得Zeus特洛伊木马源代码中包含了一些东西,它定义了大量的windows函数。然而,我正在尝试创建一个合法的windows程序。即使我们将许可证问题(尽管不太可能有人会起诉我)放在一边,包含特洛伊木马代码(即使是良性的)似乎也有点令人不快

是否有一个C头文件可用于定义函数调用,以代替为我要进行的每个调用手动写出typedef

typedef int (WINAPI *pMessageBoxW)(HWND, LPCWSTR, LPCWSTR, UINT)
以上是我发现自己经常写出来的东西

我隐约记得Zeus特洛伊木马源代码中包含了一些东西,它定义了大量的windows函数。然而,我正在尝试创建一个合法的windows程序。即使我们将许可证问题(尽管不太可能有人会起诉我)放在一边,包含特洛伊木马代码(即使是良性的)似乎也有点令人不快

我在github上查看carberp和zeus代码时发现

#define pSetFilePointer             pushargEx< DLL_KERNEL32, 0xEF48E03A, 27 >
我是否可以/应该使用“just trust me”编译器或宏指令来执行此操作?我真正想做的就是在学习新东西的同时动态地包含大量的WINAPI函数调用——同时维护合理干净的代码

在谈论这个问题时,我是否应该使用具体的措辞?我觉得似乎是我正在使用的词汇,而不是我想要达到的目标,限制了我在这个话题上找到更多信息的能力

是否有一个C头文件可用于定义函数调用,以代替为我要进行的每个调用手动写出typedef

typedef int (WINAPI *pMessageBoxW)(HWND, LPCWSTR, LPCWSTR, UINT)
没有


我有点好奇,为什么您觉得有必要对
MessageBox
SetFilePointer
等函数使用运行时链接。我想知道您是否错误地认为在运行时而不是在加载时链接到它们是一个好策略。

MessageBox只是一个例子,但运行时解析确实允许较小的文件大小。我试图深入研究函数挂钩(不一定需要这样的东西)、外壳代码,但我现在要处理的是定位独立代码和可执行文件,据我所知,它们不支持在这个庄园中链接。我知道这是另外一种执行一些反调试/分析的方法,但是上面的carberp代码对于这样的事情会更实用。我怀疑运行时链接会导致更小的文件大小。我的预期正好相反。无论如何,这些都不会改变你所问问题的答案。如果导入是按序号而不是名称解析的,那么运行时链接可以减少文件大小。通常不适用,但在特定场景中有可能收缩可执行文件@可执行文件已经是位置独立的了。否则,ASLR将无法工作。模块将函数入口点存储为相对虚拟地址,在解析导入时,加载程序将其简单地添加为模块句柄的偏移量。