美文网首页
用FishHook了解Mach-O

用FishHook了解Mach-O

作者: 小马过海 | 来源:发表于2018-01-30 14:40 被阅读0次

最近发现,调试 FishHook 是加深对Mach-O理解的一个好方法。一边调试程序Demo,一边将执行文件在Mach-View中对照查看,相互辅助,相互印证。这样就很容易理解符号、字符串在其中的组织了。

打开Mach-O文件, 我们可以发现__Data段有section列表。section列表有_bss、_data、_const、_nl_symbol_ptr、_la_symbol_ptr等等等等。 section 中的addr指向的是符号们(函数名、变量名等)链接后的虚拟内存地址起始地址。

数组中(地址指针)的顺序与对应section中动态符号表的顺序一一对应。动态符号表中存储着在符号表中的索引值。 符号表的每一项为nlist_64这样一个结构体,该结构体的n_strx存储的则是字符串表中的索引index。

FishHook用上述的关联找出一个符号在虚拟内存中指针的位置,将该指针替换为我们实现的函数的指针。也就轻易实现了偷梁换柱替换各种函数方法了

最后贴上官方图


调用阶段,call会跳转到Text stub,stub只有一条指令即跳转到指定的指针位置,指针位置由类似*$0x3f(%rip)偏移方式给出,该地址会跳转到相应Text stub_helper处理,stub_help会push这个符号在Dynamic Loader Info下Lay Binding Info里所处的字节位置进栈,然后跳转到stub_help起始处调用stuber_binder找到符号,并根据Lay Binding Info提供的segment、offset找到要覆写的符号指针地址,这就是整个动态符号调用全过程了。仍有一点疑问的是Lay Binding Info下的字符串,为什么不用String Table里的字符串

更多详细:
http://blog.tingyun.com/web/article/detail/1347
https://stackoverflow.com/questions/8825537/mach-o-symbol-stubs-ios/8836580#8836580

相关文章

  • 用FishHook了解Mach-O

    最近发现,调试 FishHook 是加深对Mach-O理解的一个好方法。一边调试程序Demo,一边将执行文件在Ma...

  • 趣探 Mach-O:FishHook 解析

    这是Mach-O系列的第三篇 阅读 FishHook源码之前,你可能需要对以下知识有个简单的了解 Mach-O文件...

  • Mach-O

    开头 研究Mach-O结构有段时间,尝试了解Mach-O结构体对fishhook实现原理的理解有帮助,看了很多分析...

  • fishHook原理

    fishHook fishHook是Facebook提供的一个动态修改链接mach-O文件的工具。利用MachO文...

  • iOS中的HOOK技术

    一、fishhook 1、介绍 fishhook是facebook出品的一个开源库。利用mach-o文件加载原理,...

  • fishhook 源码分析

    引用 Mac OS X ABI Mach-O File Format Reference 前言 fishhook ...

  • fishhook 的简单使用体验

    fishhook 是 FaceBook 提供的一个动态修改链接 mach-O 文件的工具.利用 mach-O 文件...

  • fishhook学习

    什么是fishhook? fishhook是facebook提供的一个动态修改链接Mach-O符号表的开源工具 什...

  • Fishhook

    什么是fishhook fishhook是facebook提供的一个动态修改链接Mach-O符号表的开源工具。 什...

  • fishHook简单使用

    fishHook是Facebook提供的一个动态修改连接Mach-O文件的工具。利用Mach-O文件的加载原理,通...

网友评论

      本文标题:用FishHook了解Mach-O

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