2015-01-03 28 views
7

Tôi đang cố gắng gọi một hàm trên ptrace như thế này ptrace(PT_DENY_ATTACH, 0, 0, 0); Nhưng khi tôi cố gắng nhập nó bằng cách sử dụng #include <sys/ptrace.h> Xcode cho tôi một lỗi 'sys/ptrace.h' file not found. Tôi có thiếu cái gì không, tôi có cần phải nhập một thư viện hoặc điều này chỉ đơn giản là không có trên iOS?ptrace trên iOS 8

+0

Tôi cũng phải đối mặt với problem.Did cùng bạn tìm ra giải pháp? – SandeepAggarwal

+0

Không có gì, thật không may. – imas145

Trả lời

1

Điều này dường như đang hoạt động đối với tôi và sẽ ngăn việc đính kèm trình gỡ rối. Tôi chưa thử nghiệm #ifdef OPTIMIZE nếu nó hoạt động trong phân phối, vì vậy hãy cho tôi biết nếu bạn tìm thấy bất kỳ sự cố nào.

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

Mã biên dịch, nhưng nó vẫn không hoạt động như mong đợi (từ chối phần đính kèm của trình gỡ lỗi). Tôi đã tạo một ứng dụng thử nghiệm iOS một lần xem và chỉ sửa đổi tệp main.m. Nếu tôi không hoàn toàn nhầm lẫn, Xcode (hoặc bất kỳ trình sửa lỗi) nào không thể đính kèm vào nó. Trong trường hợp của Xcode, nó thậm chí không nên khởi động. Nhưng ứng dụng chạy tốt ... Để kiểm tra kỹ hơn, tôi đã đặt một phương thức disable trong NSLog bên trong disable_gdb và nó chưa bao giờ được in. Có điều gì tôi cần làm để làm cho #ifndef DEBUG hoạt động không? – imas145

+0

Có, tôi tự đặt DEBUG vào dự án của tôi dưới dạng định nghĩa biên dịch sẵn cho các bản dựng DEBUG. Có các cách mới hơn khác (usinf DEBUG_BUILD = 1) hoặc __OPTIMIZE__, nhưng tôi là mã cũ hơn. –

3

Vấn đề ở đây là Xcode được thêm vào trước đường đi của nó cơ bản SDK cho tất cả các đường dẫn hệ thống tiêu đề (ví dụ, /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9. 0.sdk/usr/include /). Thật không may, ptrace.h không có nhưng được tìm thấy trong/usr/include/sys /. Vì vậy, để giải quyết việc này, bạn cần phải thay đổi bao gồm bạn tuyên bố là:

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

Tôi không có ý tưởng tại sao ptrace.h không được bao gồm trong SDK nhưng các chức năng bạn đang tìm kiếm làm việc khi nó đang chạy trên điện thoại.

Cập nhật: Trong khi điều này không cho phép bạn sử dụng chức năng ptrace, tải lên Apple sẽ dẫn đến ứng dụng từ chối do:

Non-public API usage: 

The app references non-public symbols in <app name>: _ptrace 
Các vấn đề liên quan