2015-01-03 9 views
7

ptraceのような関数を呼び出すようにしています。ptrace(PT_DENY_ATTACH, 0, 0, 0); #include <sys/ptrace.h>を使用してインポートしようとすると、エラーコード'sys/ptrace.h' file not foundが返されます。何か不足していますか、ライブラリをインポートする必要がありますか、これは単にiOSで利用できませんか?iOS 8のptrace

+0

? – SandeepAggarwal

+0

残念ながら、まだ何もありません。 – imas145

答えて

1

これは私のために働いていると思われ、デバッガの接続を妨げます。 #ifdef オプティマイズが配信中であればテストしていませんので、問題が見つかった場合はお知らせください。

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

コードはコンパイルされますが、期待どおりに動作しません(デバッガの添付ファイルを拒否します)。私は単一ビューのiOSテストアプリを作成し、main.mファイルのみを変更しました。私が完全に間違っていないと、Xcode(または任意のデバッガ)はそれに接続できません。 Xcodeの場合は、起動してはいけません。しかし、アプリケーションは正常に動作します...これをさらにテストするために、私はdisable_gdbメソッドの中にNSLogを配置しましたが、決して印刷されませんでした。 #ifndef DEBUGの作業をするために必要なことはありますか? – imas145

+0

はい、DEBUGビルドのプリコンパイル定義としてプロジェクトにDEBUGを手動で配置しています。新しい方法(usinf DEBUG_BUILD = 1)または__OPTIMIZE__がありますが、私は古いコードです。 –

3

ここでの問題は、Xcodeのすべてのシステム・ヘッダ・パスに対するSDKベースパス(例えば、/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9を付加されることです。 0.sdk/usr/include /)。残念ながら、ptrace.hは存在しませんが、/ usr/include/sys /にあります。それが実行しているとき、私はptrace.hはSDKに含まれていない理由はわかりませんが、あなたが探している機能が動作しない

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

:だから、これを解決するために、あなたはあなたのように文を含める変更する必要があります電話で。

更新:これは、Appleへのアップロード、あなたはptraceの機能を使用することができない間に起因して、アプリ拒否になります:私はまた、あなたが解決策を見つけると同じproblem.Didに直面しています

Non-public API usage: 

The app references non-public symbols in <app name>: _ptrace 
関連する問題