1
0
Fork 0
Commit Graph

92 Commits

Author SHA1 Message Date
Duncan Ogilvie 3a30af1dc7 Fix a few compilation warnings 2023-08-01 14:36:02 +02:00
Duncan Ogilvie 9746dee02f
Merge pull request #3131 from ynwarcs/virtualmod_memorymodule_support
Support for MemoryModule recognition and debugging via virtualmod.
2023-07-13 11:27:51 +02:00
Duncan Ogilvie 97ff1ec98a Refactor symbol handling and introduce DbgSymbolEnumRange
This allows enumerating multiple symbols at the same address efficiently
2023-06-10 18:00:16 +02:00
ynwarcs aa0a5cd82c Support for MemoryModule recognition and debugging via virtualmod.
- Fixed some bugs in virtualmod: loadedSize was never set + the mapped data would be destroyed prematurely, causing a crash after initially parsing the module.
- Use raw RVA instead of rebasing when reading module information from memory.
- Set MappedAsImage = true when calling RtlImageDirectoryEntryToData on in-memory sections, as expected.
- This works out of the box for some basic stuff (e.g. symbols, imports, exports are loaded properly) but for full functionality a fix is needed in MemoryModule (see 10250ad4b7). TL;DR: VirtualSize field in the section header is not properly set by MemoryModule, leading to sections not being parsed properly during page sorting, leading to an error spam and some other annoying behaviour.
2023-05-15 12:31:43 +02:00
Duncan Ogilvie 578c14c8c5 Improve code readability after looking for buffer overflows 2023-02-22 08:51:24 +01:00
Duncan Ogilvie e246545aae Implement MODINFO::getProcAddress
This resolves forwards as well as API sets
2023-01-24 13:40:56 +01:00
not6 9d7cc256eb
Update module.cpp
Closes #2971
2022-11-17 04:08:05 +01:00
Duncan Ogilvie 420ef52aea Add a workaround for a bad module in memory map
Closes #2931
2022-10-03 21:42:08 +02:00
Duncan Ogilvie d77f2d9b09 Switch to LLVMDemangle for symbol demangling
Thanks to @Khangaroo for the bug report!
2022-05-14 16:04:28 +02:00
Duncan Ogilvie 2ed439677e Show ordinal names in the undecorated symbol column
Thanks to @dmex for the suggestion
2021-05-08 14:06:57 +02:00
Matthijs Lavrijsen f49835b3bf
DBG: use PointerToRawData in debug directory if no RVA is present 2021-01-31 00:49:46 +01:00
Duncan Ogilvie c69ab584fe Fix compilation for 32-bit 2020-11-12 03:31:37 +01:00
Duncan Ogilvie a49d32cca8 Add undocumented LabelRuntimeFunctions command 2020-11-11 23:38:58 +01:00
Duncan Ogilvie 8ef53a1931 Parse syscall indices and display the Nt function name in the comments 2020-10-29 00:18:41 +01:00
Duncan Ogilvie 54051bdcd1 improve code and fix bugs 2020-09-14 20:06:01 +02:00
Duncan Ogilvie e2a20266d1
DBG: close #2245
fix by lynnux
2019-11-10 23:15:29 +01:00
pxf_god 2952170189 DBG: fix call stack on x64 2019-10-12 15:41:29 +02:00
Duncan Ogilvie 8a07bd2d7e
DBG+GUI: implement auto completion for exports in goto dialog
closes #1987
2019-08-17 17:38:58 +02:00
Duncan Ogilvie 60e1dff147
DBG: fix signature verification for PDB v2.0 and improve symbol log
closes #2193
2019-08-09 20:55:59 +02:00
Duncan Ogilvie 1e075142a5 DBG: add symload command to manually load a PDB 2019-06-12 16:51:19 +02:00
Zhang Li 4273fce56e Fix export name is not parsed correctly 2019-05-09 20:45:04 +02:00
Duncan Ogilvie 2cbafa369d DBG: add mod.isexport expression function 2019-04-30 15:05:36 +02:00
Zhang Li 1874da8657 Fix export name parsing 2019-04-28 16:40:21 +02:00
Duncan Ogilvie 4af8ff6174 DBG: (performance) improvements to SymbolSourceDIA 2019-04-12 16:51:37 +02:00
Duncan Ogilvie ee411b0c30
DBG: some more improvements to safely reading the PE info 2019-04-06 12:40:50 +02:00
Mattiwatti 6e18613e37 DBG: ReadExportDirectory: put upper bound on the number of imports 2019-03-17 19:46:33 +01:00
Mattiwatti e38adf1265 DBG: AddressOfNameOrdinals is WORD[], not DWORD[] 2019-03-17 19:46:33 +01:00
Mattiwatti c54c96816e DBG: ReadExportDirectory: do bounds checks on all export dir entries before indexing into arrays
Fixes #2105 (second case/malware sample)
2019-03-17 19:46:33 +01:00
Mattiwatti e36779d7a4 DBG: more robust validation of PE directory sizes 2019-03-17 19:46:33 +01:00
Duncan Ogilvie 7d53b1ae08
DBG: fix potential crashes in GetModuleInfo 2019-01-20 22:41:26 +01:00
Duncan Ogilvie 688e2ccc04
DBG+GUI: AStyle 2018-11-18 15:50:13 +01:00
Bálint Faragó 1e9bf1ab7c DBG: Fix mapped area overrun in ReadDebugDirectory for bogus debugDirSize 2018-11-18 15:20:38 +01:00
Bálint Faragó 0065f204a3 Add DLL ordinal to symbol table and fix symbol table comparator 2018-10-31 12:38:00 +01:00
Bálint Faragó 5a4f15e9f5 DBG: add OptionalHeader.AddressOfEntryPoint to the displayed symbols 2018-10-31 12:37:48 +01:00
Duncan Ogilvie d7f1dadb52 DBG: exclude some invalid imports + give ordinal imports a name 2018-10-10 15:44:37 +02:00
Duncan Ogilvie 70cfec4094 DBG: add (undocumented) option to force load PDB 2018-10-10 15:44:37 +02:00
Duncan Ogilvie 144dbd4c2f DBG: undecorate import/export names 2018-07-04 17:12:37 +02:00
Duncan Ogilvie 8c169ae2ed
DBG+BRIDGE+GUI: fix source loading 2018-07-01 19:28:06 +02:00
Duncan Ogilvie df31f0da45
DBG: change symbol load order + add debuggee.pdb to the search list 2018-07-01 19:28:05 +02:00
Duncan Ogilvie 2665df4eb3
DBG: added mod.headerva expression function 2018-07-01 19:28:03 +02:00
Mattiwatti 0bb2efcb2c
Improve performance and crash resistance when loading PE files containing 1000 or more sections. Tested on https://github.com/corkami/pocs/blob/master/PE/bin/65535sects.exe. Technically performance was already very good, but that was only due to crashing instantly 2018-07-01 19:28:01 +02:00
Mattiwatti f515484790
ReadBaseRelocationTable() refactor. Is it better now? Dunno really. This method may be slightly easier to use with both SEC_COMMIT and SEC_IMAGE mappings in the future if needed, but in the end they pretty much do the same thing. At least some more TitanEngine calls were killed off so that's something I suppose
Replaced dark and brooding "..."s in error messages with exclamation marks to better emphasise that this stuff is serious
2018-07-01 19:28:01 +02:00
Mattiwatti 1f485f313e
DBG: more robust debug directory parsing. Validate the RVA, type and size bounds for each debug directory entry, and do not stop after the one unrecognised (non-CV) entry
Protect against PDB paths that do not have a null terminator in the PE codeview info
2018-07-01 19:28:01 +02:00
Mattiwatti 6df9535ba4
Rewrite ReadTlsCallbacks() to use RtlImageDirectoryEntryToData and remove all TitanEngine calls. Also fix an anti-debug trick I found by accident: it is possible to have working TLS callbacks with a TLS directory size of 0. The loader does not check this field and always executes callbacks if they exist 2018-07-01 19:28:00 +02:00
Mattiwatti 28c03967c7
RvaToVa(): use SizeOfRawData instead of VirtualSize as the upper bound on section RVAs. This matches the behaviour of RtlImageRvaToSection for SEC_COMMIT mappings 2018-07-01 19:28:00 +02:00
Mattiwatti 9b0f9b5c59
Add clarifying comment/TODO re: invalid RVAs to ReadExportDirectory(). Don't feed your .avi collection to this function just yet 2018-07-01 19:28:00 +02:00
Mattiwatti a94c250c5d
[DBG] Rewrite ReadImportDirectory()
- Obtain the directory directly using RtlImageDirectoryEntryToData and ditch TitanEngine conversion helpers
- Use OFTs instead of FTs if possible, with FTs only as fallback
- Answer the pop quiz questions in comments re: ntdll loader behaviour and handle these cases appropriately
- Use THUNK_VAL() to obtain OFT/FT values independent of process and file bitness
- Always use ULONG64 for AddressOfData to be able to test for IMAGE_ORDINAL_FLAG64. Also return ULONG64 from RvaToVa(), and rva2offset too as a result of this. This makes these functions compatible with both 32 and 64 bit files regardless of process bitness. There shouldn't be any functional changes due to this, otherwise will revert/fix
- Require an import by name to have a non-null name in addition to not having the ordinal flag set. Otherwise treat it as an import by ordinal
- The ordinal value of an import by ordinal is obtained by (val & 0xffff), not (val &= ~ordinalFlag). The ordinal flag is now always removed to ensure the RVA is valid
- Give imports by ordinal a 'name' the same way dbghelp does, e.g. Ordinal57. Previously imports by ordinal were not being shown in the Symbols tab due to having no name. TODO: if we have the PDB for the file being imported from, we can overwrite or append the real function name later using the importee's export directory
- RvaToVa(): assert that RVA 0 always returns VA 0, because if this isn't the case something is seriously messed up
2018-07-01 19:27:59 +02:00
Mattiwatti 5ad21c69ee
- ReadDebugDirectory(): add about 20 years worth of missing debug directory type names
- symbolsourcedia.h: Add _global.h #include to prevent various macros like WINVER and _WIN32_WINNT from being redefined because Windows.h was indirectly included first
2018-07-01 19:27:59 +02:00
Mattiwatti fc9285ed2e
[DBG] Work on modinfo improvements:
- Add ImageNtHeaders() (clone of RtlImageNtHeaderEx which doesn't exist on XP) to obtain PE headers given a VA
- Add HEADER_FIELD() and THUNK_VAL() macros to module.h to allow accessing header fields independent of process and file bitness
- Add IMAGE_NT_HEADERS pointer to MODINFO, since anything related to parsing PEs needs this struct
- Read PE headers in GetModuleInfo(). Currently the headers are being parsed every time a TitanEngine helper function is called, the goal is to reduce this to once per module load
- GetModuleInfo(): eliminate all TitanEngine calls now that we have the headers
- Add RvaToVa() for SEC_COMMIT mappings. This can simultaneously serve as replacement for rva2offset helpers (pass base = 0). Preferably SEC_IMAGE should be used though as that way neither of these would be needed
- ReadExportDirectory(): use RtlImageDirectoryEntryToData() to obtain a PIMAGE_EXPORT_DIRECTORY and its size in one go to eliminate TitanEngine helper calls and RVA to offset conversions
- Answer burning questions re: Windows loader behaviour when parsing exports in comments
- (Minor) fix '>= 0' comparison against unsigned as this will always evaluate to true
- Add comment re: PDB search path order since it's wrong atm but I'm too scared of breaking something if I change this code myself
2018-07-01 19:27:59 +02:00
Duncan Ogilvie 013cd1e5f7
DBG: dont copy MODINFO and MODIMPORT/MODEXPORT structures 2018-07-01 19:27:59 +02:00