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

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

здравствуйте, мне нужно создать файл содержащий скомпилированный код на C 32-битный без формата, без pie, смещенный на 0x100200. (использую macos)
Я пробовал это сделать так

gcc -ffreestanding -m32 -no-pie -fasm-blocks -o kernel.bin -c kernel.c

objconv -felf kernel.o kernel_elf.o

x86_64-elf-ld -m elf_i386 -Ttext 0x100200 -e _CHANDLER -o cckernel -static kernel_elf.o

/usr/local/opt/binutils/bin/objcopy -O binary cckernel rckernel

(пытался добавить fasm blocks окольными путями, поэтому так много команд. Своей попыткой недоволен из-за неверных абсолютных адресов в массивах
по типу
, 
void func()
{
      
}
void* pointers[16] = {(void*)&func};
)

  • Вопрос задан
  • 393 просмотра
Подписаться 3 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
15432
@15432
Системный программист ^_^
Возможно, вам поможет кусок из моей статьи, к которому я сам часто возвращаюсь. Правда, там ARM, но gcc везде +/- одинаковый

arm-none-eabi-gcc.exe echo.c -nostdlib -O2 -o echo.out
arm-none-eabi-objcopy.exe -O binary echo.out echo.bin


По-хорошему нужно явно указать компилятору, по какому адресу будет расположен код директивой -Wl,--section-start=.text=0x30400000 (последнее - требуемый адрес)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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