从内存加载和执行包

时间:2012-08-03 12:40:39

标签: macos cocoa bundle macos-carbon core-foundation

NSCreateObjectFileImageFromMemory函数可以从内存中加载bundle。有没有人在这方面有成功经验?有没有人有这个功能的工作样本? 我的代码如下:

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 变量为null(错误是NSObjectFileImageFailure)。为什么呢?

三江源。

1 个答案:

答案 0 :(得分:0)

manpage开始,MH_BUNDLE和朋友只能加载NSCreateObjectFileImageFromMemory()个文件。

MH_BUNDLE文件已解释为here

  

MH_BUNDLE文件类型是您通常使用的代码类型   在运行时加载(通常称为bundle或plug-ins)。按照惯例,   此格式的文件扩展名为.bundle。

请注意,该联机帮助页适用于10.4,并且似乎没有更新的版本。