lunes, 10 de marzo de 2014

Introducción a Punteros

Punteros


En esta entrada, voy a hacer una breve introducción a los punteros, para así poder avanzar en los tutoriales de Cheat Engine.
Empecemos:

¿Qué es un puntero?

Un puntero, como veremos en el Cheat Engine, es una dirección de memoria, cuyo valor es otra dirección de memoria.
De esta manera, podremos acceder al valor de la dirección a la que apunta nuestra dirección de memoria (variable).

Para explicar esto con más detalle:


Dirección Valor
009733D8 (puntero) 009733E8
009733E8 102
Veamos como guardar en el Cheat Engine la dirección como un puntero:


Lo primero, es marcar la casilla que pone "Pointer".
En la caja de texto de la parte inferior, ponemos la dirección inicial, generalmente, una dirección cuyo valor estamos seguros de que no cambiará, de que lo que cambiará será lo que apunta.
A la derecha de la dirección, veremos su valor. Si es un puntero, su valor será una dirección.
Arriba tenemos para colocar Offsets. Los offsets son valores que se le sumarán a la dirección. Esto cuando el puntero apunta directamente a la dirección que contiene el valor que deseamos, no nos interesa. En cambio, si hacemos una cadena de punteros, será muy importante.

Para hacernos una idea de los punteros, veremos un par de ejemplos, con la sintaxis de algún lenguaje de programación:


C++

En C++, las variables se definen de esta forma: <tipo> <nombre> [= <valor>];
Ej:
int var;

("int" declara un número entero)

Para definir un puntero, basta poner un '*' después del tipo (o antes del nombre):
Ej:
int* ptr;

Para ver la dirección de memoria de una variable, se usa '&', en lugar del '*':
Ej:
int var = 66; // El valor de "var" es 66.
int *ptr;     // Declaramos el puntero "ptr".
ptr = &var;   // El valor de "ptr" será la dirección de "var".

Tal como lo tenemos:
Si accedemos al valor de "ptr", veremos la dirección de "var".
En cambio, si accedemos al valor de "ptr" como puntero (*ptr), veremos el valor de "var".


ASM (Ensamblador)

En ensamblador, el lenguaje más cercano al código máquina y el que veremos con el Cheat Engine con el botón "Memory View", accedemos a variables como si fueran punteros, simplemente poniéndolas entre corchetes: "[var]".


Y bueno, una vez contado lo básico, voy cerrando la entrada. El tema de punteros, puede ser pesado o aparentemente complicado, pero una vez se entienda bien el concepto, lo trataréis con fluidez. Si algo no os quedó claro, siempre podéis buscar en Google alguna guía sobre punteros. La forma más fácil, a mi parecer, de aprender punteros, es aprender algún lenguaje de programación o de scripting que los utilice, como los citados anteriormente. Yo, recomiendo C++ (mi lenguaje principal), pero tenéis muchos más, como Visual Basic, C#, Java, Python, etc etc. Quizás haga alguna introducción a C++ o a Ensamblador (algo más complicado) en próximas entradas.

Gracias por leer, y suerte con los punteros.

No hay comentarios:

Publicar un comentario