Система: 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 ________________________________
))))) бросать ето гиблое дело!!! http://www.google.com/search?q=a.out&sourceid=opera&num=0&ie=utf-8&oe=utf-8
Mika0x65 так? Код (Text): format ELF64 executable 3 segment readable executable public _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 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 все работало
semen непринципиально это да и проблема в точке входа flat assembler version 1.69.14 (16384 kilobytes memory) prog.asm [5]: public _start error: illegal instruction.
skyproc Если Вы собрались линковать отдельно, то причём здесь format ELF64 executable 3? Он же соберёт сразу исполняемый файл. И экспортировать через public, соответственно, ничего нельзя тогда. Если хотите линковать отдельно, то Вам нужно следующее: Код (Text): format ELF64 section '.text' executable public _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 section '.data' writeable msg db 'Hello 64-bit world!',0xA msg_size = $-msg Но в случае одного объектного файла какой в этом смысл? Если Вы компилируете все части программы только в fasm то никакой ld не нужен: просто уберите .global _start из исходника в первом посте и fasm выдаст после компиляции готовый исполняемый elf64.
спасибо l_inc и всем войнам дзена все работает Код (Text): format ELF64 section '.text' executable public _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 section '.data' writeable msg db 'Hello 64-bit world!',0xA msg_size = $-msg