2015-01-03 19 views
7

Ich versuche, eine Funktion auf ptrace wie diese ptrace(PT_DENY_ATTACH, 0, 0, 0); aufrufen, aber wenn ich versuche, es mit #include <sys/ptrace.h> Xcode importiert, gibt mir einen Fehler 'sys/ptrace.h' file not found. Fehle ich etwas, muss ich eine Bibliothek importieren oder ist das bei iOS einfach nicht verfügbar?Ptrace auf iOS 8

+0

ich auch die gleiche problem.Did zugewandt Sie die Lösung finden? – SandeepAggarwal

+0

Noch nichts, leider. – imas145

Antwort

1

Dies scheint für mich arbeiten und wird verhindern, den Debugger anhängen. Ich habe die #ifdef OPTIMIZE nicht getestet, wenn es in der Verteilung funktioniert, so lassen Sie mich wissen, wenn Sie irgendwelche Probleme finden.

//#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 
+0

Der Code kompiliert, aber es funktioniert immer noch nicht wie erwartet (den Anhang eines Debuggers verweigern). Ich habe eine Single-View-iOS-Test-App erstellt und nur die main.m-Datei geändert. Wenn ich mich nicht völlig irre, sollte Xcode (oder irgendein Debugger) nicht daran anhängen können. Im Falle von Xcode sollte es nicht einmal starten. Aber die App läuft gut ... Um dies weiter zu testen, habe ich einen NSLog innerhalb der disable_gdb -Methode platziert, und es wurde nie gedruckt. Muss ich etwas tun, damit der #ifndef DEBUG funktioniert? – imas145

+0

Ja, ich setze DEBUG manuell in mein Projekt als Vorkompilierungsdefinition für DEBUG-Builds. Es gibt andere neuere Möglichkeiten (usinf DEBUG_BUILD = 1) oder __OPTIMIZE__, aber mein älterer Code ist. –

3

Das hier Problem ist, dass Xcode seinen SDK Basispfad für alle System-Header Pfade Voranstellen (zB /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9. 0.sdk/usr/include /). Leider ist ptrace.h nicht vorhanden, wird aber in/usr/include/sys/gefunden. Also, um diese zu lösen, müssen Sie Ihre Aussage zu sein, gehören ändern:

#include </usr/include/sys/ptrace.h> 

Ich habe keine Ahnung, warum ptrace.h nicht im SDK enthalten ist, aber die Funktionalität Sie suchen funktioniert, wenn es läuft am Telefon.

Update: Während dies Sie die ptrace Funktion zu nutzen, erlaubt, an Apple Hochladen in App Ablehnung führen durch:

Non-public API usage: 

The app references non-public symbols in <app name>: _ptrace