PDA

View Full Version : [Asm]Problema


Luc@s
26-06-2004, 17:19
Ho scritto sto code:

.model small
.stack

.data
Message db 'Hello World by Lucas assembler', 13d, 10d, '$'

.code
Start:
mov dx, OFFSET Message
mov ax, SEG Message
mov ds, ax
; set int 21h service 09h
mov ah, 09h
int 21h
; set int 21h service 4Ch(exit)
mov ah, 4Ch
int 21h
end Start

Ma mi da sti errori:

prova.asm:1: error: attempt to define a local label before any non-local labels
prova.asm:1: error: parser: instruction expected
prova.asm:2: error: attempt to define a local label before any non-local labels
prova.asm:4: error: attempt to define a local label before any non-local labels
prova.asm:5: error: expression syntax error
prova.asm:9: error: comma or end of line expected
prova.asm:18: error: parser: instruction expected

AnonimoVeneziano
26-06-2004, 17:23
Che assemblatore usi??

Ciao

Luc@s
26-06-2004, 17:23
nasm su win32

AnonimoVeneziano
26-06-2004, 17:28
Quella non è la sintassi di NASM.

Converti così :

[BITS 16]
[ORG 0100h]

[SECTION .text]

start:
mov dx, Message
; set int 21h service 09h
mov ah, 09h
int 21h
; set int 21h service 4Ch(exit)
mov ah, 4Ch
int 21h

[SECTION .data]

Message db 'Hello World by Lucas assembler', 13d, 10d, '$'




A quanto sembra il programma che avevi scritto cercava di usare i Segmenti , in questo caso ho convertito il programma in "Flat Model" per semplicità .

Assembla con :

c:\> nasm nomefile.asm -f bin -o eseguibile.com


Ciao

Luc@s
26-06-2004, 17:34
dove trovo na guida alla sintaxis nasm?

AnonimoVeneziano
26-06-2004, 17:42
http://nasm.sf.net

C'è la documentazione , o comunque qualsiasi libro che insegna ASM usando la sintassi NASM (quello che ti ho consigliato nell' altro thread è un esempio)


Il tuo programma comunque conteneva un errore :

Message db 'Hello World by Lucas assembler', 13d, 10d, '$'

deve diventare:

Message db 'Hello World by Lucas assembler', 13, 10, '$'

Togliendo le "d" dal "13" e dal "10" dato che il Decimale è già la base di default del NASM

Ciao

Luc@s
26-06-2004, 17:47
Tnk!
Cmq io volevo impararmi l'asm per il reverse enginering e per completezza.
Cmq........tu per cosa usi l'asm e ritieni che si debba usare molto oggi?
Io penso che serva conoscerlo e magari usarlo per ottimizzare ma nn serve per altro perche troppo complicato e poco gestibile per grandi progetti(a meno di fare demo di grafica in 64 kb :D )
Poi è bello sapere disassembleare un exe e capire + o - cosa fa, no?

AnonimoVeneziano
26-06-2004, 17:57
Sinceramente io sto imparando l'ASM per pura voglia di conoscienza :)

Non ho in mente nessun grande progetto da eseguire con asm , però l'asm ti permette di capire a fondo come funziona il tuo computer , e ti da il controllo totale su tutto :)

Prima di iniziare a imparare l'ASM cos'era una "Interrupt Vector Table" , o la differenza tra "interrupt software" e "interrupt hardware" , cosa fosse il dispatcher di un sistema operativo , quale fosse il principio alla base di una CPU ... erano tutti concetti a me ignoti , l' ASM ti permette di capire a fondo tutto ciò, e già tutto questo per me è sufficiente .

Io sapevo già programmare un pochino in C , ma nonostante io ne sappia molto + di C che di ASM in questo momento , imparare quel poco di ASM mi ha permesso di apprendere molto di + sul mondo dell' elaborazione elettronica che tutto il libro di C che mi ero letto in precedenza .

Inoltre , sarà vero che l'ASM è complicato , ma ti permette anche di fare cose che altri linguaggi non ti permettono :)

Ciao

Luc@s
26-06-2004, 18:04
anche io lo studio spinto dai tuoi motivi, sai?
Cosi capisci e comprendi di + come funzia un Pc.

AnonimoVeneziano
26-06-2004, 18:09
Originariamente inviato da Luc@s
anche io lo studio spinto dai tuoi motivi, sai?
Cosi capisci e comprendi di + come funzia un Pc.


