Создать EXE-файл с релоками? [MinGW/GCC]

Тема в разделе "LANGS.C", создана пользователем Rel, 14 фев 2012.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.812
    подскажите флаг линкера для создания исполняемых файлов с релоками? '-shared' не подходит, тк в итоге он еще и устанавливает флаг о том, что файл - dll, а этого совсем не нужно...
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    --dynamicbase
    The image base address may be relocated using address space layout randomization ( ASLR ). This feature was introduced with MS Windows Vista for i386 PE targets.

    -q
    --emit-relocs

    Leave relocation sections and contents in fully linked executables. Post link analysis and optimization tools may need this information in order to perform correct modifications of executables. This results in larger executables.

    This option is currently only supported on ELF platforms.

    -r
    --relocatable
    Generate relocatable output---i.e., generate an output file that can in turn serve as input to ld. This is often called partial linking. As a side effect, in environments that support standard Unix magic numbers, this option also sets the output file's magic number to "OMAGIC". If this option is not specified, an absolute file is produced. When linking C ++ programs, this option will not resolve references to constructors; to do that, use -Ur.

    When an input file does not have the same format as the output file, partial linking is only supported if that input file does not contain any relocations. Different output formats can have further restrictions; for example some "a.out"-based formats do not support partial linking with input files in other formats at all.
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.812
    пробовал... флаг касается только DllCharacteristic поля, просто выставляет флаг о том, что библиотека может быть подвержена ASLR, никакого отношения к релокам не имеет...

    первое, что я попробовал... не работает, ни вместе с флагом -s (strip-all), ни без флага -s...

    пробовал... не собирает исполняемый файл, собирает какую-то непонятную мешанину из символов и кода...

    для 32-битной платформы помог флаг --pic-executable, но в месте с секцией релоков этот флаг добавил мне пустую секцию экспорта (.edata)... на 64-битной флаг ничего не меняет...
     
  4. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Вообще сюды посморти http://sourceware.org/binutils/docs/ld/Options.html должно получится.
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.812
    вообще судя по сгенерированному коду для x64 платформы, что с флагом --pic-executable, что без него, он не зависим от позиции исполняемого файла, все вызовы апи например c операндом [rip + <смещение>]... вопрос в том, всегда ли генерируемый код базонезависим на x64, и я просто по своей глупости не знал этого, или есть вероятность получить от компилятора жестко зашитые адреса?)))