1
0
Fork 0
Commit Graph

4770 Commits

Author SHA1 Message Date
Duncan Ogilvie c1e62605e0
PROJECT: new README 2018-07-01 19:43:32 +02:00
Duncan Ogilvie 9804400df6
DBG: do not step if there is an enable breakpoint at CIP
closes #1721
2018-07-01 19:28:08 +02:00
Duncan Ogilvie 7bde267620
GUI: allow collapsing the side bar 2018-07-01 19:28:07 +02:00
Duncan Ogilvie e5467cf966
DBG: correctly update module list when changing module type 2018-07-01 19:28:07 +02:00
Duncan Ogilvie 0c8956f480
DBG+GUI: disable source debugging per default 2018-07-01 19:28:07 +02:00
Duncan Ogilvie 32b400b834
GUI: correctly show address column in search list view 2018-07-01 19:28:07 +02:00
Duncan Ogilvie 8c169ae2ed
DBG+BRIDGE+GUI: fix source loading 2018-07-01 19:28:06 +02:00
Duncan Ogilvie b63402066b
DBG: implement findSourceLineInfo by fileName + line in symbol source 2018-07-01 19:28:06 +02:00
Duncan Ogilvie 47d6efb59e
DBG: do not fully escape debug strings 2018-07-01 19:28:06 +02:00
Duncan Ogilvie b8ae4b1496
DBG: invalidate symbol source when MODINFO is destroyed 2018-07-01 19:28:06 +02:00
Duncan Ogilvie d70ed83a72
DBG: fix a bug in getLabel where jmp [MessageBoxA] would not be recognized correctly 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 717ded10e3
DBG: Fix solution dependency for Zydis 2018-07-01 19:28:05 +02:00
Duncan Ogilvie c8b6abd632
DBG: add pushfq mnemonic redirect 2018-07-01 19:28:05 +02:00
Duncan Ogilvie 4098dc8fb2
DBG: finally fix the handle leak in PDBDiaFile 2018-07-01 19:28:05 +02:00
Duncan Ogilvie 34279ebf08
GUI: fix performance bottleneck with Qt signals 2018-07-01 19:28:04 +02:00
Duncan Ogilvie 8af904fad6
DBG: fix assert in debug mode on pluginunloadall 2018-07-01 19:28:04 +02:00
Duncan Ogilvie 0bf7bd10ef
GUI: fix ReferenceView signals not being called correctly 2018-07-01 19:28:04 +02:00
Duncan Ogilvie d30bd428c6
PROJECT: change default startup project 2018-07-01 19:28:04 +02:00
Duncan Ogilvie 9e68ea3900
DBG: only store file hash in database if there is other data as well 2018-07-01 19:28:03 +02:00
Duncan Ogilvie 7d1afa0940
DBG+GUI: change layout of window title to be more helpful in the task bar 2018-07-01 19:28:03 +02:00
Duncan Ogilvie 05378fabb2
GUI: add copy header VA to disassembly menu 2018-07-01 19:28:03 +02:00
Duncan Ogilvie 2665df4eb3
DBG: added mod.headerva expression function 2018-07-01 19:28:03 +02:00
Duncan Ogilvie 87c3238de8
DBG (WIP): set up DIA file stream for profiling of a handle leak 2018-07-01 19:28:03 +02:00
Duncan Ogilvie 408b6eeff9
GUI: don't filter symbol list when not necessary 2018-07-01 19:28:02 +02:00
Duncan Ogilvie 62cd2bb915
BRIDGE: fix truncation crash in DbgGetLabelAt 2018-07-01 19:28:02 +02:00
Duncan Ogilvie d79586d02b
DBG: fix a crash in the Cleanup in downslib 2018-07-01 19:28:02 +02:00
Duncan Ogilvie 70b3149599
WIP: new symbol gui mostly working 2018-07-01 19:28:02 +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
Duncan Ogilvie 14da6c4448
DBG: clean up downslib 2018-07-01 19:28:00 +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 a4638d2ea9
DBG: misc. changes and fixes in SymbolSourceDIA:
- Rename SetThreadDescription to SetWin10ThreadDescription, to clarify that this function isn't actually useful to anyone. (ha ha, OK... but seriously, the same name is also used by the Windows SDK which apparently takes precedence and gets added as a static import, making it impossible to start the debugger on OSes other than Windows 10)
- Thread names are a good idea and they even kind of work on older Windows versions with NtQueryInformationThread(ThreadQuerySetWin32StartAddress), which is what e.g. Process Explorer and Process Hacker use. What *doesn't* work so well is lambdas. Added static functions SymbolsThread() and SourceLinesThread() to replace these. (before: x64dbg.dll!<lambda_fc00d3fb731b14a9b4857ac068d657c4>::<lambda_invoker_cdecl>. after: x64dbg.dll!SymbolSourceDIA::SymbolsThread). These should probably be file statics instead of class members, but they need access to private class functions
- GetModuleHandleA -> GetModuleHandleW. The former just calls the latter but with an extra string allocation and pointless unicode conversion
- Fix pedantic Clang warnings about member initialization order in ctor
- Qualify type name in call to virtual function in destructor, as this will be statically resolved and won't call any potential future implementations in derived classes (this can be further 'fixed' by making either the function or the class final so you'll get a compile time error if you try to do this later)
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
Duncan Ogilvie 4e88b399fe
Update DIA to 14.13.26128.0 + XP support 2018-07-01 19:27:58 +02:00
Duncan Ogilvie aa8a215895
DBG: use win32 threads instead of std::thread 2018-07-01 19:27:58 +02:00
ZehMatt 72ccf42298
Fix too early stream deletion. 2018-07-01 19:27:58 +02:00
ZehMatt cad8aed97d
Refactor PDB data loading via IStream, explicit file access. 2018-07-01 19:27:58 +02:00
ZehMatt c8af1f9144
Use correct PDBDiaFile instance. 2018-07-01 19:27:57 +02:00
Duncan Ogilvie 45b49995f3
DBG: fall back to resolving modules exports when no symbol is found 2018-07-01 19:27:57 +02:00
Duncan Ogilvie 73a5ffebd9
DBG: use export/import data from modules instead of from memory 2018-07-01 19:27:57 +02:00
Duncan Ogilvie 476bc093bc
DBG: add export and import parsing routines in module.cpp
#580
2018-07-01 19:27:57 +02:00
Duncan Ogilvie bee62fbbf0
DBG: add missing locks for ModInfoFromAddr 2018-07-01 19:27:56 +02:00
Duncan Ogilvie a2c52260f7
DBG: remove unused imports field from MODINFO 2018-07-01 19:27:56 +02:00