подскажите флаг линкера для создания исполняемых файлов с релоками? '-shared' не подходит, тк в итоге он еще и устанавливает флаг о том, что файл - dll, а этого совсем не нужно...
--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.
пробовал... флаг касается только DllCharacteristic поля, просто выставляет флаг о том, что библиотека может быть подвержена ASLR, никакого отношения к релокам не имеет... первое, что я попробовал... не работает, ни вместе с флагом -s (strip-all), ни без флага -s... пробовал... не собирает исполняемый файл, собирает какую-то непонятную мешанину из символов и кода... для 32-битной платформы помог флаг --pic-executable, но в месте с секцией релоков этот флаг добавил мне пустую секцию экспорта (.edata)... на 64-битной флаг ничего не меняет...
вообще судя по сгенерированному коду для x64 платформы, что с флагом --pic-executable, что без него, он не зависим от позиции исполняемого файла, все вызовы апи например c операндом [rip + <смещение>]... вопрос в том, всегда ли генерируемый код базонезависим на x64, и я просто по своей глупости не знал этого, или есть вероятность получить от компилятора жестко зашитые адреса?)))