diff --git a/dump-prog/dump.cpp b/dump-prog/dump.cpp index a2f061e..05af0c5 100644 --- a/dump-prog/dump.cpp +++ b/dump-prog/dump.cpp @@ -45,6 +45,35 @@ void printImports(void *N, RVA impAddr, string &modName, string &symName) { } void printRelocs(void *N, VA relocAddr, reloc_type type) { + cout << "TYPE: "; + switch(type) { + case ABSOLUTE: + cout << "ABSOLUTE"; + break; + case HIGH: + cout << "HIGH"; + break; + case LOW: + cout << "LOW"; + break; + case HIGHLOW: + cout << "HIGHLOW"; + break; + case HIGHADJ: + cout << "HIGHADJ"; + break; + case MIPS_JMPADDR: + cout << "MIPS_JMPADDR"; + break; + case MIPS_JMPADDR16: + cout << "MIPS_JMPADD16"; + break; + case DIR64: + cout << "DIR64"; + break; + } + + cout << " VA: 0x" << to_string(relocAddr, hex) << endl; return; } diff --git a/parser-library/parse.cpp b/parser-library/parse.cpp index 446410d..fe58570 100644 --- a/parser-library/parse.cpp +++ b/parser-library/parse.cpp @@ -568,11 +568,18 @@ void IterImpRVAString(parsed_pe *pe, iterRVAStr cb, void *cbd) { importent i = *it; cb(cbd, i.addr, i.moduleName, i.symbolName); } + return; } //iterate over relocations in the PE file void IterRelocs(parsed_pe *pe, iterReloc cb, void *cbd) { + list &l = pe->internal->relocs; + + for(list::iterator it = l.begin(), e = l.end(); it != e; ++it) { + reloc r = *it; + cb(cbd, r.shiftedAddr, r.type); + } return; }