- Соберите последнюю версию ядра Linux для ARM64.
- Запустите QEMU для отладки ядра
Код: Выделить всё
qemu-system-aarch64 -machine virt,accel=hvf -cpu host \
-kernel arch/arm64/boot/Image \
-append "nokaslr"\
-nographic \
-m 2G \
-s \
-S
- Запустите lldb и подключитесь к QEMU
Код: Выделить всё
lldb vmlinux
(lldb) gdb-remote 1234
(lldb) breakpoint set -H -a 0x41e300e8
(lldb) c
- Это успешно намекнет на эту точку останова. Но при использовании целевых модулей загрузите, чтобы указать адреса символов отладки для разделов.
Код: Выделить всё
(lldb) target modules load --file vmlinux .head.text 0x40200000 .text 0x40210000 .rodata.text 0x41e2b800 .init.text 0x41e40000
Код: Выделить всё
Section load address = Sections start address - (Linux Entry address - Qemu load address)
e.g. .rodata.text
readelf -S out/arm64/vmlinux
There are 51 section headers, starting at offset 0x17316b88:
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 1] .head.text PROGBITS ffff800080000000 010000 010000 00 AX 0 0 65536
[19] .rodata.text PROGBITS ffff800081c2b800 1c3b800 005800 00 AX 0 0 2048
0xffff800081c2b800 - ( 0xffff800080000000 - 0x40200000) = 0x41e2b800
- После установки. Точка останова не будет достигнута независимо от того, виртуальный или физический адрес используется для установки точки останова.
установить точку останова по физическому адресу:
Код: Выделить всё
(lldb) breakpoint set -H -a 0x41e300f4
Код: Выделить всё
(lldb) breakpoint set -H -a 0xffff800081c300f4
(lldb) c
- Моя среда:
ПК: Macbook Pro M2 Max
QEMU: 9.0.1
LLDB: 18.1.7
Версия ядра Linux: 6.10-rc4
У меня есть поиск по Google и проекту GitHub lldb. Но решения не было. Как установить точку останова после загрузки целевых модулей, чтобы указать адреса символов отладки для разделов. Или это ошибка lldb?
Подробнее здесь: https://stackoverflow.com/questions/786 ... r-sections