2010-10-27 23 views
6

En un juego que modifico, recientemente realizaron algunos cambios que rompieron una entidad específica. Después de hablar con alguien que descubrió una solución, la única información que me dieron fue que la "parcharon" y no volvieron a compartirla.Volcado de los contenidos de la memoria de un objeto

Básicamente estoy tratando de recordar cómo volcar el contenido de la memoria de un objeto de clase en tiempo de ejecución. Recuerdo vagamente haber hecho algo similar antes, pero ha pasado mucho tiempo. Cualquier ayuda en recordar cómo hacerlo sería muy apreciada.

Respuesta

6
template <class T> 
void dumpobject(T const *t) { 
    unsigned char const *p = reinterpret_cast<unsigned char const *>(t); 
    for (size_t n = 0 ; n < sizeof(T) ; ++n) 
     printf("%02d ", p[n]); 
    printf("\n"); 
} 
+0

Gracias, esto es exactamente lo que estaba buscando. –

+0

Tenga en cuenta que esto solo funciona si el objeto no contiene punteros a la memoria en otro lugar. – doron

+1

Además, si pasa un puntero 'Base *', no imprimirá el objeto 'Derived' completo, solo la parte' Base'. – MSalters

2

Bueno, puede reinterpret_cast su instancia de objeto como una matriz char y mostrar eso.

Foo foo; // Your object 
// Here comes the ugly cast 
const unsigned char* a = reinterpret_cast<const unsigned char*>(&foo); 

for (size_t i = 0; i < sizeof(foo); ++i) 
{ 
    using namespace std; 
    cout << hex << setw(2) << static_cast<unsigned int>(a[i]) << " "; 
} 

Ésta es feo, pero debe trabajo.

De todos modos, tratar con las partes internas de algunas implementaciones suele ser no es una buena idea.

Cuestiones relacionadas