PredictDebug(PLAYERp ppp) { static FILE *fout = NULL; static char pred_sym_name[80]; if (SymCountCode == 0) LoadSymTable("swcode.sym", &SymTableCode, &SymCountCode); if (SymCountCode <= 0) return; if (!fout) { if ((fout = fopen("dbgpred.txt", "wb")) == NULL) return; } if (ppp->DoPlayerAction != pred_last_func) { extern ULONG MoveThingsCount; SYM_TABLEp st_ptr; ULONG unrelocated_offset; ULONG offset_from_symbol; unrelocated_offset = SymCodePtrToOffset((void*)ppp->DoPlayerAction); st_ptr = SearchSymTableByOffset(SymTableCode, SymCountCode, unrelocated_offset, &offset_from_symbol); ASSERT(st_ptr); strcpy(pred_sym_name, st_ptr->Name); fprintf(fout, "%s, %d\n", pred_sym_name, MoveThingsCount); } }
int CoffLoader::ParseCoff(FILE *fp) { if ( !LoadCoffHModule(fp) ) { printf("Failed to load/find COFF hModule header\n"); return 0; } if ( !LoadSymTable(fp) || !LoadStringTable(fp) || !LoadSections(fp) ) return 0; PerformFixups(); #ifdef DUMPING_DATA PrintSymbolTable(); PrintStringTable(); #endif return 1; }