/* address = absolute address of dump start length = length in lines. 1 line = 16 bytes */ void hexdump (DFHack::API& DF, uint32_t address, uint32_t length) { char *buf = new char[length * 16]; DF.ReadRaw(address, length * 16, (uint8_t *) buf); for (int i = 0; i < length; i++) { // leading offset cout << "0x" << hex << setw(4) << i*16 << " "; // groups for(int j = 0; j < 4; j++) { // bytes for(int k = 0; k < 4; k++) { int idx = i * 16 + j * 4 + k; cout << hex << setw(2) << int(static_cast<unsigned char>(buf[idx])) << " "; } cout << " "; } cout << endl; } delete buf; }
void interleave_hex (DFHack::API& DF, vector < uint32_t > & addresses, uint32_t length) { vector <char * > bufs; for(int counter = 0; counter < addresses.size(); counter ++) { char * buf = new char[length * 16]; DF.ReadRaw(addresses[counter], length * 16, (uint8_t *) buf); bufs.push_back(buf); } cout << setfill('0'); // output a header cout << "line offset "; for (int obj = 0; obj < addresses.size(); obj++) { cout << "0x" << hex << setw(9) << addresses[obj] << " "; } cout << endl; for(int offs = 0 ; offs < length * 16; offs += 4) { if((!(offs % 16)) && offs != 0) { cout << endl; } cout << setfill(' '); cout << dec << setw(4) << offs/4 << " "; cout << setfill('0'); cout << "0x" << hex << setw(4) << offs << " "; for (int object = 0; object < bufs.size(); object++) { // bytes for(int k = 0; k < 4; k++) { uint8_t data = bufs[object][offs + k]; cout << hex << setw(2) << int(static_cast<unsigned char>(data)) << " "; } cout << " "; } cout << endl; } for(int counter = 0; counter < addresses.size(); counter ++) { delete bufs[counter]; } }
/* address = absolute address of dump start length = length in bytes */ void hexdump (DFHack::API& DF, uint32_t address, uint32_t length, int filenum) { uint32_t reallength; uint32_t lines; lines = (length / 16) + 1; reallength = lines * 16; char *buf = new char[reallength]; ofstream myfile; stringstream ss; ss << "hexdump" << filenum << ".txt"; string name = ss.str(); myfile.open (name.c_str()); DF.ReadRaw(address, reallength, (uint8_t *) buf); for (int i = 0; i < lines; i++) { // leading offset myfile << "0x" << hex << setw(4) << i*16 << " "; // groups for(int j = 0; j < 4; j++) { // bytes for(int k = 0; k < 4; k++) { int idx = i * 16 + j * 4 + k; myfile << hex << setw(2) << int(static_cast<unsigned char>(buf[idx])) << " "; } myfile << " "; } myfile << endl; } delete buf; myfile.close(); }