#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <dlfcn.h>
//定义一个函数指针用来接收动态加载出来的函数ptrace
typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if !defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif
void disable_lldb() {
#if defined(DEBUG) ||defined(_DEBUG)
#else
//动态加载并链接指定的库
void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
//动态加载ptrace函数,ptrace函数的参数个数和类型,及返回类型跟 ptrace_ptr_t函数指针定义的是一样的
ptrace_ptr_t ptrace_ptr = (ptrace_ptr_t)dlsym(handle, "ptrace");
//执行ptrace_ptr相当于执行ptrace函数
ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
#endif
}
int main(int argc, char * argv[]) {
disable_lldb();
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
网友评论