iOS 8上的ptrace
我试图调用ptrace
上的函数,像这个ptrace(PT_DENY_ATTACH, 0, 0, 0);
但是当我尝试使用#include <sys/ptrace.h>
导入它时,Xcode给我一个错误'sys/ptrace.h' file not found
。 我错过了什么,我需要导入一个库吗?或者这只是在iOS上不可用?
这里的问题是Xcode将SDK基本路径预先添加到所有系统头文件路径(例如,/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/usr/include /)。 不幸的是,ptrace.h不存在,但可以在/ usr / include / sys /中找到。 所以,要解决这个问题,您需要将您的包含语句更改为:
#include </usr/include/sys/ptrace.h>
我不知道为什么ptrace.h没有包含在SDK中,但是当你在手机上运行时,你正在寻找的功能确实有效。
更新:虽然这确实允许您使用ptrace功能,但上传到Apple会导致应用程序拒绝,原因如下:
Non-public API usage:
The app references non-public symbols in <app name>: _ptrace
这似乎对我有用,并会阻止附加调试器。 我没有测试#ifdef OPTIMIZE,如果它在分发版中起作用,那么让我知道你是否发现任何问题。
//#include <sys/ptrace.h>
#import <dlfcn.h>
#import <sys/types.h>
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 // !defined(PT_DENY_ATTACH)
void disable_gdb() {
void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);
ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");
ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
dlclose(handle);
}
int main(int argc, char *argv[]) {
//#ifndef DEBUG => use the following instead.
#ifdef __OPTIMIZE__
//ptrace(PT_DENY_ATTACH, 0, 0, 0);
disable_gdb();
#endif
链接地址: http://www.djcxy.com/p/83033.html
上一篇: ptrace on iOS 8
下一篇: ALSA application to read and play a WAV file on Raspberry Pi