2012-08-03 59 views
0

通過NSCreateObjectFileImageFromMemory函數從內存加載包是可能的。有沒有人有這方面的成功經驗?有沒有人有工作樣本這個功能? 我的代碼:從內存加載和執行包

text srcPath = "/Applications/TextEdit.app/Contents/MacOS/TextEdit"; 
data_t data; 
data.loadFromFile(srcPath); 
void *addr; 
kern_return_t err; 
NSObjectFileImage img = nil; 
NSObjectFileImageReturnCode dyld_err; 

err = vm_allocate(mach_task_self(), (vm_address_t *)&addr, 
    data.length(), true); 
if(err == 0) 
{ 
    //err = vm_write(mach_task_self(), (vm_address_t)addr, 
     //(vm_address_t)(char*)data, data.length()); 
    memcpy(addr, (char*)data, data.length()); 
    if(err == 0) 
     dyld_err = 
      NSCreateObjectFileImageFromMemory(addr, data.length(), &img); 
     // error is NSObjectFileImageFailure 
} 

IMG變量爲空(錯誤是NSObjectFileImageFailure)。爲什麼?

謝謝。

回答

0

manpage看來,只有MH_BUNDLE文件可以加載NSCreateObjectFileImageFromMemory()和朋友。

MH_BUNDLE文件被解釋爲here

MH_BUNDLE文件類型是您在運行時加載的代碼通常使用的類型(通常稱爲包或插件)。按照慣例, 此格式的文件擴展名爲.bundle。

請注意該聯機幫助是爲10.4,並且似乎沒有可用的新版本。

+0

謝謝,我也已經創建了一個由XCode(具有.bundle擴展名)的簡單包,但沒有成功。 – 2012-08-03 13:08:06

+0

好吧,我檢測到問題,1. MH_BUNDLE文件可以加載,並且2. loader和bundle都應該具有相同的體系結構(32位或64位)。 – 2012-08-03 13:39:32