Archive

Posts Tagged ‘ctypes’

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…