c语言hook拦截函数参数,运行时Hook所有Block方法调用的技术实现

news/2024/12/29 16:57:03/

1.方法调用的几种Hook机制

iOS系统中一共有:C函数、Block、OC类方法三种形式的方法调用。Hook一个方法调用的目的一般是为了监控拦截或者统计一些系统的行为。Hook的机制有很多种,通常良好的Hook方法都是以AOP的形式来实现的。

当我们想Hook一个OC类的某些具体的方法时可以通过Method Swizzling技术来实现、当我们想Hook动态库中导出的某个C函数时可以通过修改导入函数地址表中的信息来实现(可以使用开源库fishhook来完成)、当我们想Hook所有OC类的方法时则可以通过替换objc_msgSend系列函数来实现。。。

那么对于Block方法呢而言呢?

2.Block的内部实现原理和实现机制简介

这里假定你对Block内部实现原理和运行机制有所了解,如果不了解则请参考文章《深入解构iOS的block闭包实现原理》或者自行通过搜索引擎搜索。

源程序中定义的每个Block在编译时都会转化为一个和OC类对象布局相似的对象,每个Block也存在着isa这个数据成员,根据isa指向的不同,Block分为__NSStackBlock、__NSMallocBlock、__NSGlobalBlock 三种类型。也就是说从某种程度上Block对象也是一种OC对象。下面的类图描述了Block类的层次结构。

0a3d00485c7f

Block类层次结构图

Block类以及其派生类在CoreFoundation.framework中被定义和实现,并且没有对外公开。

每个Block对象在内存中的布局,也就是Block对象的存储结构被定义如下(代码出自苹果开源出来的库实现libclosure中的文件Block_private.h):


http://www.ppmy.cn/news/445852.html

相关文章

纯JS写一个用苹果序列号查询生产信息的小工具

苹果手机是目前比较火或者说是一直很火的手机,但是和人一样,人火是非多,东西也是,所以我们买苹果手机的时候都喜欢查询一下是什么时间出的,什么地方出的,但是奈何还要看很多的资料,登录这里那里…

苹果CMS-v10系统标签

模板标签 本篇主要讲解v10自带系统标签和模板规范 模板目录 系统模板系统放在/template/目录下。在后台站点设置中,可以选择当前使用的模板 │─template/1/ 模板1│ ├─ads 广告文件目录│ ├─js js文件│ ├─css css文件│ ├─images 图片文件│ └─html 模板…

itools苹果录屏大师_怎么录屏苹果?学会这些录屏软件!以后都省的截图了

怎么录屏苹果?在使用苹果的产品时,你是否也遇到过需要录屏的场景?如果是的话你一般是用什么方式解决?相信很多的小伙伴都会使用系统自带的录屏软件,但是由于录屏占用的内存较大,或者录屏取法设置参数&#…

sp5.2 NLP

之前用词库然后一直one-hot表示单词 这样会使得算法泛化性不强 即使知道第一空怎么填了 第二个空还是不知道 因为从one-hot这种编码方式还是不知道橘子和苹果的关系 任何两个内积都是0 这些词向量距离都一样 换种方式表示词 词嵌入(Word Embedding)嵌入就…

FFmpeg--转码参数调整

H.264有四种画质级别,分别是baseline, extended, main, high: 1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;2、Extended profile:进阶画质。支持I/P/B/SP/SI …

关于苹果Xcode编译器与Bitcode

前言 做iOS开发的朋友们都知道,目前最新的Xcode7,新建项目默认就打开了bitcode设置.而且大部分开发者都被这个突如其来的bitcode功能给坑过导致项目编译失败,而这些因为bitcode而编译失败的的项目都有一个共同点,就是链接了第三方二进制的库或者框架,而这些框架或者库恰好没有…

苹果CMS漏洞

1.环境搭建: 最新版本好像修复了这个漏洞 后来看大佬们分析是加了360safe、把他注释掉就可以复现了 审计过程: 首先在maccms8_mfb\inc\module\vod.php文件中的第93-98行的代码当$methodsearch成立的时候便回进入到be(“all”, “wd”)获取请求中wd参数…

Joomla技术支持-SP Page Builder

简介 SP Page Builder是一个最灵活的页面构建工具。通过鼠标拖放即可完成Joomla的页面构建。你可以创造任何你想要的布局,不像模板那样,把你限制在预创的模板布局中。它可以用于构建独特的页面。它可以使用任何Joomla模板,无论是免费或收费。…