Archivo

Posts Tagged ‘tutorial assembly hacker’

Assembly en GNU/Linux para Hackers Newbies, Parte IX – FINAL

abril 22, 2011 Deja un comentario

USANDO STACK PARA ENVIAR PARAMETROS A FUNCIONES

Para usar la Stack y enviar argumentos a una función, es necesario conocer el funcionamiento de los registers ESP y EBP que se encargan de apuntar a la posición actual de la Stack y apuntar a los datos almacenados respectivamente.

Como se ha indicado anteriormente, la Stack en un segmento de ejecución que contiene valores de memoria Alta y Baja que se van apilando en base a una pila FIFO, cuando se almacenan valores en dicha pila, necesariamente el valor de memoria del register ESP se actualiza para apuntar a la nueva posición del ultimo elemento almacenado en la pila, de esta forma se mantiene la consistencia de la misma y se puede invocar a operaciones PUSH y POP sobre la pila de forma segura, es decir, sin tener la preocupación de que se vayan a recuperar o almacenar valores en posiciones de memoria inconsistentes.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte VIII

abril 21, 2011 Deja un comentario

FUNCIONES EN ASSEMBLY

En Assembly es posible utilizar funciones del mismo modo que se utilizan en cualquier lenguaje estructurado como C/C++ o Pascal, su funcionamiento es simple, solamente basta con definir el nombre de la función y posteriormente invocarla con la instrucción call. En este sentido es bastante similar al concepto de segmento de ejecución, sin embargo, tiene la diferencia de que se ejecuta de forma independiente del flujo principal del programa (a diferencia de un segmento de ejecución que se define en algún punto del flujo principal) por esta razón, el uso de funciones resulta conveniente para separar instrucciones del flujo de ejecución e invocarlas solamente cuando resulte conveniente.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte VII

abril 20, 2011 Deja un comentario

FLUJO CONDICIONAL DE UN PROGRAMA EN ASSEMBLY

Existen una serie de instrucciones que consisten en la ejecución de una determinada rutina dependiendo de que se cumplan ciertas condiciones para su ejecución. En Assembly, algunas de estas instrucciones están relacionadas con las Flags contenidas en el register EFLAGS, de este modo cada una de estas instrucciones verifican si dicho register tiene establecida una determinada bandera y en función de dicha verificación, ejecutar o no una rutina de código, lo que en lenguajes como Pascal, C/C++ o Java se conoce como una instrucción IF, pero aquí es un poco mas compleja.

Las instrucciones de flujo condicional basadas en las banderas del register EFLAGS son:

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte VI

abril 18, 2011 Deja un comentario

FLUJO INCONDICIONAL DE UN PROGRAMA EN ASSEMBLY

Las instrucciones que se encuentran en esta categoría corresponden a aquellas que no se encuentran limitadas por instrucciones condicionales para que se su ejecución se lleve a cabo.

El siguiente es el programa de ejemplo que se usará para la demostración de los tópicos relacionados con el flujo incondicional de un programa en assembly, que como en casos anteriores se depurará paso a paso para su correcto entendimiento.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte V

abril 17, 2011 1 comentario

USANDO STRINGS EN ASSEMBLY

Para manipular Strings en assembly, el programador dispone de los comandos MOV(X) para desplazar segmentos de memoria y valores en direcciones de memoria, sin embargo, para manipulación de Strings se cuenta con comandos MOVS(x) adicionales diseñados específicamente para el tratamiento de cadenas en Assembly, estos comandos adiciones son:

MOVSB: Mueve un byte (8 bits)
MOVSW: Mueve una palabra (16 bits)
MOVSL: Mueve una palabra doble (32 bits)

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte IV

abril 16, 2011 Deja un comentario

MANIPULAR POSICIONES DE MEMORIA EN UN PROGRAMA ASSSEMBLY

En assembly podemos mover valores de una posición de memoria origen a una posición de memoria destino, siendo esta, una de las actividades mas frecuentes en un programa assembly. Para mover valores de memoria de un register a otro, usamos la instrucción MOV(x) existen 3 variables de este comando dependiendo del tamaño del origen y del destino, estas son:

  • MOVL : Mueve un valor de 32 bits. movl %eax, %ebx
  • MOVW: Mueve un valor de 16 bits. movw %ax, %bx
  • MOVB: Mueve un valor de 8 bits. movb %ah, %bh

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte III

abril 15, 2011 Deja un comentario

ESTRUCTURA DE UN PROGRAMA EN ASSEMBLY

La estructura de un programa en assemby esta determinada por diferentes zonas en las cuales se declarán variables, se inicializan y posteriormente se utilizan por diferentes rutinas que realizan una función definida, las zonas principales en un programa en assembly son las siguientes:

.data: Segmento de inicialización de datos, como cadenas o valores numéricos

.bss: Segmento donde se indican las variables sin inicializar

.text: Segmento donde se realizará la ejecución propiamente dicha del programa, las instrucciones en este segmento están diferenciadas en diferentes subsegmentos dentro del segmento .text, el más importante que es donde se inicia la ejecución del programa es el subsegmento _start, este subsegmento puede compararse como la rutina main en un programa escrito en C/C++, por otro lado también se encuentra el segmento .globl _start, donde se ejecutaran funciones externas, aquí se definen invocaciones a librerías externas y demás dependencias del programa.

Leer más…

A %d blogueros les gusta esto: