fishhook获取符号表地址的疑问

在Mach-O里保存着符号表,关于符号表的解释如下,具体可以参考#osx-abi-macho-file-format-reference,这里不多做解释。

在fishhook里用使用如下代码来获取符号表的地址:

  // Find base symbol/string table addresses
  uintptr_t linkedit_base = (uintptr_t)slide + linkedit_segment->vmaddr - linkedit_segment->fileoff;
  nlist_t *symtab = (nlist_t *)(linkedit_base + symtab_cmd->symoff);
  char *strtab = (char *)(linkedit_base + symtab_cmd->stroff);

不管是这里的注释还是网上的文章都称linkedit_base是一个“基址”,搜了很多资料也没提到这个“基址“的定义。个人认为这段代码应该这么理解:

  uintptr_t linkedit_base = (uintptr_t)slide + linkedit_segment->vmaddr;
  nlist_t *symtab = (nlist_t *)(linkedit_base + symtab_cmd->symoff - linkedit_segment->fileoff);
  char *strtab = (char *)(linkedit_base + symtab_cmd->stroff - linkedit_segment->fileoff);

代码这么写就容易理解了
符号表的地址=符号表文件偏移-LINKEDIT.文件偏移+LINKEDIT.vmaddr+slide。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 两个人一起把曾经小心呵护的感情磨成了牛仔裤上的破洞无疑是一种悲哀。 而更悲哀在于面对千疮百孔和一方的心生退意,才察...
    AgnesC阅读 199评论 0 0
  • 作者:苏畅 8岁 妈妈的爱,像草原,我是小羊, 我再怎么跑也跑不到边。 妈妈的爱,像蓝天,我是小鸟,...
    苏益民阅读 7,064评论 0 2
  • 《危机领导力》 十大策略 策略1:让团队成为明星 成功的团队建立在一个信念之上,这个信念就是只有一个明星,这个明星...
    林柳富阅读 3,483评论 0 0
  • 都说男追女隔座山,女追男隔层纱,但夏洛觉得这层纱怎么质量这么好、这么结实呢,怎么都捅不破。夏洛和董天是大学同班同学...
    寂寞星球的小玫瑰阅读 218评论 0 0