From 5a4f15e9f57c7b099eb4805763aef2b3e1dbae5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Farag=C3=B3?= Date: Sun, 28 Oct 2018 23:44:56 +0100 Subject: [PATCH] DBG: add OptionalHeader.AddressOfEntryPoint to the displayed symbols --- src/dbg/module.cpp | 6 ++++++ src/dbg/module.h | 2 ++ src/dbg/symbolinfo.cpp | 19 +++++++++---------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/dbg/module.cpp b/src/dbg/module.cpp index 957e2a0e..03c4f8a3 100644 --- a/src/dbg/module.cpp +++ b/src/dbg/module.cpp @@ -611,6 +611,12 @@ void GetModuleInfo(MODINFO & Info, ULONG_PTR FileMapVA) Info.entry = 0; } + // Setup the pseudo entry point symbol + Info.entrySymbol.name = "OptionalHeader.AddressOfEntryPoint"; + Info.entrySymbol.forwarded = false; + Info.entrySymbol.ordinal = 0; + Info.entrySymbol.rva = moduleOEP; + // Enumerate all PE sections WORD sectionCount = Info.headers->FileHeader.NumberOfSections; Info.sections.clear(); diff --git a/src/dbg/module.h b/src/dbg/module.h index 5629d24c..e55e9f65 100644 --- a/src/dbg/module.h +++ b/src/dbg/module.h @@ -91,6 +91,8 @@ struct MODINFO std::vector relocations; std::vector tlsCallbacks; + MODEXPORT entrySymbol; + std::vector exports; DWORD exportOrdinalBase = 0; //ordinal - 'exportOrdinalBase' = index in 'exports' std::vector exportsByName; //index in 'exports', sorted by export name diff --git a/src/dbg/symbolinfo.cpp b/src/dbg/symbolinfo.cpp index 53afe143..288aeb4a 100644 --- a/src/dbg/symbolinfo.cpp +++ b/src/dbg/symbolinfo.cpp @@ -66,6 +66,15 @@ void SymEnum(duint Base, CBSYMBOLENUM EnumCallback, void* UserData) symbolptr.symbol = &modInfo->exports.at(i); cbData.cbSymbolEnum(&symbolptr, cbData.user); } + + // Emit pseudo entry point symbol + { + SYMBOLPTR symbolptr; + symbolptr.modbase = Base; + symbolptr.symbol = &modInfo->entrySymbol; + cbData.cbSymbolEnum(&symbolptr, cbData.user); + } + for(size_t i = 0; i < modInfo->imports.size(); i++) { SYMBOLPTR symbolptr; @@ -85,16 +94,6 @@ void SymEnum(duint Base, CBSYMBOLENUM EnumCallback, void* UserData) } } } - - // Emit pseudo entry point symbol - /*SYMBOLINFO symbol; - memset(&symbol, 0, sizeof(SYMBOLINFO)); - symbol.decoratedSymbol = "OptionalHeader.AddressOfEntryPoint"; - symbol.addr = ModEntryFromAddr(Base); - if(symbol.addr) - EnumCallback(&symbol, UserData); - - SymEnumImports(Base, EnumCallback, cbData);*/ } void SymEnumFromCache(duint Base, CBSYMBOLENUM EnumCallback, void* UserData)