导入表中缺少 kernel32.dll

逆向工程 视窗 登录
2021-06-15 23:54:54

我有非常基本的应用程序,它是控制台应用程序显示消息框。在 Visual Studio 中,我更改了以下选项:

- C/C++ -> SecurityCheck -> Disable Security Check (/GS-)
- Linker -> Advanced -> Entry Point -> main
- Linker -> Input -> -> Ignore All Default Libraries -> Yes (/NODEFAULTLIB)

从 .exe 中删除所有依赖项,如 vcruntime140.dll、api-ms-win-crt-locale.dll 等。

现在,我在导入表中只有一个依赖项,即 user32.dll(消息框需要)。

为什么缺少kernel32.dll?我认为所有 .exe 应用程序都需要 kernel32.dll。

即使缺少 kernel32.dll,应用程序也能正常运行。

1个回答

如果您没有使用 kernel32 中的任何 API,则不会将其添加到导入表中,就这么简单。您被错误告知所有应用程序都需要 kernel32。甚至可以有一个没有导入表的应用程序。

关于 vcruntime140 等,您可以只针对 Windows XP 并使用 /MP 选项来摆脱它们。api-ms*.dll 是 Windows Vista+ 使用垫片导入 kernel32.dll 等内容的方式,因此如果您不关心 XP 支持,这些都不是问题。