我正试图从一个旧的VB4应用程序中复制一个bugEXE本身在导入表中没有任何Windows API;相反,它们都是从VB运行时DLL加载的。
我想重新创建一个类似的场景,但在Visual Studio中使用C稍后,我将使用Windows API导入创建与运行时DLL等效的DLL,但是第一步是确保在我的EXE中导入表中没有Windows API。
到目前为止,我已经使用/SUBSYSTEM:CONSOLE从import表中删除了几乎所有内容,从Linker->Input->Additional Dependencies中删除了all.LIB,并将运行时库设置为多线程调试(/MTd)。
但是kernel32.dll API仍在导入表中虽然我意识到/子系统:本机通常是为驱动程序,但我不确定这是否是我需要使用的,但是我不能得到一个最小的应用程序(即一个启动,然后退出而不崩溃)来编译这个选项。
如果使用链接器->输入->忽略所有默认库->是(/NODEFAULTLIB),则会出现以下错误:

Severity    Code    Description Project File    Line    Suppression State   Suppression State
Error   LNK2001 unresolved external symbol _mainCRTStartup  Minimalist  C:\Users\chentiangemalc\source\repos\Minimalist\Minimalist\LINK 1
Error   LNK2019 unresolved external symbol __RTC_CheckEsp referenced in function _main  Minimalist  C:\Users\chentiangemalc\source\repos\Minimalist\Minimalist\Minimalist.obj   1
Error   LNK2001 unresolved external symbol __RTC_InitBase   Minimalist  C:\Users\chentiangemalc\source\repos\Minimalist\Minimalist\Minimalist.obj   1
Error   LNK2001 unresolved external symbol __RTC_Shutdown   Minimalist  C:\Users\chentiangemalc\source\repos\Minimalist\Minimalist\Minimalist.obj   1

我试图编译的代码没有包含,只是:
int main()
{
}

最佳答案

陈雷蒙的评论让我走上了正确的方向要在Visual Studio 2019中创建此程序,请使用
新项目C++控制台程序
将.cpp重命名为.c(如果要创建c程序)
用自定义入口点替换代码:
int myMain()
{
}
在Project属性中,C/C++代码生成集基本运行时检查为空(擦除文本),将运行库设置为多线程调试(/MTD),用于调试生成或多线程(/MT),用于释放生成,设置安全检查以禁用安全检查(/GS)。
在项目属性中|链接器|输入|从其他依赖项中删除所有内容,并将“忽略所有默认库”设置为“是”(/NODEFAULTLIB)
在项目属性中|链接器|高级设置myMain的入口点
现在有一个程序的导入表完全为空。

关于c - 如何使用Visual Studio在导入表中创建没有Windows API的最小Win32 C程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58513890/

10-13 08:11
查看更多