forked from Github_Repos/cvw
34 lines
1.1 KiB
C
34 lines
1.1 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
int main(int argc, char *argv[]) {
|
|
if (argc < 3){
|
|
fprintf(stderr, "Expected 2 arguments: <raw GDB dump> <output binary>\n");
|
|
exit(1);
|
|
}
|
|
char* rawGDBfilePath = argv[1];
|
|
FILE* rawGDBfile;
|
|
if ((rawGDBfile = fopen(rawGDBfilePath,"rb"))==NULL) {
|
|
fprintf(stderr, "File not found: %s\n",rawGDBfilePath);
|
|
exit(1);
|
|
}
|
|
char* outFilePath = argv[2];
|
|
FILE* outFile = fopen(outFilePath,"w");
|
|
uint64_t qemuWord;
|
|
uint64_t verilogWord;
|
|
int bytesReturned=0;
|
|
do {
|
|
bytesReturned=fread(&qemuWord, 8, 1, rawGDBfile);
|
|
verilogWord = (((qemuWord>>0 )&0xff)<<56 |
|
|
((qemuWord>>8 )&0xff)<<48 |
|
|
((qemuWord>>16)&0xff)<<40 |
|
|
((qemuWord>>24)&0xff)<<32 |
|
|
((qemuWord>>32)&0xff)<<24 |
|
|
((qemuWord>>40)&0xff)<<16 |
|
|
((qemuWord>>48)&0xff)<<8 |
|
|
((qemuWord>>56)&0xff)<<0);
|
|
fwrite(&verilogWord, 8, 1, outFile);
|
|
} while(bytesReturned!=0);
|
|
return 0;
|
|
}
|