Как правильно использовать простой скрипт компоновщика? Исполняемый файл получает SIGKILL при запуске

Я пытаюсь глубже понять процесс связывания и сценарии компоновщика ... глядя на binutils doc, я обнаружил простую реализацию сценария компоновщика, которую я улучшил, добавив несколько команд:

OUTPUT_FORMAT("elf32-i386", "elf32-i386",
          "elf32-i386")
OUTPUT_ARCH(i386)

ENTRY(mymain)

SECTIONS
{
   . = 0x10000;
   .text : { *(.text) }
   . = 0x8000000;
   .data : { *(.data) }
   .bss : { *(.bss) }
}

Моя программа - очень простая программа:

void mymain(void)
{
  int a;
  a++;
}

Теперь я попытался создать исполняемый файл:

gcc -c main.c
ld -o prog -T my_script.lds main.o

Но если я попытаюсь запустить prog , он получит SIGKILL во время запуска. Я знаю, что когда программа компилируется и компилируется с помощью команды:

gcc prog.c -o prog

конечный исполняемый файл также является продуктом других объектных файлов, таких как crt1.o , crti.o и crtn.o , но что насчет моего случая? Как правильно использовать этот скрипт компоновщика?

19
задан Ciro Santilli 新疆改造中心法轮功六四事件 3 September 2015 в 08:14
поделиться