Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool ptr_is_in_exe(const intptr_t ptr, const struct mach_header *& header, intptr_t& offset, uintptr_t& vmaddr, const char* image_name) {
- // Usage :
- /*
- const char* image_name = "Binary / dylib etc"; //Should point to Dokkan binary
- const char* symbol_name = "Symbol / function _ZTS etc"; //Symbol to hook
- const struct mach_header* header;
- intptr_t offset;
- uintptr_t vmaddr;
- //ptr_is_in_exe(200, header, offset, vmaddr, image_name);
- //*/
- uint32_t i, count = _dyld_image_count();
- for (i = 0; i < count; i++) {
- header = _dyld_get_image_header(i);
- offset = _dyld_get_image_vmaddr_slide(i);
- //notes << i << "," << offset << ": " << _dyld_get_image_name(i) << endl;
- uint32_t j = 0;
- struct load_command* cmd = (struct load_command*)((char *)header + sizeof(struct mach_header));
- if(header->magic == MH_MAGIC_64)
- cmd = (struct load_command*)((char *)header + sizeof(struct mach_header_64));
- //struct load_command* cmd_end = cmd + header->sizeofcmds;
- while (j < header->ncmds) {
- if (cmd->cmd == LC_SEGMENT) {
- struct segment_command* seg = (struct segment_command*)cmd;
- if (((intptr_t)ptr >= (seg->vmaddr + offset)) && ((intptr_t)ptr < (seg->vmaddr + offset + seg->vmsize))) {
- vmaddr = seg->vmaddr;
- image_name = _dyld_get_image_name(i);
- return true;
- }
- }
- if (cmd->cmd == LC_SEGMENT_64) {
- struct segment_command_64* seg = (struct segment_command_64*)cmd;
- if (((uintptr_t)ptr >= (seg->vmaddr + offset)) && ((uintptr_t)ptr < (seg->vmaddr + offset + seg->vmsize))) {
- vmaddr = seg->vmaddr;
- image_name = _dyld_get_image_name(i);
- return true;
- }
- }
- j++;
- NSLog(@"[ptr_is_in_exe][%x]image_name : %s",i,image_name);
- NSLog(@"[ptr_is_in_exe][%x]header : %lx",i,(uintptr_t)header);
- NSLog(@"[ptr_is_in_exe][%x]offset : %ld",i,offset);
- NSLog(@"[ptr_is_in_exe][%x]vmaddr : %lu",i,vmaddr);
- cmd = (struct load_command*)((char*)cmd + cmd->cmdsize);
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement