美文网首页
fishhook获取符号表地址的疑问

fishhook获取符号表地址的疑问

作者: flexih | 来源:发表于2019-09-25 16:57 被阅读0次

在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。

相关文章

网友评论

      本文标题:fishhook获取符号表地址的疑问

      本文链接:https://www.haomeiwen.com/subject/wbcwuctx.html