Есть код:
C++:
[CODE]
#include
char
__attribute__
(
(
section
(
".TST"
)
)
)
buffer
[
0x20
]
;
int
main
(
int
argc
,
char
*
argv
[
]
)
{
std
::
cout
Получившийся в результате компиляции(g++) и линковки виндовый x86 экзешник работает корректно.
Если же добавляю линковщику флаг --section-start,.TST=0x500000, собравшийся .exe не запускается:
Сравнил оба .exe файла, никаких серьезных различий не нашел. Например, вот отличия между IMAGE_OPTIONAL_HEADER32 рабочего .exe файла (слева) и нерабочего (справа). Отличия подчеркнул красным для удобства
Тут все справедливо: все адреса после 0x4000 смещены, потому что по адресу 0x4000 располагается .TST секция
Также вот секционные заголовки рабочего (слева) и нерабочего (справа) экзешников:
Тоже все выглядит нормально.
У меня было только одно предположение - в выравнивании. Явно укзаал линковщику выравнивание кратное 512 --section-alignment=0x1000 --file-alignment=0x1000. Не помогло.
Куда копать, в чем проблема?