Rewrite dyldcache plugin

- still supports only 64-bit caches
- use MACH0_ functions
- parse symbols, sections and classes
- use R_DYLDCACHE_FILTER env variable to symbolicate only a subset of the cache
- rebase unslid caches on-the-fly, properly slide slid caches symbols
This commit is contained in:
mrmacete 2018-05-14 17:54:56 +02:00 committed by radare
parent 7be0af355d
commit a65bbfd32d
2 changed files with 1199 additions and 130 deletions

View File

@ -243,4 +243,50 @@ typedef struct {
uint32_t pad;
} cache_img_t;
typedef struct {
uint32_t version;
uint32_t page_size;
uint32_t page_starts_offset;
uint32_t page_starts_count;
uint32_t page_extras_offset;
uint32_t page_extras_count;
uint64_t delta_mask;
uint64_t value_add;
} cache_slide2_t;
typedef struct
{
uint32_t version;
uint32_t imageExtrasCount;
uint32_t imagesExtrasOffset;
uint32_t bottomUpListOffset;
uint32_t dylibTrieOffset;
uint32_t dylibTrieSize;
uint32_t initializersOffset;
uint32_t initializersCount;
uint32_t dofSectionsOffset;
uint32_t dofSectionsCount;
uint32_t reExportListOffset;
uint32_t reExportCount;
uint32_t depListOffset;
uint32_t depListCount;
uint32_t rangeTableOffset;
uint32_t rangeTableCount;
uint64_t dyldSectionAddr;
} cache_accel_t;
typedef struct
{
uint64_t exportsTrieAddr;
uint64_t weakBindingsAddr;
uint32_t exportsTrieSize;
uint32_t weakBindingsSize;
uint32_t dependentsStartArrayIndex;
uint32_t reExportsStartArrayIndex;
} cache_imgxtr_t;
#define DYLD_CACHE_SLIDE_PAGE_ATTRS 0xC000
#define DYLD_CACHE_SLIDE_PAGE_ATTR_EXTRA 0x8000
#define DYLD_CACHE_SLIDE_PAGE_ATTR_NO_REBASE 0x4000
#define DYLD_CACHE_SLIDE_PAGE_ATTR_END 0x8000
#endif

File diff suppressed because it is too large Load Diff