ld: warning

Тема в разделе "WASM.UNIX", создана пользователем skyproc, 2 авг 2010.

  1. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Система: Ubuntu 10.04 LTS - Lucid Lynx
    AMD Athlon 64 x2

    Слил с инета fasm for Linux

    Выполняю сие безобразие:

    skyproc@SkyDune:~/myasm/linux_64/hallo_world$ ./fasm prog.asm prog.o
    flat assembler version 1.69.14 (16384 kilobytes memory)
    3 passes, 229 bytes.
    skyproc@SkyDune:~/myasm/linux_64/hallo_world$ ld prog.o
    ld: warning: cannot find entry symbol _start; not setting start address

    ещё появляется файл a.out
    что делать?

    вот сам код
    ________________________________
    format ELF64 executable 3


    segment readable executable

    .global _start
    _start:


    mov edx,msg_size ; CPU zero extends 32-bit operation to 64-bit
    ; we can use less bytes than in case mov rdx,...
    lea rsi,[msg]
    mov edi,1 ; STDOUT
    mov eax,1 ; sys_write
    syscall

    xor edi,edi ; exit code 0
    mov eax,60 ; sys_exit
    syscall

    segment readable writeable

    msg db 'Hello 64-bit world!',0xA
    msg_size = $-msg
    ________________________________
     
  2. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    ))))) бросать ето гиблое дело!!!
    http://www.google.com/search?q=a.out&sourceid=opera&num=0&ie=utf-8&oe=utf-8
     
  3. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Выбросил в карзину
    Всёравно не работает, св0лочь
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    skyproc
    Теперь достань из корзины и добавь 'public _start', а то он а у тебя не экспортируется.
     
  5. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Mika0x65 так?

    Код (Text):
    1. format ELF64 executable 3
    2.  
    3. segment readable executable
    4.  
    5. public _start
    6. _start:
    7.  
    8.     mov edx,msg_size    ; CPU zero extends 32-bit operation to 64-bit
    9.                 ; we can use less bytes than in case mov rdx,...
    10.     lea rsi,[msg]
    11.     mov edi,1       ; STDOUT
    12.     mov eax,1       ; sys_write
    13.     syscall
    14.  
    15.     xor edi,edi     ; exit code 0
    16.     mov eax,60      ; sys_exit
    17.     syscall
    18.  
    19. segment readable writeable
    20.  
    21. msg db 'Hello 64-bit world!',0xA
    22. msg_size = $-msg
    skyproc@SkyDune:~/myasm/linux_64/hallo_world$ ./fasm prog.asm prog.o
    flat assembler version 1.69.14 (16384 kilobytes memory)
    prog.asm [5]:
    public _start
    error: illegal instruction.
    skyproc@SkyDune:~/myasm/linux_64/hallo_world$

    на Linux x86 все работало
    :dntknw:
     
  6. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Попробуй точно следовать ABI, не edi, а RDI итп
     
  7. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    semen непринципиально это да и проблема в точке входа

    flat assembler version 1.69.14 (16384 kilobytes memory)
    prog.asm [5]:
    public _start
    error: illegal instruction.
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. format ELF64 executable 3
    2.  
    3. public _start
    4.  
    5. segment readable executable
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    skyproc
    Если Вы собрались линковать отдельно, то причём здесь format ELF64 executable 3? Он же соберёт сразу исполняемый файл. И экспортировать через public, соответственно, ничего нельзя тогда.
    Если хотите линковать отдельно, то Вам нужно следующее:
    Код (Text):
    1. format ELF64
    2.  
    3. section '.text' executable
    4.  
    5. public _start
    6.  
    7. _start:
    8.  
    9.  
    10.     mov    edx,msg_size    ; CPU zero extends 32-bit operation to 64-bit
    11.                 ; we can use less bytes than in case mov rdx,...
    12.     lea    rsi,[msg]
    13.     mov    edi,1        ; STDOUT
    14.     mov    eax,1        ; sys_write
    15.     syscall
    16.  
    17.     xor    edi,edi     ; exit code 0
    18.     mov    eax,60        ; sys_exit
    19.     syscall
    20.  
    21. section '.data' writeable
    22.  
    23. msg db 'Hello 64-bit world!',0xA
    24. msg_size = $-msg
    Но в случае одного объектного файла какой в этом смысл? Если Вы компилируете все части программы только в fasm то никакой ld не нужен: просто уберите .global _start из исходника в первом посте и fasm выдаст после компиляции готовый исполняемый elf64.
     
  10. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    спасибо l_inc и всем войнам дзена
    все работает


    Код (Text):
    1. format ELF64
    2.  
    3. section '.text' executable
    4.  
    5. public _start
    6.  
    7. _start:
    8.  
    9.  
    10.     mov    edx,msg_size    ; CPU zero extends 32-bit operation to 64-bit
    11.                 ; we can use less bytes than in case mov rdx,...
    12.     lea    rsi,[msg]
    13.     mov    edi,1        ; STDOUT
    14.     mov    eax,1        ; sys_write
    15.     syscall
    16.  
    17.     xor    edi,edi     ; exit code 0
    18.     mov    eax,60        ; sys_exit
    19.     syscall
    20.  
    21. section '.data' writeable
    22.  
    23. msg db 'Hello 64-bit world!',0xA
    24. msg_size = $-msg