2016-07-13 12 views
1

私は金魚のカーネルをコンパイル:Androidネイティブコードをカーネルにデバッグするにはどうすればよいですか?

[ ] Optimize for size, 
[*] Kernel hacking 
    [*] Compile the kernel with debug info 
    [*] KGDB: kernel debugging with remote gdb —>  
    [*] Enable dynamic printk() call support 

私がコンパイルしたカーネルでAVDを開始しました。

emulator -kernel goldfish/arch/arm/boot/zImage -avd TestAVD

IはAVDにコンパイルされたCプログラムを押し込みます。

そして私はLIBS(私はそれが適切な方法かどうか分からない)

adb pull /system/lib ./debuginfo/lib 
adb pull /system/bin/linker ./debuginfo/lib 

実行gdbserverをダウンロード:

gdbserver 127.0.0.1:7777 ./a 
前方

ポート:

adb forward tcp:7777 tcp:7777 

実行GDBを

gdb-multiarch ./a 

検索ディレクトリを指定します。

set solib-search-path ./debuginfo/lib 

は、私は近く、例えば、でbreakedデバイス

target remote :7777 

に接続します。

0xaf0ae228 in close() from /home/wuyihao/android_sec/debuginfo/lib/libc.so 
1: x/i $pc 
=> 0xaf0ae228 <close+8>:  svc  0x00000000 
(gdb) list 
No symbol table is loaded. Use the "file" command. 

私はソースを取得します。 変数CFLAG = " - g"でカーネルを再コンパイルしようとしました

何も変わりません。

ありがとうございました!

ps:ダウンロードしたライブラリがすべて削除されていることに気づきました。

答えて

1

libc.soはLinuxカーネルではありません。 C標準ライブラリです。

ここで問題を探す必要はほとんどありません。あなたのclose()呼び出しがうまくいかない場合は、その実装ではなく、あなたが使っている何かが間違っていることがほぼ確実です。

+0

ありがとうKravchuk!私は何かが間違っているからではなく、私がCVE PoCプログラムをデバッグしているからです。カーネルの一部ではありません。/system/lib/librariesのDWARFを入手する方法についていくつかアドバイスをいただけますか? –

+0

inet_dgram_disconnectにブレークポイントを設定します。しかし、私はカーネルにまっすぐ行くことができないのですか? –

+0

@吴1昊いいえ、あなたはただのカーネルスペースに入ることはできません。代わりにkgdbを使用する必要があります。 –

関連する問題