2010-02-14 61 views
1

由於種種原因,我使用這裏所描述的方法更快的方法:http://geekswithblogs.net/TechTwaddle/archive/2009/10/16/how-to-embed-an-exe-inside-another-exe-as-a.aspx導出嵌入式數據

它從嵌入的文件的第一個字節開始起飛,並通過4.234.925字節一個一個去!大約需要40秒才能完成。

是否有任何其他方法將嵌入式文件複製到硬盤上? (我可能在這裏錯了,但我認爲嵌入式文件是從內存中讀取的)

謝謝。

+0

有趣!我曾試圖從C#開始,通過複製嵌入式資源(這是一個本地非託管DLL)並通過內存映射資源並使內存映射文件可執行將其加載到進程空間中,然後調用其上的函數哪些失敗..我仍然在自己搏鬥這個挑戰!爲什麼你不使用'WriteFile'函數,該函數可以採用一定大小的任意緩衝區並將其寫入一個浮動區域。 – t0mm13b 2010-02-14 21:47:11

回答

2

一旦你知道嵌入式EXE的位置和大小,那麼你可以在一次寫入。

LPBYTE pbExtract; // the pointer to the data to extract 
UINT cbExtract; // the size of the data to extract. 

HANDLE hf; 
hf = CreateFile("filename.exe",   // file name 
       GENERIC_WRITE,   // open for writing 
       0,      // no share 
       NULL,     // no security 
       CREATE_ALWAYS,   // overwrite existing 
       FILE_ATTRIBUTE_NORMAL, // normal file 
       NULL);     // no template 

if (INVALID_HANDLE_VALUE != hf) 
{ 
    DWORD cbWrote; 
    WriteFile(hf, pbExtract, cbExtract, &cbWrote, NULL); 
    CloseHandle(hf); 
} 
1

正如男人所說,每WriteFile調用寫更多的文件(或整件事)。每個字節的WriteFile調用將會非常緩慢。