Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: theowl en 5 Agosto 2020, 16:07 pm



Título: Asesoría para aprendizaje autónomo de ASM.
Publicado por: theowl en 5 Agosto 2020, 16:07 pm
Cordial saludos, chicos.

Acudo a ustedes porque estoy bastante perdido para abordar mi aprendizaje sobre asm.

Tengo varias dudas.

Mi primera duda sería, la programación de ensamblador de un procesador de 8 bits es diferente a la programación de uno de 16 bits, y este a su vez es diferente de uno de 32 o 64 bits? Es decir, si aprendo a programar ensamblador para procesadores de 32 bits no podré programar para uno de 64 bits? Cuales son las diferencias sustanciales, las interrupciones?

Mi otra duda es, he pensando en aprender de esta forma, descargar un emulador de un procesador de 8 bits y programar una aplicación para entender el procesador y demás.
Luego hacer lo propio con uno de 16 bits, de 32 y 64 bits. Todo esto con el fin de entender los procesadores. Les parece buena idea? o como aprendieron ustedes?

Que opinan de utilizar Masm32 para empezar a aprender? Para iniciar es recomendable empezar con emu8086? o mejor con DosBox?

La ultima pregunta es la siguiente, si yo aprendo a programar en ensamblador para un procesador de 16 bits y quiero posteriormente desensamblar un programa que funciona en windows para ver su funcionamiento, es posible que no entienda el código porque aprendí fue ensamblador para procesadores de 16 bits?

Muchas Gracias por la ayuda que me puedan brindar.





Título: Re: Asesoría para aprendizaje autónomo de ASM.
Publicado por: Eternal Idol en 5 Agosto 2020, 16:42 pm
Jamas programe en 8 bits, el procesador 8086 en el que se basan los PCs es de 1978 y ya era de 16 bits. https://en.wikipedia.org/wiki/X86

Te recomiendo arrancar con el tipico libro de Charte Ojeda sobre ensamblador, es principalmente sobre MS-DOS y 16 bits (DosBox ahi va bien) asi que no hace falta memorizar que hace cada interrupcion. Tiene un capitulo de Windows y otro de Linux (32 bits ambitos). En los mensajes fijados en el sub-foro hay muchos recursos que te vendran bien, algunos caidos (usa archive.org).

masm32 esta muy bien para Windows pero ademas de ensamblador, y principalmente, para entender un programa de Windows vas a necesitar conocer su API.




Esto que te respondo se basa en PCs, cada familia de procesadores es diferente, un ARM de 32 o 64 bits no es lo mismo que una PC de 32 o 64 bits ... https://en.wikipedia.org/wiki/ARM_architecture


Título: Re: Asesoría para aprendizaje autónomo de ASM.
Publicado por: Serapis en 6 Agosto 2020, 17:55 pm
 
Mi primera duda sería, la programación de ensamblador de un procesador de 8 bits es diferente a la programación de uno de 16 bits, y este a su vez es diferente de uno de 32 o 64 bits?
Sí. Son diferentes. Si fueran iguales, para qué cambiar nomenclaturas...

Es decir, si aprendo a programar ensamblador para procesadores de 32 bits no podré programar para uno de 64 bits?
Correcto. Hablar de 8bits, 32bits... es una abreviatura para referirse a la arquitectura de procesadores.
Un procesador de 8 bits, podría asimilarse a un centro de salud de tu barrio (por ejemplo), y uno de 32 bits a un hospital de una ciudad... Como es fácil de entender el centro de salud tendrá ciertas limitaciones de las que el hospital dispone...

Cuales son las diferencias sustanciales, las interrupciones?
De entrada el tamaño de los buses, no solo el de direcciones, tambien el de datos y el de control... por lo que incluso una instrucción idéntica en 2 arquitecturas diferentes tendrán una codificación distinta.
Además, crece el número de capacidades disponibles, lo que implica la aparición de nuevas instrucciones (inexistentes en versiones previas), a menudo ligeros cambios en las existentes o ampliaciones, nuevos registros, etc...

Mi otra duda es, he pensando en aprender de esta forma, descargar un emulador de un procesador de 8 bits y programar una aplicación para entender el procesador y demás.
Si estuviéramos al comienzo de los 90, te diría que no solo no es mala idea empezar con un emulador de 8 bits, para empezar y familiarizarse, sino que sería incluso imprescindible... pero a fecha de hoy te diría que sea un vistazo no exhaustivo...si familiarizarte para saber qué tiene y que no un procesador de 8 bits. Una vez conozcas con cierto detalle su arquitectura te diría que avances a los 16 bits... y no pierdas tiempo en programar nada... solo limítate a diferenciar lo que tiene y que no tiene cada arquitectura, para comprender los cambios en la siguiente y como ha evolucionado, eso ofrece una pespectiva muy útil.

Luego hacer lo propio con uno de 16 bits, de 32 y 64 bits. Todo esto con el fin de entender los procesadores. Les parece buena idea? o como aprendieron ustedes?
Para iniciar es recomendable empezar con emu8086? o mejor con DosBox?
Yo te diría que no pierdas tiempo en programar en 8 ni 16 bits ni en sus ensambladores, aprende solo sobre su arquitectura, y programa solo para 32 y 64 bits...

Que opinan de utilizar Masm32 para empezar a aprender?
Sí, claro... Masm32 es una buena opción.

Aquí una pagina a consultar:
-https://www.plantation-productions.com/Webster/HighLevelAsm/

La ultima pregunta es la siguiente, si yo aprendo a programar en ensamblador para un procesador de 16 bits y quiero posteriormente desensamblar un programa que funciona en windows para ver su funcionamiento, es posible que no entienda el código porque aprendí fue ensamblador para procesadores de 16 bits?
Leer código desensamblado, es harina de otro costal.
...perder el tiempo para entender como funciona un programa, mediante código desensamblado, es lo mismo que ir a una escombrera que sabe que contiene todos los escombros de una catedral, para entender como era o estaba construída.

En general es una tarea titánica pretender 'entender el funcionamiento de un programa' en base a su desensamblado. En la práctica (individual) suele limitarse a tareas específicas. En general la mayor parte del código de un programa no tiene ningún misterio ni es preciso perder tiempo en él, son 'cosas sabidas' (por cualquier programador medio), por ejemplo el funcionamiento de un menú, o la apertura y control de ventanas. Basta centrarse en los detalles que uno (digamos que) no sabe como funcionan EXACTAMENTE, aunque esto tiene más un carácter de 'hacking' que de programar en ensamblador. Por lo que antes de meterte en faena, te diría que te contestes a tí mismo cuales son tus pretensiones:
- Aprender a programar en ensamblador.
- Aprender técnicas de hacking (para lo que es necesario cierto conocimiento de ensamblador, pero no de forma exhaustiva).
En base a tu respuesta, el camino a seguir es algo distinto.