No vaig a escriure un tutorial en asm, ja que trobe que no val la pena... ;) Però anem a veure el primer programa "Hola món" típic als tutorials de programació.
Tal i com contava en un post anterior, anem a gastar Visual Asm (easy code). Seleccionem crear i li diguem crear un nou projecte, com aplicació de consola:
I ara anem a veure com escrivim en pantalla, la forma més fàcil que he trobat és trovar l'identificador de l'arxiu pantalla (handle), i escriure uns caràcters en eixa pantalla. Per obtindre l'identificador gastarem la funció del sistema GetStdHandle, i per escriure en eixe identificador, WriteFile. Ho escrivim amb els paràmetres corresponents en la secció main, pareguda a la funció main de C:
Main:
Push - 11D ;STD_OUTPUT_HANDLE estàndard output, pel dispositiu què preguntem
CALL GetStdHandle ;en EAX tindrem el handle
Push 0, Addr buff ; variable on guardem coses, no val per a res en este cas
Push 9, 'Hola món!' ;9 tamany de la cadena 'hola món!', en caràcters
PUSH EAX ;el guardem
CALL WriteFile ;escrivem en la pantalla
Xor Eax, Eax ;EAX=0 acabem sense error
Ret
la secció data al principi haurà de contindre la nova varible creada:
.Data
hInst DD NULL
buff DD 0
Executem i tenim el resultat:
vegem que el caracter "extrany" ó apareix incorrectament codificada, d'això parlarem en una altra ocasió. No ha segut tant difícil, eh?
Edite
Si estiguerem en C, el codi hauria segut una cosa sembant a:
int main(){
int hd;
char cadena[]='Hola món';
int buff=0;
hd=GetStdHandle(11);
WriteFile(hd,cadena,strlen(cadena),buff);
return 0;
}
Tal i com contava en un post anterior, anem a gastar Visual Asm (easy code). Seleccionem crear i li diguem crear un nou projecte, com aplicació de consola:
I ara anem a veure com escrivim en pantalla, la forma més fàcil que he trobat és trovar l'identificador de l'arxiu pantalla (handle), i escriure uns caràcters en eixa pantalla. Per obtindre l'identificador gastarem la funció del sistema GetStdHandle, i per escriure en eixe identificador, WriteFile. Ho escrivim amb els paràmetres corresponents en la secció main, pareguda a la funció main de C:
Main:
Push - 11D ;STD_OUTPUT_HANDLE estàndard output, pel dispositiu què preguntem
CALL GetStdHandle ;en EAX tindrem el handle
Push 0, Addr buff ; variable on guardem coses, no val per a res en este cas
Push 9, 'Hola món!' ;9 tamany de la cadena 'hola món!', en caràcters
PUSH EAX ;el guardem
CALL WriteFile ;escrivem en la pantalla
Xor Eax, Eax ;EAX=0 acabem sense error
Ret
la secció data al principi haurà de contindre la nova varible creada:
.Data
hInst DD NULL
buff DD 0
Executem i tenim el resultat:
vegem que el caracter "extrany" ó apareix incorrectament codificada, d'això parlarem en una altra ocasió. No ha segut tant difícil, eh?
Edite
Si estiguerem en C, el codi hauria segut una cosa sembant a:
int main(){
int hd;
char cadena[]='Hola món';
int buff=0;
hd=GetStdHandle(11);
WriteFile(hd,cadena,strlen(cadena),buff);
return 0;
}
Comentaris
Publica un comentari a l'entrada