cp/m Posted May 23, 2010 Report Posted May 23, 2010 (edited) In acest tutorial voi descrie formatul executabil ELF, comenzile folosite si un program care afiseaza stringul "Hello World!". Formatul ELF Spre deosebire de executabilele din MS DOS si bootloader-ul prezentat anterior, executabilele in Linux nu au variabilele si codul executabil la gramada, ci, ordonate existand mai multe categorii: .data=reprezinta sectiunea in care se afla datele initializate .bss=reprezinta sectiunea in care se afla datele neinitializate .text=reprezinta sectiunea in care se afla partea executabila Comenzile folosite: mov a,b = muta b in a add a,b = aduna a cu b si pune rezultatul in a push a = adauga a in varful stivei pop a = scoate elementul din vf stivei si il pune in a int = Prostii pot sa-le considere ca niste functii predefinite. Cei mai curiosi sa viziteze http://en.wikipedia.org/wiki/Interrupt Si acum programul:section .text global _start_start: mov eax,0x04 ; 0x04 = sys_write mov ebx,0x01 ; filehandle=stdout mov ecx,msg1 ; Adresa la care se afla stringul. Pentru continut, adaugati [ si ] mov edx,0xD ; Lungimea stringului int 0x80 ; Strigam intu 80 (kernelul) mov eax,0x01 ; 0x01 = sys_exit mov ebx,0x00 ; return 0 int 0x80 ; Strigam intu 80 (kernelul)section .data msg1: db 'Hello World!',10Compilare si rulare: nasm -f elf name.asm ld -s -o name name.o ./name Inca un exemplu, necomentat(arata numarul argumentelor, nr. argumentelor < 10)section .text global _start_start: pop eax mov edi,eax add edi,0x2F mov [msg1],edi mov eax,0x04 mov ebx,0x01 mov ecx,msg1 mov edx,0x2 int 0x80 mov eax,0x01 mov ebx,0x00 int 0x80 section .data msg1: db 0 Edited May 23, 2010 by cp/m Quote
Torvalds Posted May 23, 2010 Report Posted May 23, 2010 Offtopic: First of all, de ce inveti ASM? Singurul lucru la care mai e bun este driver development-ul. Iar daca il inveti ca sa legi partea soft de partea hard (un robot sau alt produs electronic), invata C. Am vazut ca foarte multa lume dezvolta librarii pentru asta.Ontopic: Cat despre tutorial, reinventing the wheel...P.S. Torvalds cand era mic, s-a apucat de programare pentru ca nu se gaseau foarte multe jocuri. A facut primul joc in BASIC, si al 2-lea in cod masina, pentru ca nu ii spusese nimeni de ASM Quote
totti93 Posted May 23, 2010 Report Posted May 23, 2010 nice. ASM pentru mine e lb chineza notiunile de baza le stiu, si doar atat... nu am fost nevoit niciodata sa fac un program intreg in el... folosesc doar pentru a scrie functii in c++ pentru folosirea mouseului, video, etc... Quote
begood Posted May 23, 2010 Report Posted May 23, 2010 Ontopic: Cat despre tutorial, reinventing the wheel... cati oameni crezi ca stiu c ? si cati crezi ca stiu asm ? fa un raport si inmulteste salariul cu acel raport. atat va castiga cp/m daca continua pe partea de asm. cel ce stie asm e mult mai valoros (fiind mai rar de intalnit) decat unul care stie c.a2480f25: Why is reinventing the wheel a good thing ? Quote
Torvalds Posted May 23, 2010 Report Posted May 23, 2010 cati oameni crezi ca stiu c ? si cati crezi ca stiu asm ? fa un raport si inmulteste salariul cu acel raport. atat va castiga cp/m daca continua pe partea de asm. cel ce stie asm e mult mai valoros (fiind mai rar de intalnit) decat unul care stie c.Nu conteaza! C-ul are o mare arie de cuprindere: software (aplicatii desktop, jocuri, programare de sistem), algoritmica, virusologie, driver development. ASM a ramas bun doar la driver development, domeniu care nu ii este strain C/C++ului eJobs este cel mai mare site de recrutare online din Romania. Daca dam search dupa programator Assembly, vom vedea ca sunt doar 3 rezultate. Foarte putina lume mai face dezvoltare cu ASM. Singurele soft-uri sunt firmware.Cat despre "Reinventing the wheel", eu sunt de acord cu tine. Dar doar ca sa exersezi, nu inteleg de ce trebuie sa postezi al 10000-lea tutorial de genul? Pastreaza pentru tine. Am inteles, reinvetarea rotii de mai multe ori duce la inovatie. Putem face roata mai rezistenta, mai rotunda, dar asta ti se pare ca asta face acest tutorial? Quote
Cosmin. Posted May 23, 2010 Report Posted May 23, 2010 invata asm, chiar daca e pentru tine.cu asta se face cracking Quote
virusz Posted May 24, 2010 Report Posted May 24, 2010 pfffff, omu tot incearca dar vad ca multi il descurajeaza, oricum bafta cp/m Quote
Torvalds Posted May 25, 2010 Report Posted May 25, 2010 ^ Da, asa e."debuggingul la aplicatii la care nu ai sursele" => hexeditor => ASM Quote