линковка pe и elf в binary

Тема в разделе "WASM.ASSEMBLER", создана пользователем shi, 29 дек 2006.

  1. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Здравствуйте все)

    Я вот сейчас пишу ось (сразу просьба не объяснять, насколько это бессмысленное занятие :) ) Раньше писал под юникс, часть кода готова. потом снес его, т.к. места на винте мало осталось. И теперь нужно этот код компилить под виндой.

    Есть, значит, несколько файлов для nasma и несколько для gcc-cpp. Линкил раньше ld-ой. А теперь появилась проблема: ld не хочет линкить elf-модули в бинарный файл. Подскажите, пожалуйста, какой другой линкер для винды можно использовать, чтобы он линковал elf'ы в bin и, при этом, располагал их в том порядке, в котором они указаны в ком.строке? Или как можно еще поступить, чтобы сбилденный модуль запускался с начала файла
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    См. на форуме KolibriOS - там обьясняли как настроить gcc (LD, конечно), чтобы экзешник получался в нативном формате.
     
  3. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    я это тоже делал, но под никсом. после перехода на винду, почему-то, начались глюки. Ооочень удивился
     
  4. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    Quantum
    так.. нативный - это win-native или "проц-натив"?
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Нативный - это формат экзешников в MenuetOS.
     
  6. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    Файл menuet.ld:
    Код (Text):
    1. /*OUTPUT_FORMAT("binary")*/
    2. ENTRY(Start)
    3. SECTIONS
    4. {
    5.   .text 0x000000:
    6.    {
    7.     *(.text)
    8.    }
    9.  
    10.   .data : {
    11.     *(.data)
    12.     hEnd = . ;
    13.    }
    14.    
    15.   .bss :
    16.    {
    17.     *(.bss)
    18.    }
    19.    Memory = . ;
    20. }
    Файл asmcode.asm:
    Код (Text):
    1. format ELF
    2.  
    3. public Start
    4. extrn Memory
    5. extrn hEnd
    6.  
    7. extrn _sum
    8.  
    9. section ".text"
    10.   db "MENUET01"
    11.   dd 1, Start, hEnd, Memory, hStack, Param, 0
    12.  
    13.   Start:
    14.      push 21 ; b
    15.      push 79 ; a
    16.      call _sum
    17.      add  esp, 8
    18.  
    19.      or   eax, -1
    20.      int  0x40
    21.  
    22. section ".bss"
    23.   Param rb 256
    24.   rb 4096
    25.   hStack:
    Файл c_code.c:
    Код (Text):
    1. int sum(int a, int b)
    2. {
    3.   return a+b;
    4. }
    Файл makefile:
    Код (Text):
    1. OUTFILE = program
    2. OBJS = asm_code.o c_code.o
    3.  
    4. .SUFFIXES: .asm .o
    5.  
    6. $(OUTFILE) : $(OBJS)
    7.     ld -nostdlib -T menuet.ld -o $(OUTFILE) $(OBJS)
    8.     objcopy $(OUTFILE) -O binary
    9.  
    10. .asm.o:
    11.     fasm $*.asm
    12.  
    13. .c.o:
    14.     gcc -c $*.c
    15.  
    16. clean :
    17.     del *.o
    18.     del *.obj
     
  7. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    halyavin
    спасибо, помогло
    не знаешь, кстати, где взять мануал по формату файла настроек ld?
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Ну, где же ещё?
    http://www.gnu.org/software/binutils/manual/ld-2.9.1/html_mono/ld.html#SEC6
     
  9. shi

    shi New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    41
    спасибо) а чтоб даже я понял? по-русски, т.е. )