zoukankan      html  css  js  c++  java
  • OC_block_0x01

    block是包含自变量的匿名函数

    0x01.无参数block

    int main ()

    {

      void (^blk)(void) = ^{printf("Block ");}

      blk();

      return 0;

    }

    clang -rewrite-objec oc的m文件

    struct __block_impl {

      void *isa;

      int Flags;

      int Reserved;

      void *FuncPtr;

    }

    struct __main_block_impl_0 {

      struct __block_impl impl;

      struct __main_block_desc_0 *Desc;

      __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags = 0) {

        impl.isa = &_NSConcreteStackBlock;

        impl.Flags = flags;

        impl.FuncPtr = fp;

        Desc = desc;

      }

    }

    static struct __main_block_func_0 (struct __main_block_impl_0 *__cself) {

      printf("Block ");

    }

    static struct __main_block_desc_0 {

      size_t reserved;

      size_t Block_size;

    } __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)};

    int main ()

    {

      void (*blk)(void) = ((void(*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA));

      ((void(*)(__block_impl *))((__block_impl *)blk)->FuncPtr)((__block_impl *)blk);

      return 0;

    }

  • 相关阅读:
    [国家集训队] Crash 的文明世界
    [国家集训队] middle
    [正睿集训2021] 构造专练
    [正睿集训2021] LIS
    CF482E ELCA
    UVA
    UVA
    UVA
    UVA
    UVA
  • 原文地址:https://www.cnblogs.com/fkunlam/p/4906268.html
Copyright © 2011-2022 走看看