Archive

Archive for the ‘python’ Category

Construyendo tipos de datos de C con ctypes

Seguimos con estos post dedicados a python y su libreria ctypes. En este caso voy a dar algunos ejemplos para saber que tipo de datos usar en cada variable que criemos.

Hago esto… porque yo como muchos reversers estoy acostumbrado a ver todo como BYTE, WORD, DWORD. Ya cuando me agregan palabras como punteros o integer, ya me rompe la paciencia 😛 por eso vamos a ver que tamaño le da a cada cosa nuestra querida librería de python.

Esta es la lista de estructura de datos que nos provee el librito “Gray Hat Python“:

C Type Python Type ctypes Type
char 1-character string c_char
wchar_t 1-character Unicode string c_wchar
char int/long c_byte
char int/long c_ubyte
short int/long c_short
unsigned short int/long c_ushort
int int/long c_int
unsigned int int/long c_uint
long int/long c_long
unsigned long int/long c_ulong
long long int/long c_longlong
unsigned long long int/long c_ulonglong
float float c_float
double float c_double
char * (NULL terminated) string or none c_char_p
wchar_t * (NULL terminated) unicode or none c_wchar_p
void * int/long or none c_void_p

Read more…

Advertisements

Calling conventions y ctypes

Comencé a leer el libro “Gray Hat Python” y ya comenzamos con escollos por el camino, como no podía ser de otra manera… el primer ejemplo que se me ocurrió probar me tiraba un error.

En estas poquitas lineas voy a dejar documentado como fue que la safe, para que a nadie le suceda de nuevo.

Tal vez el error se dio porque me apure a agarrar el interprete, antes de documentarme bien acerca de ctypes y python. Pero hay veces que leer tanto le quita la gracia, y uno quiere probar rápidamente si tal o cual cosa sirve para sus propósitos ❗

Recién comencé con el capitulo 2 y me tope con ctypes, una librería que no conocía y que provee la funcionalidad de usar .dll’s desde el mismo código de python. No hace falta decir lo valioso que puede ser para nosotros tener este poder al alcance de la mano.

En el libro tenemos el siguiente ejemplo:

from ctypes import *
msvcrt  = cdll.msvcrt
message_string = "Hello world!\n"
msvcrt.printf("Testing: %s", message_string)

ahí nomas sin dudarlo, agarre la consola interactiva y me dispuse a probar ese ejemplo.

Read more…