我正在尝试从 Dyld_shared_cache 中提取库,并且需要修复外部引用。
例如,中的指针__DATA.__objc_selrefs
部分通常指向 mach-o 文件外部的数据,为了解决这个问题,我必须从 dyld 复制相应的 c 字符串并将其附加到__TEXT.__objc_methname
部分。
虽然根据我对 Mach-O 文件格式的理解,这个扩展名__TEXT.__objc_methname
会移动它后面的所有部分,并迫使我修复引用它们的所有偏移量和指针。有没有一种方法可以在不破坏很多东西的情况下将数据添加到一个部分?
Thanks!
感谢@Kamil.S 关于添加新加载命令和部分的想法。
向节添加更多数据的一种方法是创建重复的段和节并将其插入到 __LINKEDIT 段之前。
- Slide the __LINKEDIT segment so we have space to add the new section.
- 定义滑动量,这个必须是页面对齐的,所以我选择0x4000。
- add the slide amount to the relevant load commands, this includes but is not limited to:
- __LINKEDIT 段(废话)
- dyld_info_命令
- 符号表命令
- dysymtab_命令
- linkedit_数据_命令
- 物理移动文件中的 __LINKEDIT。
- duplicate the section and change the following1
- size,应该是新数据的长度。
- addr,应该在空闲空间中。
- 偏移量,应该在可用空间中。
- duplicate the segment and change the following1
- fileoff,应该是可用空间的开始。
- vmaddr,应该是可用空间的开始。
- 文件大小,任何东西,只要它比你的数据大。
- vmsize,必须与文件大小相同。
- 昆虫,进行更改以反映您添加的部分数量。
- cmdsize,更改以反映段命令及其节命令的大小。
- 在 __LINKEDIT 段之前插入重复的段和节
- update the mach_header
- 将额外数据物理写入文件中。
- 您可以选择更改 segname 和 sectname 字段,但这不是必需的。谢谢卡米尔!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)