PDA

Visualizza la versione completa : [assembly intel x86]attempt to define a local label ...


ramy89
28-01-2012, 22:58
Ho installato nasm su linux e sto provando a compilare un semplice file di cui ho ottenuto l' assembly da un file C.
Mi da questi errori:



prova.s:1: error: attempt to define a local label before any non-local labels
prova.s:1: error: parser: instruction expected
prova.s:2: error: attempt to define a local label before any non-local labels
prova.s:2: error: parser: instruction expected
prova.s:3: error: attempt to define a local label before any non-local labels
prova.s:4: error: attempt to define a local label before any non-local labels
prova.s:4: error: parser: instruction expected
prova.s:5: error: attempt to define a local label before any non-local labels
prova.s:6: error: attempt to define a local label before any non-local labels
prova.s:6: error: parser: instruction expected
prova.s:7: error: attempt to define a local label before any non-local labels
prova.s:7: error: parser: instruction expected
prova.s:9: error: parser: instruction expected
prova.s:10: error: parser: instruction expected
prova.s:11: error: parser: instruction expected
prova.s:12: error: parser: instruction expected
prova.s:13: error: symbol `movl' redefined
prova.s:13: error: parser: instruction expected
prova.s:15: error: symbol `movl' redefined
prova.s:15: error: parser: instruction expected
prova.s:18: error: parser: instruction expected
prova.s:19: error: parser: instruction expected
prova.s:20: error: parser: instruction expected


Il file C non lo posto neanche perchè è un semplice hello world, sintatticamente corretto.

oregon
29-01-2012, 09:56
Però dovresti postare il sorgente assembly ...

ramy89
29-01-2012, 12:46
.file "prova.c"
.section .rodata
.LC0:
.string "Hello!"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $.LC0, (%esp)
call puts
movl $0, %eax
leave
ret
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
.section .note.GNU-stack,"",@progbits


Non so se è assembly x86 , o è nasm che è un assembler per un' architettura diversa dalla mia, oppure con -S viene generato codice assembly che non è per la mia architettura, ma mi pare più probabile la prima ipotesi.

MItaly
29-01-2012, 13:07
La butto lì: NASM si aspetta assembly in sintassi Intel, mentre tu glielo stai dando in sintassi AT&T. Verifica se tra le opzioni di NASM c'è uno switch per la scelta della sintassi assembly.

oregon
29-01-2012, 14:11
Sì ... ovviamente è così ... e inoltre, non puoi prendere un sorgente assembly generato da un compilatore C e fornirlo "direttamente" (senza una rielaborazione che pensavo tu avessi fatto) ad un assembler.

Anche le "direttive" e tanto altro, può essere diverso.

MItaly
29-01-2012, 14:17
In effetti credo che l'assembly generato da gcc sia digeribile senza rielaborazioni quasi esclusivamente da as (anche se non mi stupirei che nasm e altri assembler generici siano in grado di attivare una qualche "modalità di compatibilità").

ramy89
02-03-2012, 19:40
Ho ripreso in mano il codice ora, ma nei flag di nasm non vedo niente per la compatibilità.Ho provato con -t ma da lo stesso quegli errori.
Inoltre tutti i manuali che trovo hanno una sintassi non accettata da nasm.
C'è qualche altro software su linux che permetta di compilare AT&T ? :confused:

ardito86
02-03-2012, 20:32
Non potresti "tradurre" nella sintassi Intel? Tanto è abbastanza corto...

Io non conosco la sintassi AT&T

linoma
02-03-2012, 20:40
gcc o gas

ramy89
03-03-2012, 16:14
Ah già, ce l' avevo già installato gas , insieme a gcc.
Ora ho risolto.

Loading