软件测试之SDK开发(ios)——一种在iOS上利用C语言弱符号__attribute__ ((weak))进行hook的方法

因为ios中的系统C函数符号是利用懒加载的方式进行绑定,所以可以利用C语言弱符号__attribute__ ((weak))进行hook。自己试验过程中发现通过这种方式的hook和fishhook的效果一样

1、弱符号是什么?

参考文章弱符号__attribute__((weak))

若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号

2、通过弱符号hook malloc

hook代码很简单,如下所示

#define likely_if(x) if(__builtin_expect(x,1))
#define unlikely_if(x) if(__builtin_expect(x,0))
typedef void* (*malloc_type)(size_t);
extern "C"
{
    void *malloc(size_t __size) __attribute__ ((weak));

    void *malloc(size_t __size)
    {

        static malloc_type orig_malloc = NULL;
        unlikely_if(orig_malloc == NULL)
        {
            orig_malloc = (malloc_type) dlsym(RTLD_NEXT, "malloc");
        }
        void *ptr = orig_malloc(__size);
        return ptr ;
    }
}

在测试demo和hook代码里分别打上断点,如果两个指针是指向同一个地址,表示hook成功。如下所示:
在这里插入图片描述
在这里插入图片描述
运行代码,跳到我们的hook代码里面,如下图所示:
在这里插入图片描述
可以看到ptr地址是0x2806677f0

继续运行代码,代码进入到我们的测试代码,如下图所示
在这里插入图片描述
返回的指针也是0x2806677f0,表示malloc hook成功。

参考文章

1、https://cloud.tencent.com/developer/article/1156898

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值