The Shadow
Moderadores
Colaborador
    
Desconectado
Mensajes: 482

Fucking mnemonic c0d1n6!
|
 |
« en: Marzo 18, 2008, 07:28:17 » |
|
FAQ acerka del ASM by Shadow
P:¿Que es "ASM"? R: Es la abreviatura de lenguaje "assembler" o "ensamblador" en español.
P:¿Que es entonces el lenguaje "ensamblador"? R: “Vistos a muy bajo nivel, los microprocesadores procesan exclusivamente señales electrónicas binarias. Dar una instrucción a un microprocesador supone en realidad enviar series de unos y ceros espaciadas en el tiempo de una forma determinada. Esta secuencia de señales se denomina código máquina. El código representa normalmente datos y números e instrucciones para manipularlos. Un modo más fácil de comprender el código máquina es dando a cada instrucción un mnemónico, como por ejemplo CMP, ADD o JMP. Esta abstracción da como resultado el ensamblador, un lenguaje de muy bajo nivel que es específico de cada microprocesador.”
P:¿Que puedo programar en este lenguaje? R:Simple, todo lo que puedes ver digitalizado por un monitor.
P:¿Que necesito para aprender a programar en ASM? R:Descartando lo obvio, un cerebro con IQ de mas 81, ser incha del RMFC y ganas de aprender
P:¿Tiene que ver ASM que esos 0s y 1s de la ciencia ficcion de los "juackers"? R: Dejame explicarlo asi: En la pregunta #2 vimos que "los microprocesadores procesan exclusivamente señales electrónicas binarias". Veamos la instruccion "10010000": Binario (lo que procesa el micro): 10010000 Hexadecimal (representacion de la instruccion en otro sistema de numeracion): 90 Mnemonico (representacion o "comando" de ensamblador): NOP Uso: No hace nada, es una instruccion nula.
P:¿Como puedo practicar o hacer programas en ASM? R:Puedes bajar un compilador. Entre los mas comunes estan: TASM (Turbo Asemmbler de Borland), MASM (Macro Assembler de Microsoft) y el RadASM.
P:¿Como se ve un programa en ASM para compilar? R:Mirandolo (XD). En 16 bits: .MODEL SMALL ; Determinamos el modelo de memoria .STACK ; Definimos el área de pila .DATA MENS DB "HOLA MUNDO!.$" ; Especificamos la cadena de texto a mostrar .CODE ; Inicio del código INI: ; Etiqueta de inicio MOV AX, @DATA ; Permite tener acceso a los datos MOV DS,AX ; a través de el registro DS MOV DX,OFFSET MENS ; Prepara para desplegar el mensaje MOV AH,9 ; Llama al servicio 9 INT 21H ; de la int 21h para desplegar el texto MOV AH,4CH ; Llama al servicio 4Ch INT 21H ; de la int 21h para terminar END INI ; Cierra la etiqueta de inicio
En 32 bits (para MASM): .486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib print MACRO arg1:REQ,varname:VARARG invoke StdOut,reparg(arg1) IFNB <varname> invoke StdOut,chr$(varname) ENDIF ENDM .data v0 dd 0 v1 dd 1 v2 dd 2 v3 dd 3 v4 dd 4 v5 dd 5 v6 dd 6 ary dd v0,v1,v2,v3,v4 dd v5,v6 .code start: call main exit main proc LOCAL cnt :DWORD push esi push edi mov cnt, 6 mov esi, ary lp: mov edi, [esi+2] print str$(esi) print chr$(" = Direccion en memoria",13,10) print str$(edi) print chr$(" = contenido",13,10,13,10) add esi, 4 sub cnt, 1 jnz lp pop edi pop esi ret main endp end start
P:¿Porque la diferencia? R:Un micro (microprocesador) de 16 bits soporta eso mismo, 16 bits de informacion por cada operacion que realize; uno de 32 soporta, 32 bits.
P:¿Que otras diferencias hay entre estos 2? R: Programar para 32 bits nos permite usar o "llamar" APIs de librerias externas como "kernel32.dll", no permite manejar la interrupciones como lo hace un programa para 16 bits; para 32 bits, los registros ("variables"; espacios de memoria reservados para guardar informacion especifica en el procesador) al aumentar su tamaño, cambian de sintaxis (PE.: de "ax" a "eax") aunque tambien se pueden seguir usando los registros de 16 bits; entre otras diferencias.
P:En la pregunta #5 mencionaste otros representaciones de los mnemonicos (binario y hexadecimal). ¿Tengo que saber estas conversiones o conocer estos sistemas de numeracion?. R:Tecnicamente, no. Pero, en la practica si (por lo menos tienes que saber convertir hexadecimal a decimal)
P:¿Que ventajas tiene la programacion en ASM? R:La principal ventaja es que permite crear programas muy rápidos y livianos (Un programa hecho en C++ que imprima la cadena "Hola Mundo!." pesa unos 15.663 bytes, cuando uno hecho en ASM, que realize lo mismo y compilado con TASM, pesa 541 bytes, asiq estariamos hablando de unas 29 veces mas pequeño).
P:¿Y desventajas? R:A menudo es dificil de aprender.
P:¿Porque? R:Los programadores de lenguajes de alto nivel no estan acostumbrados a la abstraccion, a la "limitacion" de funciones del ASM y a trabajar hablando direcctamente con el procesador, esto quiere decir que si la persona que intenta aprender ASM, no conoce el funcionamiento de un ordenador a nivel de memoria, procesador y hardware en general, le sera mucho mas dificil que al que ya conoce esto mas a fondo.
P:¿Esto quiere decir que tengo que tener algun tipo de conocimientos sobre este tema (funcionamiento del ordenador)? R:Si.
P:¿De que me sirve saber ASM en nuestros dias? Por algo se inventaron los lenguajes de alto nivel. R:Como dije, la principal ventaja es que permite crear programas muy rápidos y livianos. Otro de los usos del ASM en nuestro dias es la llamada "Ingenieria Inversa" o "Cracking".
P:¿"Ingenieria Inversa"? R:"Arte del destripado"; rama de "hacking" o "censurado informatica" que se encarga de romper cualquier tipo de seguridad que posea un programa comercial usando metodos de desensamblado y reconstruccion, comprometiendo asi cualquier tipo de cifrado o proteccion anti-"crackeo", tambien llamado por los coders: "debug", para poder disfrutar del limite de sus funciones o simplemente para modificar a gusto su funcionamiento.
P:¿Ahora, que hago? R:Busca un tuto basico o de introduccion que sientas que entiendas sobre este lenguaje y empieza a leer y si tienes alguna duda, ES FATAL que te quedes con ella, PREGUNTA, PREGUNTA, PREGUNTA, APRENDE, APRENDE, APRENDE, esa es la ley... Luego transmite lo que sabes!
Espero que les sirva de algo en su introduccion en este mundo!...
Saludos!
|