2012-08-03 5 views
0

NSCreateObjectFileImageFromMemory 함수로 메모리에서 번들로드가 가능합니다. 누구든지이 분야에서 성공적인 경험을 갖고 있습니까? 누구든지이 함수에 대한 샘플을 가지고 있습니까? 변수 (오류가 NSObjectFileImageFailure입니다) null의메모리에서 번들로드 및 실행

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 :로 내 코드입니다. 왜?

고마워요.

답변

0

manpage에서 NSCreateObjectFileImageFromMemory()과 친구들 만 MH_BUNDLE 개의 파일을로드 할 수 있습니다.

MH_BUNDLE 파일에 대한 설명은 here입니다.

MH_BUNDLE 파일 형식

는 런타임에 부하 (일반적으로 번들이라고 또는 플러그인)은 일반적으로 코드에 의해 사용되는 유형입니다. 규칙에 따라 이 형식의 파일 이름 확장명은 .bundle입니다.

해당 맨 페이지는 10.4 용이며 새 버전이없는 것으로 나타났습니다.

+0

감사합니다. Xcode (번들 확장자 있음)로 간단한 번들을 만들었지 만 성공하지 못했습니다. –

+0

좋아요, 문제가 발견되었습니다. 1. MH_BUNDLE 파일을로드 할 수 있고 2. 로더와 번들 둘 다 동일한 아키텍처 (32 비트 또는 64 비트)를 가져야합니다. –

관련 문제