Tanner Jin


  • 首页

  • 标签

  • 分类

  • 归档

iOS内存-堆(libmalloc)-scalable_zone

发表于 2019-12-16 | 分类于 内存

scalable_zone是zone其中一种类型, 分配堆内存管理者,malloc,free等函数真正的入口

阅读全文 »

iOS内存-堆(libmalloc)-简介

发表于 2019-12-16 | 分类于 内存

堆

进程的虚拟内存是由多个内存区域组成的,不同的内存区域拥有不同的权限(r/w/e)
进程中每个内存区域的分配,释放都得经过内核系统调用(内核需要记录内存区域的信息, 内存区域由一个或多个页组成,进程以页的单位被内核记录在案,记录物理内存的映射关系,即页表)

阅读全文 »

iOS内存-栈

发表于 2019-12-16 | 分类于 内存

栈

初始化

线程是系统执行的最小单元,每个线程对象初始化时都会分配自己的栈空间储存函数执行过程中传递的参数和产生的变量 (当然上下文切换时,线程对象还会储存每个寄存器的值)

线程栈最关键的两个寄存器就是rbp和rsp(arm对应fp和sp),栈的特点,数据从高地址向低地址填充(push入栈)

阅读全文 »

iOS内存-目录

发表于 2019-12-16 | 分类于 内存

iOS内存系列目录

阅读全文 »

逆向学习小结

发表于 2019-12-05 | 分类于 逆向

根据《逆向工程核心原理》大致目录总结下自学iOS逆向工程所掌握的知识

阅读全文 »

SRouter

发表于 2019-11-04 | 分类于 iOS

SRouter是为了解决模块和模块间的引用,根据符号导出(Symbol Export)实现的一个路由方案

阅读全文 »

AntiHook

发表于 2019-09-25 | 分类于 逆向 , 安全

AntiFishHook

antiFishHook 是我今年早些写的一个反fishhook的一个反hook工具
根据mach-o的符号动态链接原理,让non-lazy/lazy symbol 指针重新指向对应的symbol stub代码位置,起到在runtime的反hook

阅读全文 »

工作一年杂谈

发表于 2019-06-23 | 分类于 虾扯

去年毕业到现在刚好工作一年了(离我第一篇博客刚好也一年时间了),聊一些之后学习的方向吧

阅读全文 »

coswift原理分析

发表于 2019-03-04 | 分类于 线程

最近看同事朋友圈说阿里开源了一个协程框架,没听过协程的我一脸懵逼,但对于demo中的await实现的效果非常好奇。我就看了下协程的源码(主要是协程的await实现原理)。

阅读全文 »

Swift方法调用

发表于 2019-01-06 | 分类于 Swift

参考链接

阅读本文前,可以先参考Swift内存布局

本文基于Swift4.2, Xcode10.0

必看:本例的函数指针的替换千万别用在正式项目中,只是用来验证方法的调用方式,具体函数指针在数据结构内存(Vtable和witness_table)的偏移值会在不同的编译器或者语言版本而有不同

编译型程序的方法调用有三种方式,第一种是直接派发(静态调度),运行时寄存器通过call指令直接跳转至代码的具体实现地址。第二种通过虚函数表的方式,通过计算出函数指针在虚函数表中偏移量,得到函数指针,在通过call指令跳转到函数指针指向的内存地址,执行函数。第三种是动态调度,在Objective-C或者Swift(部分方法调用)中通过call objc_msgSend实现消息机制,在执行objc _ msgSend方法时,找到参数类对象(objc_ class)中method__list真正函数实现的指针(IMP),在跳转至函数指针指向的内存执行具体的函数,当然没找到函数指针,会去父类中找,最后在NSObject类对象中没有找到函数指针,还会进行消息转发。(其实第二种和第三种可以合并为动态派发)

阅读全文 »
12
Tanner Jin

Tanner Jin

尘世间一迷途小码农

19 日志
8 分类
GitHub Weibo
© 2020 Tanner Jin
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4