簡體   English   中英

使用Loadlibrary(“ cmd.exe”)但不起作用

[英]Using Loadlibrary(“cmd.exe”) but not work

眾所周知,當我們啟動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的進程。(我知道使用exe的Loadlibrary文件可以在不創建新進程的情況下在調用進程中啟動exe),為什么Loadlibrary不起作用?(在控制台窗口中未顯示任何單詞)

(我知道帶有exe文件的Loadlibrary可以在調用進程中啟動exe,而無需創建新進程)

不,不能。

如果使用LOAD_LIBRARY_AS_DATAFILE標志,則可以將EXE文件的名稱傳遞給LoadLibraryEx ,以訪問其資源,但LoadLibrary既不在EXE中運行代碼,也不准備運行代碼。

EXE的入口點旨在具有自己的進程。 (我說的是真正的入口點,通常由語言支持庫提供。它的名稱可能像wmainCRT及其地址,而不是用戶提供的main()的地址,出現在PE標頭中) 。 通常,它通過調用ExitProcess()退出,這會對主機EXE產生災難性的影響,即使您確實設法將其映射到內存空間並調用它。

動態可加載庫和可執行文件的入口點要求非常不同。

您無法通過LoadLibrary運行可執行文件。 請改用CreateProcess(或其同級之一)。

LoadLibrary函數文檔中(我的黑體字突出顯示):

LoadLibrary也可以用於加載其他可執行模塊。 例如,該函數可以指定一個.exe文件來獲取可在FindResource或LoadResource中使用的句柄。 但是, 請勿使用LoadLibrary運行.exe文件 而是使用CreateProcess函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM