1

金魚カーネルを次のようにコンパイルしました。

 [ ] 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

コンパイル済みの C プログラムを AVD にプッシュしました。

そして、ライブラリをダウンロードしました(それが適切な方法かどうかはわかりません)

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

デバイスに接続

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: ダウンロードしたライブラリがすべて削除されていることに気付きました。

4

1 に答える 1

1

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

そこで問題を探す必要はほとんどありません。close() 呼び出しが機能しない場合は、実装ではなく、使用に問題があることはほぼ確実です。

于 2016-07-13T08:42:54.127 に答える