Задать вопрос
@nnGot583
c#, iOS дизассемблирование

Как разместить все данные после кода в чистом бинарном файле?

здравствуйте, не получается разместить данные строго после кода в готовом бинарном файле без формата.

Что делал:

x86_64-elf-gcc -m32 -ffreestanding -c kernel.c -o kernel.o
ld.lld -T linker.ld -o kernel --oformat binary kernel.o

скрипт линкера:

SECTIONS
{
. = 0x100200;

.text :
{
*(.text)
}

.data_kdata :
{
*(.data_kdata)
}

.data :
{
*(.data)
}

.bss :
{
*(.bss)
}

. = ALIGN(4);
}


Далее что делаю в коде на C:
Объявляю массивы вне функций вот так:
__attribute__((section(".data_kdata")))
char SCANCODES_QEMU[58] = {
    '?', '?', '1', '2', '3', '4', '5', '6', '7', '8', 
    '9', '0', '-', '=', '?', '?', 'q', 'w', 'e', 'r', 
    't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', '?', 
    'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', 
    '\'', '`', '?', '\\', 'z', 'x', 'c', 'v', 'b', 'n', 
    'm', ',', '.', '/', '?', '?', '?', ' '
};


Ставлю атрибут для любых глобальных данных attribute section

Вот что получаю:

678a179e4b10a534407850.png
678a17ab44c33749303370.png


В самом начале пошли строки и массивы, далее пошел код и далее снова массивы

Я просмотрел сгенерированный до ассемблера файл и увидел что массивы строк устанавливаются в секцию .rodata хотя я явно указал другую секцию (.data_kdata)
  • Вопрос задан
  • 69 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@nnGot583 Автор вопроса
c#, iOS дизассемблирование
Нужно явно указать секцию .rodata после секции .text
и attribute section после этого не понадобится:

SECTIONS
{
. = 0x100200;

.text :
{
*(.text)
}

.rodata : <- тут явно указываем секцию
{
*(.rodata)
}

.data :
{
*(.data)
}

.bss :
{
*(.bss)
}

. = ALIGN(4);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы