KasperskyOS Community Edition 1.3

Подготовка к отладке

Чтобы подготовить условия для отладки с использованием GDB-сервера QEMU, нужно выполнить следующие шаги:

  1. Отключить поддержку ASLR и задать адреса памяти для загрузки секций .text исполняемых файлов.

    Для этого нужно использовать следующую CMake-команду:

    set_target_properties(<имя программы> PROPERTIES LINK_FLAGS "-no-pie -Ttext <адрес>")

    Отладчику GDB нужен адрес памяти, по которому загружен ELF-образ, чтобы сопоставить отладочные символы с ELF-образом. ASLR, поддерживаемая по умолчанию, приводит к тому, что этот адрес задается случайным значением, которое не известно отладчику GDB. Это затрудняет отладку. Чтобы отключить поддержку ASLR, нужно указать флаг -no-pie.

    GDB-сервер QEMU рассматривает все исполняющиеся процессы, управляемые KasperskyOS, как один процесс. Если ASLR не поддерживается, то по умолчанию компоновщик делает так, что исполняемые файлы загружаются по одному и тому же адресу памяти процессов. В результате этого загружаемые сегменты исполняемых файлов пересекаются в памяти с точки зрения отладчика GDB, и отладка выполняется некорректно (например, отображаются некорректные значения переменных, или срабатывают точки останова, установленные для другой программы). Чтобы избежать пересечения загружаемых сегментов, соответствующих разным программам, нужно использовать параметр -Ttext <адрес>, который задает адрес загрузки секции .text. В качестве смещения между адресами загрузки секции .text в разных процессах можно принять значение, превышающее на 1 МБ размер наибольшего исполняемого файла в образе решения. Например, в качестве адреса загрузки секции .text для программы Client в примере ping можно указать значение 0x06000000, а для программы Server в этом примере можно указать значение 0x06200000.

    Смещение между адресами секций .text не может гарантировать отсутствия пересечений загружаемых сегментов, если заранее собранные исполняемые файлы, используемые в решении (например, из состава KasperskyOS Community Edition), скомпонованы для поддержки ASLR. (Отключить ASLR и задать адреса загрузки секций .text можно только для тех исполняемых файлов, сборка которых выполняется при создании решения. Для заранее собранных исполняемых файлов этого сделать нельзя.) Секции .text таких исполняемых файлов загружаются по случайным адресам, что может привести к пересечению с загружаемыми сегментами, соответствующими программе, которую нужно отладить.

  2. [Опционально] Задать параметры запуска QEMU.

    Чтобы изменить начальные и/или добавить новые параметры запуска QEMU, нужно использовать параметр QEMU_FLAGS CMake-команды build_kos_qemu_image().

    Пример:

    set(QEMU_FLAGS "-m 2048 -machine vexpress-a15,secure=on \ -cpu cortex-a72 -nographic -monitor none -smp 4") build_kos_qemu_image(kos-qemu-image ... QEMU_FLAGS "${QEMU_FLAGS}")