美文网首页
iOS安全–使用static inline方式编译函数,防止静

iOS安全–使用static inline方式编译函数,防止静

作者: Scott丶Wang | 来源:发表于2016-07-14 17:18 被阅读270次

    我们知道一般的函数调用都会通过call的方式来调用,hacker很容易对一个函数做手脚,如果是以inline的方式编译的,会把该函数的code拷贝到每次调用该函数的地方;而static会让生成的二进制文件中没有清晰的符号表,让逆向的人很难弄清楚逻辑

    static int isValidate(int id) __attribute__ ((always_inline));
    static inline int isValidate(int id);
    

    定义:有函数的结构,但不具备函数的性质,类似于宏替换。代码中使用inline定义,能否形成内联函数,还要看编译器对内联函数体内部的定义的具体处理
    1.使用inline
    修饰的函数,在编译的时候,会把代码直接嵌入调用代码中。就相当于用#define 宏定义来定义一个add 函数那样!与#define的区别是:
    1)#define定义的格式要有要求,而使用inline则就行平常写函数那样,只要加上inline即可!
    2)使用#define宏定义的代码,编译器不会对其进行参数有效性检查,仅仅只是对符号表进行替换。
    3#define宏定义的代码,其返回值不能被强制转换成可转换的适合的转换类型。
    2.在inline加上static修饰符
    只是为了表明该函数只在该文件中可见!也就是说,在同一个工程中,就算在其他文件中也出现同名、同参数的函数也不会引起函数重复定义的错误
    注意点:
    1.查看main.m的汇编文件:
    选中main.m文件-->Xcode 菜单 --> Product --> Perform Action --> Assemble "main.m"
    2.不能使用循环语句;不能使用开关语句;不能使用递归调用;定义在第一次调用之前

    相关文章

      网友评论

          本文标题: iOS安全–使用static inline方式编译函数,防止静

          本文链接:https://www.haomeiwen.com/subject/usnejttx.html