Giter Club home page Giter Club logo

blockhook's Introduction

来啦老铁 👋

  • 🔭 I’m currently working on DartNative
  • 🌱 I’m currently learning iOS
  • 🎮 I'm currently playing Wiedźmin 3: Dziki Gon
  • 📫 How to reach me: [email protected]

blockhook's People

Contributors

codacy-badger avatar yulingtianxia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blockhook's Issues

有个问题请教一下,谢谢

我的需求是hook UIAlertAction里的点击block回调,用BlockHook的过程中碰到了self.block提前被释放,导致crash。我不知道是因为UIAlertController被释放的原因还是其他的原因.

刚使用,有个问题请教一下~为什么我这边打印是这样的,跟文档对比少了一句调用

2020-08-11 11:51:17.776563+0800 CJJFramework[4984:91100] hooked block
2020-08-11 11:51:17.776813+0800 CJJFramework[4984:91100] hook before block! invocation:<BHInvocation: 0x600002853a30>
2020-08-11 11:51:17.776960+0800 CJJFramework[4984:91100] 3 + 5 = 8, z is a NSObject: <NSObject: 0x60000017ca30>
2020-08-11 11:51:17.777070+0800 CJJFramework[4984:91100] let me see original result: 0
2020-08-11 11:51:17.777185+0800 CJJFramework[4984:91100] hook instead: '+' -> '*'
2020-08-11 11:51:17.777286+0800 CJJFramework[4984:91100] hook after block! 3 * 5 = 15
2020-08-11 11:51:17.777390+0800 CJJFramework[4984:91100] hooked result:15
2020-08-11 11:51:17.777496+0800 CJJFramework[4984:91100] remove tokens, original block
2020-08-11 11:51:17.777599+0800 CJJFramework[4984:91100] 3 + 5 = 8, z is a NSObject: <NSObject: 0x60000017ca30>
2020-08-11 11:51:17.777791+0800 CJJFramework[4984:91100] original result:8
2020-08-11 11:51:17.778207+0800 CJJFramework[4984:91100] block dead! token:<BHToken: 0x60000315a490>


少了这一句hook after block! 3 * 5 = 8

Archive fail in Xcode12.1

Xcode alert following error when archive:
bitcode bundle could not be generated because '.../Pods/BlockHook/libffi/libffi_bh.a(ffi_arm.o)' was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture armv7

BHFFIClosureFunc

现在 我需要hook网络接口返回的block,发现 如果是 NSMallocBlock 捕获到里面BHFFIClosureFunc 不走 不知道为啥?

关于Global类型Block会奔溃问题

代码如下:

- (void)blockHookTest {
 
    int (^block)(int, int) = ^int(int x, int y) {
       int result = x + y;
       NSLog(@"%d + %d = %d", x, y, result);
       return result;
    };
        
    BHToken *tokenBefore = [block block_hookWithMode:BlockHookModeBefore usingBlock:^(BHInvocation *invocation, int x, int y){
        NSLog(@"hook block before");
    }];
    
    block(3, 5);
    
    [tokenBefore remove];
}

运行后,会导致此处奔溃:
image
若block修改为Malloc类型的话,就能正常hook。

麻烦解答一下这个问题,感谢~

ffi_call_int 概率crash

void xm_dispatch_async(dispatch_queue_t queue, dispatch_block_t block) {

if (__enable) {
    
    dispatch_block_t chgBlock = block;
    if ([block isKindOfClass:NSClassFromString(@"__NSStackBlock")]) {
        chgBlock = [block copy];
    }
    
    [chgBlock block_hookWithMode:BlockHookModeInstead
                      usingBlock:^(BHToken *token){
                              
                              double begin = [[NSDate date] timeIntervalSince1970];
                              [token invokeOriginalBlock];
                              double end = [[NSDate date] timeIntervalSince1970];
                              //[token remove];
                              
                              [[XMAPMCPUMonitor monitor] setThread:[NSThread currentThread]
                                                        beginStamp:begin
                                                          endStamp:end];
                              
                          }];
}

orig_dispatch_async(queue, block);

}

hook掉 gcd创建方法,在hook block中调用之前的blok会有一定概率crash

0 0x0000000105400a38 ffi_call_int + 276
1 0x00000001040d886c -[BHToken invokeOriginalBlock] + 180
2 0x00000001040d886c -[BHToken invokeOriginalBlock] + 180
3 0x000000010442dc78 __xm_dispatch_async_block_invoke + 160

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.