2011-02-14 14 views
1

Macカーネル拡張機能を逆コンパイルすることはできますか?Mac Kernel Extensionを逆コンパイルしますか?

+2

私はあなたはそれがMacのカーネル拡張の逆コンパイルを必要としているようだ何をしたいのか、より興味があります。 – OmnipotentEntity

+0

目的-Cではありません。 OS Xのカーネルモジュールは、C++のサブセットで書かれています。 –

+1

あなたはおそらく反対の解答を得るでしょうが、Cからの逆コンパイルは不可能です。 1対1のマッピングではなく、いくつかのツールがCコードであった可能性のあるプログラムを提供していると主張することはできません。実際のCコードを確実に再現するツールはありません。デバッガは、実行ファイルをリバースエンジニアリングするツールです。 –

答えて

2

理論上、バイナリコードを逆コンパイルすることは可能です。

a)C++であるため、バーチャルメソッドでコードを実行するのが難しくなります。 b)カーネル拡張ではリンクが異なるため、依存関係とシンボル名を見つけるためにカーネル拡張を扱うように特別に設計する必要があります。

+0

ken:kextloadはa)とb)を扱います。 – nielsbot

+0

興味深いです。リンクをありがとう。 –

+1

多くのkextsがまっすぐなCとオープンソースなので、それらは本当に簡単です。 (IOKit kextsはC++のサブセットを必要とします。)さらに、オープンソースのほぼすべてのシンボルを持つKDKを手に入れることができます。 – Barry

1

カーネル拡張のアセンブリコードを検査するために、gdb(nate c推奨)を使用することができます。カーネル拡張用のデコンパイラを特に認識していません。

kextloadツールを使用して、gdbにロードできるシンボルファイルを作成できます。関数のデコードされたシンボル名を表示させます。& c。ここにクラッシュがありますか?チュートリアル:http://praveenmatanam.wordpress.com/2008/05/22/kext-debugging-on-mac/

なぜこれをやりたいですか?

+0

なぜあなたは誰かの好奇心に疑問を抱くでしょうか?手直しする自由! – Barry

+0

私はもっと多分 "あなたにもっと良い答えを与えることができる"と思う。 – nielsbot

0

hexrays decompilerを使用して32ビットkextを逆コンパイルすることは問題ありません。

C++コードの逆コンパイルは、正しい方法で構造体を定義する必要があることを意味します。オブジェクトに仮想メソッドがある場合、オブジェクトの最初の項目はオブジェクトのvtableへのポインタになります。 vtableをIDAまたはhexraysに宣言し、関数ポインタのすべての型が正しいことを確認した場合、hexraysは非常に読みやすいコードを生成します。

あなたが興味を持っているkextの部分は、CのようなC++で書かれている可能性があります。そのことについてはまったく心配する必要はありません。

+0

32ビットのみの場合、idaデモには32ビットのみのデコンパイラが含まれている。 – Barry

0

64ビットkextsを逆順にするには、ida proとx64 Decompiler(mac/lin/winのいずれか)を取得します。

また、通常、lldbリモートセットアップを使用してkext(シンボルなし)をデバッグすることができます。 (gdbはなくなった)

大規模なセキュリティショップで働く場合は、NDAに署名し、最初に生まれた人に権利を与えて、OSXソースを入手するだけです。

また、ここでは逆コンパイラの大規模なリストです:

https://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers

関連する問題