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