Hai PVT :)

mmx[ngg]
26-06-2004, 18:57
Originariamente inviato da Luc@s
Tnk!
Cmq io volevo impararmi l'asm per il reverse enginering e per completezza.
Cmq........tu per cosa usi l'asm e ritieni che si debba usare molto oggi?
Io penso che serva conoscerlo e magari usarlo per ottimizzare ma nn serve per altro perche troppo complicato e poco gestibile per grandi progetti(a meno di fare demo di grafica in 64 kb :D )
Poi è bello sapere disassembleare un exe e capire + o - cosa fa, no?

Humm....ti posto un pezzo di sorgente..+ o - così come verebbe creato da un disassemblatore.

Ora....prima di compilarlo e scoprire cos'è veramente riusciresti a dire cosa fà ?

Luc@s
26-06-2004, 20:17
Originariamente inviato da mmx[ngg]
Humm....ti posto un pezzo di sorgente..+ o - così come verebbe creato da un disassemblatore.

Ora....prima di compilarlo e scoprire cos'è veramente riusciresti a dire cosa fà ?

:eek:

mmx[ngg]
26-06-2004, 20:22
Ho riletto ora un pò dei tuoi messaggi....mi sa ke la domanda ke ti ho fatto è un po prematura....come non detto.

Cmq volevo semplicemente farti capire ke da un disassemblato è un'impresa sapere cosa faccia un programma....ti ci vuole mezza vita.

Pensa ke x soli 350 bytes (il compilato di quello ke ti ho postato) ci sono voluti 4k di sorgente...figurati x un normale eseguibile :muro:

E il tutto senza un briciolo di commento, variabili o label significative.

L'apprendimento dell'assembler deve essere visto in un'altra ottica. Il reverse enginering e l'ultima spiaggia da sfruttare solo quando si ha una totale conoscenza del linguaggio (lo devi leggere come un libro) altrimenti diventa una perdita di tempo fine a se stessa. E' molto + utile impararlo x scrivere algoritmi ke in un qualsiasi altro linguaggio risultino di difficile implementazione o poco efficenti.

Questo almeno secondo le mie esperienze....poi vedi te ;)

Luc@s
26-06-2004, 20:28
Io voglio solo usarlo un po in modo inline nei punti critici dei miei prog.
Cmq il reversing è un idea grandissima.
Cmq posso porti una sfida?
Mi dici cosa potrebbe essere il prog dal file che ti posto?

mmx[ngg]
26-06-2004, 20:55
Originariamente inviato da Luc@s
Io voglio solo usarlo un po in modo inline nei punti critici dei miei prog.
Cmq il reversing è un idea grandissima.
Cmq posso porti una sfida?
Mi dici cosa potrebbe essere il prog dal file che ti posto?

LOL....150Kb....io sono stato un pò + clemente :sofico:

Cmq la sfida l'accetto se realmente ti serve sapere cosa fà...visto ke mi ci vogliono 2 giorni....sai com'è nel weekend vorrei fare altro e negli altri giorni lavoro :D

Luc@s
26-06-2004, 21:06
Originariamente inviato da mmx[ngg]
LOL....150Kb....io sono stato un pò + clemente :sofico:

Cmq la sfida l'accetto se realmente ti serve sapere cosa fà...visto ke mi ci vogliono 2 giorni....sai com'è nel weekend vorrei fare altro e negli altri giorni lavoro :D

e che il mio dis fa cosi.
Cmq se vuo...........nn sentirti obligato ;)

mmx[ngg]
28-06-2004, 15:50
Non mi sentirei obbligato neanke se mi avessi pagato :D

Cmq da una rapida occhiata non mi sembra un semplice pgm in C (esegue delle call dinamiche). Ma l'hai scritto te o l'hai beccato da qualke parte ?

Visto anke com'è scritto, lascio perdere anke xke x effettuare il reverse eng. spesso non si parte dall'entry point sino all'ExitProcess (e come leggersi tutto un libro di storia solo x sapere com'è andata la seconda guerra mondiale) ma sarebbe + inteligente utilizzare un debugger ;)

Hai provato a compilare quello ke ti ho postato ? (ke non è un disassemblato ma un vero e proprio sorgente....gli ho semplicemente cambiato le label...altrimenti era una passeggiata)