2012-08-01 32 views
2

任何人都知道在OSX中從內存中運行可執行文件的任何內容? 類似的東西:如何從內存啓動可執行文件?

char *exeFile[size]; 
loadFromFile(exeFile, "/path/to/data"); 
execute(exeFile); 

我想這樣做是出於安全原因。例如可以在啓動前加密exe並對其進行解密。

+0

這是不可能的AFAIK;你可以使用'exec()'調用系列(當然是在'fork()'之後),但是你不能加密可執行文件。 – trojanfoe 2012-08-01 08:16:06

+0

UPX EXE壓縮程序可以做到這一點,解壓縮二進制數據並執行它。 – 2012-08-01 08:26:59

+0

這是可執行文件本身內的代碼;而不是加載可執行文件時父進程執行的操作。 – trojanfoe 2012-08-01 08:30:09

回答

4

嗯,是的,你可以做到,但它的複雜。我現在無法訪問工作代碼,但我確實知道其他人已經使用過它。關鍵是「NSCreateObjectFileImageFromMemory()」,這已被棄用,但稱Skype這樣的大型應用程序使用它,所以它可能不會很快消失(YMMV)。

您必須使用vm_allocate分配一個內存緩衝區,該緩衝區是pagesize的倍數。將與當前進程相同體系結構的mach-o可執行文件複製到那裏。調用NSCreateObjectFileImageFromMemory(),它返回一個對象圖像。然後依次調用NSLinkModule,NSLookupSymbolInModule和NSAddressOfSymbol。最後一個給你一個實際的函數指針來調用。

這應該給你你需要知道的大部分內容,如果你搜索,你可能會發現代碼。祝你好運!

+0

Thankyou大衛,這是很好的指導,現在我有一個起點。 – 2012-08-02 06:03:03

相關問題