Próbuję wywołać funkcję na ptrace
jak ten ptrace(PT_DENY_ATTACH, 0, 0, 0);
Ale kiedy próbuję zaimportować go przy użyciu #include <sys/ptrace.h>
Xcode daje mi błąd 'sys/ptrace.h' file not found
. Czy brakuje mi czegoś, czy muszę zaimportować bibliotekę, czy jest to po prostu niedostępne w systemie iOS?ptrace na iOS 8
Odpowiedz
Wydaje się, że działa to dla mnie i uniemożliwi dołączenie debuggera. Nie przetestowałem #ifdef OPTIMIZE, jeśli działa w dystrybucji, więc daj mi znać, jeśli znajdziesz jakieś problemy.
//#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
Kod się kompiluje, ale nadal nie działa zgodnie z oczekiwaniami (odmawiaj załączenia debuggera). Stworzyłem aplikację testową dla systemu iOS z pojedynczym widokiem i zmodyfikowałem tylko plik main.m. Jeśli się nie mylę, Xcode (lub dowolny debugger) nie będzie mógł się do niego podłączyć. W przypadku Xcode nie powinno się nawet uruchamiać. Ale aplikacja działa dobrze ... Aby dodatkowo przetestować to, umieściłem NSLog wewnątrz metody disable_gdb i nigdy nie został wydrukowany. Czy jest coś, co muszę zrobić, aby #ifndef DEBUG działało? – imas145
Tak, ręcznie umieszczam DEBUG w moim projekcie jako definicję prekompilacji dla buildów DEBUG. Istnieją inne nowsze sposoby (usinf DEBUG_BUILD = 1) lub __OPTIMIZE__, ale mój jest starszym kodem. –
Problem polega na tym, że Xcode jest poprzedzenie jej ścieżkę bazową SDK do wszystkich ścieżek nagłówka systemu (np /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9. 0.sdk/usr/include /). Niestety, ptrace.h nie istnieje, ale znajduje się w/usr/include/sys /. Tak więc, aby rozwiązać ten problem, należy zmienić to oświadczenie będzie:
#include </usr/include/sys/ptrace.h>
nie mam pojęcia dlaczego ptrace.h nie jest zawarte w SDK ale funkcjonalność, której szukasz nie działa, gdy jest uruchomiony na telefonie.
Aktualizacja: Chociaż nie pozwala na korzystanie z funkcji ptrace, przesyłając do Apple App spowoduje odrzucenie ze względu na:
Non-public API usage:
The app references non-public symbols in <app name>: _ptrace
- 1. ptrace i wątki
- 2. Udostępnianie wideo na Facebooku na iOS 8
- 3. GDB strace pokazuje próbuje ptrace na nieprawidłowy adres
- 4. EXC_BAD_ACCESS tylko na xcode 8 z systemem iOS 8
- 5. Pobierz rozmiar ekranu na iOS 8
- 6. Zapisywanie dokumentów iOS 8 na dysku iCloud
- 7. iOS 8 UIImagePickerController zawiesza się na Zoom
- 8. iTunesMetadata.plist lokalizacja na systemów iOS 8
- 9. iOS 8 NSInternalInconsistencyException
- 10. Korzystanie z ptrace z aplikacji wielowątkowych
- 11. Kod iOS Działa na iOS 9, ale nie na iOS 8?
- 12. Uniwersalny link w iOS 8?
- 13. Przekierowanie wejścia iOS Safari 8
- 14. Osłona okładki albumu iOS 8
- 15. klienta w iOS 8 - Swift
- 16. setHTTPBody w iOS 8 + Swift
- 17. iOS 8 GPS nie włączone
- 18. systemów iOS 8 Simulator kliencka
- 19. Wykryj wklejanie sugestii iOS 8
- 20. iOS 8 Kolor pola tekstowego
- 21. iOS 8 wideo youtube osadzić
- 22. Jak zapobiegać obracaniu się alertów na zmianie orientacji IOS 8
- 23. Jak wyliczyć wszystkie zdjęcia na iOS 8 przy użyciu ALAssetsLibrary
- 24. xcode - Informacje MPNowPlayingInfoCenter nie są wyświetlane na iOS 8
- 25. iOS 8 uruchom aplikację na zawsze lub wyłącz ekran
- 26. UITextView inputAccessoryView nakłada się na klawiaturę w systemie iOS 8
- 27. iOS 8 - Zastosuj rozmycie na pasku nawigacji ORAZ pasek stanu
- 28. Problemy z UIDatePicker w popover na iOS 8
- 29. Dodawanie wariantu kompilacji i uruchamianie go na iOS 8
- 30. NSURLConnectionDelegate willSendRequestForAuthenticationChallenge nie zostanie wywołany na iOS 8
Jestem również stoi w tym samym problem.Did najlepsze rozwiązanie? – SandeepAggarwal
Nic, niestety, niestety. – imas145