Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 14 odgovora
  • 3.892 pregleda

Najnovija ↓

Prevodjenje intel asemblera 21.10.2021. u 12:19 · pre 61 mesec #1
Zravo svima, imam sledeci asemblerski kod u intelovoj sintaksi.

Kada ga prevedem sa as asemblerom dobijam tipa a.out fajl koji kad poikusam da izvrsim na ubuntu sa ./a.out dobijam "persmission denied".
A kada mu promenim mode sa chmod +x a.out, prilikom ./a.out dobijam "Exec format error"...

Moje pitanje je dakle sledece: Kako da pravilno prevedm i izvrsim ovaj prosti asemblerksi kod? Hvala na odgovoru.

.
Code:
       .intel_syntax noprefix

    .data

fmt:    .asciz "Hello, world!\n"

    .text

    .global main

main:
    enter 0, 0

    lea rdi, fmt
    call printf

    leave

    ret
 
Re: Prevodjenje intel asemblera 21.10.2021. u 12:46 · pre 61 mesec #2
Nevezano za kod, da li si dao execution permission fajlu kada si probao da ga startujes na Ubuntu...

Ah, vec si pokusao, probaj
chmod 777 ......
Re: Prevodjenje intel asemblera 21.10.2021. u 16:12 · pre 61 mesec #3
chmod +x već radi dodvanje execute privilegije na fajl.
Nego, Darko, kako si kompajlirao i linkovao tvoj kod?
Šta ti vraća komanda:
file a.out

Meni liči da si samo kompajlirao, a nisi linkovao, nego si object kod nazvao a.out.
Re: Prevodjenje intel asemblera 21.10.2021. u 18:17 · pre 61 mesec #4
Dakle kada ga prevedem sa as dobijam a.out fajl , a file a.out komanda ispisuje a.out: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
, sto meni nista ne znaci jer pojma nemam sa formatima objektnih fajlova. Kao sto rekoh prilikom chmod +x a.out i pokretanja dobijem sledece [bash: ./a.out: cannot execute binary file: Exec format error

Interesantno kada promenim ime funkcije iz 'main' u 'hekler' recimo, i pokusavam da prevedem sa gcc-om onda mi izbacuje linkersku gresku jer je nerazresena referenca na main funkciju...
Re: Prevodjenje intel asemblera 21.10.2021. u 18:39 · pre 61 mesec #5
Opet nisi odgovorio na pitanje:

Kako si preveo program?
Navedi KOMANDU kojom si kompajlirao i linkovao program.
Inače, ELF: https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
Primer šta meni daje "file" za izvršni fajl:
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
Re: Prevodjenje intel asemblera 21.10.2021. u 19:05 · pre 61 mesec #6
Jesam nego nisi pazljivo citao.

Preveo sam ga sa "as" komandom tj sa programom odnosno sa gnu asemblerom. i kad ga prevedem dobijem a.out fajl, a kada ukucam komandu "file a.out" dobijem a.out: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped kao sto sam i napiso u prethodnoj poruci.

Sto se linkovanja tice pojma nemam sta treba i da li treba i kako treba nesto dodatno tu uraditi, inicijalno sam pretpostavio da ce kada pozovem gnu asembler nad datim kodom on obaviti prevodjenje do objektnog fajla i onda samoinicijativno uraditi i likovanje...
Re: Prevodjenje intel asemblera 21.10.2021. u 19:13 · pre 61 mesec #7
DAJ CELU LINIJU KOJOM SI PREVEO ASM FAJL.
Zaboga, pomozi mi da ti pomognem!
Na primer:

as file.s -o file.out
ld file.out -e main -o file
./file
Re: Prevodjenje intel asemblera 21.10.2021. u 19:18 · pre 61 mesec #8
Haahh, prosto ovako:

as hello.s, kao izlaz dobijem difoltni a.out fajl i to je to.

A linker nigde nisam koristio.
Re: Prevodjenje intel asemblera 21.10.2021. u 19:20 · pre 61 mesec #9
Asembler pravi samo OBJ tj objektni fajl. Obično se dodaje strartup kod kod koji inicijalizuje Stack pointer.
Mora da se pokrene linker da linkuje sve bibilioteke koje si koristio i napravi ELF izvršni fajl.
Re: Prevodjenje intel asemblera 21.10.2021. u 19:20 · pre 61 mesec #10
A što nisi linkovao?
Koristi "-o" opciju da ne bi dobio defaultni a.out.
Koristi linker.
Probaj ove komande koje sam ti ja dao, samo upotrebi prava imena fajlova.
Re: Prevodjenje intel asemblera 24.10.2021. u 19:30 · pre 61 mesec #11
Ne znam kako da koristim linker tj, kako da linkujem da bibliotekom koja mi je potrebna.

Okej objektni fajl se ne zove vise a.out, stavio sam as -o hello.out hello.s, ali ne znam kako da linkujem...
Re: Prevodjenje intel asemblera 24.10.2021. u 20:00 · pre 61 mesec #12
ld hello.out -e main -o hello -lc

Možda ne treba -lc, ali printf je funkcija koja se nalazi u standardnoj biblioteci libc.so

A da probaš samo

make hello

Re: Prevodjenje intel asemblera 24.10.2021. u 23:47 · pre 61 mesec #13
Hvala na odgovorima.

A da li postoji neka automatizacija tipa da linker sam zakljuci koja od biblioteka mu je potrebna pa da linkuje ili to mora manualno da se uradi?
Re: Prevodjenje intel asemblera 24.10.2021. u 23:51 · pre 61 mesec #14
Obično standardna biblioteka ne mora da se posebno navodi (libc, -lc)
Ostale biblioteke moraju da se navode.

Zaboga, probaj:
make hello

make zna da od .s treba da napravi .o fajl, a da od .o fajla napravi izvršni fajl. Zna da treba da linkuje .o fajl sa standardnom bibliotekom.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme