由於種種原因,我使用這裏所描述的方法更快的方法:http://geekswithblogs.net/TechTwaddle/archive/2009/10/16/how-to-embed-an-exe-inside-another-exe-as-a.aspx導出嵌入式數據
它從嵌入的文件的第一個字節開始起飛,並通過4.234.925字節一個一個去!大約需要40秒才能完成。
是否有任何其他方法將嵌入式文件複製到硬盤上? (我可能在這裏錯了,但我認爲嵌入式文件是從內存中讀取的)
謝謝。
由於種種原因,我使用這裏所描述的方法更快的方法:http://geekswithblogs.net/TechTwaddle/archive/2009/10/16/how-to-embed-an-exe-inside-another-exe-as-a.aspx導出嵌入式數據
它從嵌入的文件的第一個字節開始起飛,並通過4.234.925字節一個一個去!大約需要40秒才能完成。
是否有任何其他方法將嵌入式文件複製到硬盤上? (我可能在這裏錯了,但我認爲嵌入式文件是從內存中讀取的)
謝謝。
一旦你知道嵌入式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);
}
正如男人所說,每WriteFile調用寫更多的文件(或整件事)。每個字節的WriteFile調用將會非常緩慢。
有趣!我曾試圖從C#開始,通過複製嵌入式資源(這是一個本地非託管DLL)並通過內存映射資源並使內存映射文件可執行將其加載到進程空間中,然後調用其上的函數哪些失敗..我仍然在自己搏鬥這個挑戰!爲什麼你不使用'WriteFile'函數,該函數可以採用一定大小的任意緩衝區並將其寫入一個浮動區域。 – t0mm13b 2010-02-14 21:47:11