GithubHelp home page GithubHelp logo

bnrhookaction's Introduction

BNRHookAction

  • 根据字典hook``OC方法,先执行您传入的block,再执行原函数,可用于无侵入式埋点;
  • 根据字典hook``OC方法,只会执行您传入的block,而不调用原函数,可用于修改函数的执行

注意事项

  • 不支持hook参数为结构体的函数
  • 不支持父类子类hook同一个函数
  • hook某类的某个方法,该类必须实现这个方法
  • arm64结构上,hook的函数参数个有限制,最多8个非浮点类型参数和8个浮点类型参数
  • 使用时,hook不成功的函数会打印出来,并列出原因

引入

pod 'BNRHookAction'

使用

该方法根据您传入的recordDic ,先调用block,再调用原函数

 [[BNRHookAction shareInstance] 	
 			setRecordDic:recordDic
                               
           andHookBlock:^(
           NSString *target, 
           NSString *action, 
           NSDictionary *handleDic,
           NSDictionary *params) {
                                       				NSLog(@"hook %@",action);
                                                              
                               }];

该方法根据您传入的recordDic,只调用block,不会再调用原函数

[[BNRHookAction shareInstance] 	
		setRecordDic:recordDic1 	
		andWithOutCallOriginFuncHookBlock:
		^void *(NSString *target, 
		NSString *action, 
		NSDictionary *handleDic, 
		NSDictionary *params) {
        if (...)
        {
			//根据block的参数,执行特定的代码,
			//原函数可能会有返回值,您可以在这里修改
			//原函数的返回值
        }
        return nil;
}];

参数说明

  • recordDic

      {"ClassName1":{
              "actionName1":{
                  "key1":"value1";
                  "key2":"value2"};
               "actionName2":{
               "key1":"value1";
               "key2":"value2"}
              };
      "ClassName2":{
               "actionName1":{
               "key1":"value1";
               "key2":"value2"};
               "actionName2":{
               "key1":"value1";
               "key2":"value2"}
               }
      		}
    

想要hook className下的actionName方法,className表示类名,actionName表示函数名,源码会根据这两个key值去hook。key1和value1,您可以自定义,比如做统计时,以eventId为key,在友盟或百度统计平台上自定义的事件Id为value,只要在传进来的block里面调用[MobClick event:value]发送统计数据到友盟,hook字典可以由后台下发。value也可以为block,调用您事先定义好的block

链接

x86_64``arm32``arm64传参分析

bnrhookaction's People

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.