gpt4 book ai didi

c++ - 使用 Loadlibrary ("cmd.exe")但不起作用

转载 作者:行者123 更新时间:2023-11-30 18:20:00 25 4
gpt4 key购买 nike

众所周知,当我们启动 CMD.exe 时,它​​会出现一个控制台窗口,并以以下行开头:

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\hey>

但是当我在 VS 中创建一个 Windows 控制台项目时,我的代码如下:

int _tmain(int argc, _TCHAR* argv[])
{
auto h = LoadLibrary(__TEXT("cmd.exe"));
Sleep(99999);
}

结果只是一个黑色的窗口。没有线路输出!

正如我所料,我可以在我的进程中加载​​这个PE(Windows可执行格式)文件,这样我就不必启动一个新的cmd.exe并将其stdIO重定向到启动cmd.exe的进程。(我知道Loadlibrary使用 exe 文件可以在调用进程中启动 exe,而无需创建新进程)为什么Loadlibrary不工作?(控制台窗口中没有出现任何文字)

最佳答案

(i know Loadlibrary with an exe file could start a exe in calling process without creating a new process)

不,不能。

如果使用 LOAD_LIBRARY_AS_DATAFILE 标志,则可以将 EXE 文件的名称传递给 LoadLibraryEx,以便访问其资源,但是 LoadLibrary > 既不运行 EXE 中的代码,也不准备运行代码。

EXE 的入口点被设计为拥有自己的进程。 (我说的是真正的入口点,它通常由语言支持库提供。它可能有一个名称,例如wmainCRT及其地址,而不是用户提供的地址main(),出现在 PE header 中)。通常,它通过调用 ExitProcess() 退出,这将对您的主机 EXE 产生灾难性影响,即使您确实设法将其映射到内存空间并调用它。

动态可加载库和可执行文件的入口点的要求非常非常不同。

关于c++ - 使用 Loadlibrary ("cmd.exe")但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35122703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com