2016-07-13 2 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

Я оттолкнул скомпилированный гр программу на 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: Я заметил, что загруженные библиотеки все лишены.

ответ

1

libc.so не является ядром Linux. Это стандартная библиотека C.

Очень маловероятно, что вам нужно будет найти там проблему. Если ваш вызов close() не работает, почти наверняка что-то не так с вами, используя его, а не его реализацию.

+0

Спасибо Кравчук! Я смотрю на него не потому, что что-то не так, а потому, что я отлаживаю программу CVE PoC. Это не часть ядра. Можете ли вы дать мне несколько советов о том, как получить DWARF из/system/lib/libraries? –

+0

Я хочу установить точку прерывания inet_dgram_disconnect. Но я не могу пойти прямо в ядро, не так ли? –

+0

@ 吴一昊 Нет, вы не можете просто попасть в пространство ядра; вам нужно вместо этого использовать kgdb. –

Смежные вопросы