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

    @nnGot583 Автор вопроса
    c#, iOS дизассемблирование
    Нужно явно указать секцию .rodata после секции .text
    и attribute section после этого не понадобится:

    SECTIONS
    {
    . = 0x100200;

    .text :
    {
    *(.text)
    }

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

    .data :
    {
    *(.data)
    }

    .bss :
    {
    *(.bss)
    }

    . = ALIGN(4);
    }
    Ответ написан
    Комментировать
  • Как создать файл без формата с скомпилированным C кодом?

    @nnGot583 Автор вопроса
    c#, iOS дизассемблирование
    Думаю вопрос решен, основная проблема отсутствие поддержки таких бесформатных файлов ld для macos. Пришлось 7 часов устанавливать llvm ради компоновщика от туда.
    1) brew install lld
    2) установите кроссплатформенный gcc (называется полностью "x86_64-elf-gcc")

    мой код для проверки работы утилит:
    int kap1 = 0x45454545;
    void func()
    {
    
    }
    void* kap2 = (void*)&func;


    3) компилируем это в объектный ELF файл (macho не поддерживается)

    x86_64-elf-gcc -m32 -ffreestanding -c test.c -o test.o

    4) линкуем файл сам с собой

    ld.lld -o pop --image-base 0x100200 --oformat binary test.o

    5) команда "file pop" выведет data значит формата нет

    6) открываем дизассемблер и смотрим что там, нас интересует адрес в переменной kap2 он должен быть равен, вероятно, 0х100200

    677eeb9b0627d403737265.png

    сначала функция потом байты kap1 и kap2 в котором корректный адрес - значит все работает а про fasm blocks можно забыть
    Ответ написан
    Комментировать