私は金魚のカーネルをコンパイル: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:ダウンロードしたライブラリがすべて削除されていることに気づきました。
ありがとうKravchuk!私は何かが間違っているからではなく、私がCVE PoCプログラムをデバッグしているからです。カーネルの一部ではありません。/system/lib/librariesのDWARFを入手する方法についていくつかアドバイスをいただけますか? –
inet_dgram_disconnectにブレークポイントを設定します。しかし、私はカーネルにまっすぐ行くことができないのですか? –
@吴1昊いいえ、あなたはただのカーネルスペースに入ることはできません。代わりにkgdbを使用する必要があります。 –