1/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- 2 * 3 * Copyright (c) 2009-2012 Apple Inc. All rights reserved. 4 * 5 * @APPLE_LICENSE_HEADER_START@ 6 * 7 * This file contains Original Code and/or Modifications of Original Code 8 * as defined in and that are subject to the Apple Public Source License 9 * Version 2.0 (the 'License'). You may not use this file except in 10 * compliance with the License. Please obtain a copy of the License at 11 * http://www.opensource.apple.com/apsl/ and read it before using this 12 * file. 13 * 14 * The Original Code and all software distributed under the License are 15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 19 * Please see the License for the specific language governing rights and 20 * limitations under the License. 21 * 22 * @APPLE_LICENSE_HEADER_END@ 23 */ 24 25#include <stdint.h> 26#include <uuid/uuid.h> 27 28struct dyld_shared_cache_dylib_info { 29 uint32_t version; // initial version 1 30 uint32_t isAlias; // this is alternate path (symlink) 31 const void* machHeader; // of dylib in mapped cached file 32 const char* path; // of dylib 33 const uuid_t* uuid; // of dylib, or NULL is missing 34 // above fields all exist in version 1 35}; 36typedef struct dyld_shared_cache_dylib_info dyld_shared_cache_dylib_info; 37 38struct dyld_shared_cache_segment_info { 39 uint64_t version; // initial version 1 40 const char* name; // of segment 41 uint64_t fileOffset; // of segment in cache file 42 uint64_t fileSize; // of segment 43 uint64_t address; // of segment when cache mapped with ASLR (sliding) off 44 // above fields all exist in version 1 45}; 46typedef struct dyld_shared_cache_segment_info dyld_shared_cache_segment_info; 47 48 49#ifdef __cplusplus 50extern "C" { 51#endif 52 53 54// Given a pointer and size of an in-memory copy of a dyld shared cache file, 55// this routine will call the callback block once for each segment in each dylib 56// in the shared cache file. 57// Returns -1 if there was an error, otherwise 0. 58extern int dyld_shared_cache_iterate(const void* shared_cache_file, uint32_t shared_cache_size, 59 void (^callback)(const dyld_shared_cache_dylib_info* dylibInfo, const dyld_shared_cache_segment_info* segInfo)); 60 61 62 63// 64// The following iterator functions are deprecated: 65// 66typedef void (^dyld_shared_cache_iterator_t)(const char* dylibName, const char* segName, uint64_t offset, uint64_t size, uint64_t mappedddress); 67typedef void (^dyld_shared_cache_iterator_slide_t)(const char* dylibName, const char* segName, uint64_t offset, uint64_t size, uint64_t mappedddress, uint64_t slide); 68typedef void (*dyld_shared_cache_iterator_nb_t)(const char* dylibName, const char* segName, uint64_t offset, uint64_t sizem, uint64_t mappedddress, void* userData); 69typedef void (*dyld_shared_cache_iterator_slide_nb_t)(const char* dylibName, const char* segName, uint64_t offset, uint64_t sizem, uint64_t mappedddress, uint64_t slide, void* userData); 70 71extern int dyld_shared_cache_iterate_segments(const void* shared_cache_file, dyld_shared_cache_iterator_t callback) __attribute__((deprecated)); 72extern int dyld_shared_cache_iterate_segments_with_slide(const void* shared_cache_file, dyld_shared_cache_iterator_slide_t callback) __attribute__((deprecated)); 73extern int dyld_shared_cache_iterate_segments_nb(const void* shared_cache_file, dyld_shared_cache_iterator_nb_t callback, void* userData) __attribute__((deprecated)); 74extern int dyld_shared_cache_iterate_segments_with_slide_nb(const void* shared_cache_file, dyld_shared_cache_iterator_slide_nb_t callback, void* userData) __attribute__((deprecated)); 75 76 77#ifdef __cplusplus 78} 79#endif 80