diff --git a/build.bat b/build.bat index 699c16a6..36b22ae2 100644 --- a/build.bat +++ b/build.bat @@ -62,7 +62,7 @@ build-wrapper --out-dir bw-output build.bat %2 if not defined APPVEYOR_PULL_REQUEST_NUMBER ( sonar-scanner -Dsonar.projectKey=x64dbg -Dsonar.sources=. -Dsonar.cfamily.build-wrapper-output=bw-output -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=mrexodia-github -Dsonar.login=%SONARQUBE_TOKEN% -Dsonar.exclusions=src/capstone_wrapper/**,src/dbg/btparser/**,src/gui_build/**,src/zydis_wrapper/zydis/** ) else ( -sonar-scanner -Dsonar.projectKey=x64dbg -Dsonar.sources=. -Dsonar.cfamily.build-wrapper-output=bw-output -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=mrexodia-github -Dsonar.login=%SONARQUBE_TOKEN% -Dsonar.exclusions=src/capstone_wrapper/**,src/dbg/btparser/**,src/gui_build/**,src/zydis_wrapper/zydis/** -Dsonar.analysis.mode=preview -Dsonar.github.pullRequest=%APPVEYOR_PULL_REQUEST_NUMBER% -Dsonar.github.repository=https://github.com/x64dbg/x64dbg -Dsonar.github.oauth=%GITHUB_TOKEN% +sonar-scanner -Dsonar.projectKey=x64dbg -Dsonar.sources=. -Dsonar.cfamily.build-wrapper-output=bw-output -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=mrexodia-github -Dsonar.login=%SONARQUBE_TOKEN% -Dsonar.exclusions=src/capstone_wrapper/**,src/dbg/btparser/**,src/gui_build/**,src/zydis_wrapper/zydis/** -Dsonar.analysis.mode=preview -Dsonar.github.pullRequest=%APPVEYOR_PULL_REQUEST_NUMBER% -Dsonar.github.repository=x64dbg/x64dbg -Dsonar.github.oauth=%GITHUB_TOKEN% ) goto :restorepath diff --git a/formatted.txt b/formatted.txt new file mode 100644 index 00000000..b6bb251d --- /dev/null +++ b/formatted.txt @@ -0,0 +1,536 @@ +src/bridge/Utf8Ini.h +src/bridge/_global.cpp +src/bridge/_global.h +src/bridge/bridgegraph.h +src/bridge/bridgelist.h +src/bridge/bridgemain.cpp +src/bridge/bridgemain.h +src/dbg/DeviceNameResolver/DeviceNameResolver.h +src/dbg/GetPeArch.h +src/dbg/TitanEngine/TitanEngine.h +src/dbg/TraceRecord.cpp +src/dbg/TraceRecord.h +src/dbg/XEDParse/XEDParse.h +src/dbg/_dbgfunctions.cpp +src/dbg/_dbgfunctions.h +src/dbg/_exports.cpp +src/dbg/_exports.h +src/dbg/_global.cpp +src/dbg/_global.h +src/dbg/_plugin_types.h +src/dbg/_plugins.cpp +src/dbg/_plugins.h +src/dbg/_scriptapi.h +src/dbg/_scriptapi_argument.cpp +src/dbg/_scriptapi_argument.h +src/dbg/_scriptapi_assembler.cpp +src/dbg/_scriptapi_assembler.h +src/dbg/_scriptapi_bookmark.cpp +src/dbg/_scriptapi_bookmark.h +src/dbg/_scriptapi_comment.cpp +src/dbg/_scriptapi_comment.h +src/dbg/_scriptapi_debug.cpp +src/dbg/_scriptapi_debug.h +src/dbg/_scriptapi_flag.cpp +src/dbg/_scriptapi_flag.h +src/dbg/_scriptapi_function.cpp +src/dbg/_scriptapi_function.h +src/dbg/_scriptapi_gui.cpp +src/dbg/_scriptapi_gui.h +src/dbg/_scriptapi_label.cpp +src/dbg/_scriptapi_label.h +src/dbg/_scriptapi_memory.cpp +src/dbg/_scriptapi_memory.h +src/dbg/_scriptapi_misc.cpp +src/dbg/_scriptapi_misc.h +src/dbg/_scriptapi_module.cpp +src/dbg/_scriptapi_module.h +src/dbg/_scriptapi_pattern.cpp +src/dbg/_scriptapi_pattern.h +src/dbg/_scriptapi_register.cpp +src/dbg/_scriptapi_register.h +src/dbg/_scriptapi_stack.cpp +src/dbg/_scriptapi_stack.h +src/dbg/_scriptapi_symbol.cpp +src/dbg/_scriptapi_symbol.h +src/dbg/addrinfo.cpp +src/dbg/addrinfo.h +src/dbg/analysis/AnalysisPass.cpp +src/dbg/analysis/AnalysisPass.h +src/dbg/analysis/BasicBlock.h +src/dbg/analysis/CodeFollowPass.cpp +src/dbg/analysis/CodeFollowPass.h +src/dbg/analysis/FunctionPass.cpp +src/dbg/analysis/FunctionPass.h +src/dbg/analysis/LinearPass.cpp +src/dbg/analysis/LinearPass.h +src/dbg/analysis/advancedanalysis.cpp +src/dbg/analysis/advancedanalysis.h +src/dbg/analysis/analysis.cpp +src/dbg/analysis/analysis.h +src/dbg/analysis/analysis_nukem.cpp +src/dbg/analysis/analysis_nukem.h +src/dbg/analysis/controlflowanalysis.cpp +src/dbg/analysis/controlflowanalysis.h +src/dbg/analysis/exceptiondirectoryanalysis.cpp +src/dbg/analysis/exceptiondirectoryanalysis.h +src/dbg/analysis/linearanalysis.cpp +src/dbg/analysis/linearanalysis.h +src/dbg/analysis/recursiveanalysis.cpp +src/dbg/analysis/recursiveanalysis.h +src/dbg/analysis/xrefsanalysis.cpp +src/dbg/analysis/xrefsanalysis.h +src/dbg/animate.cpp +src/dbg/animate.h +src/dbg/argument.cpp +src/dbg/argument.h +src/dbg/assemble.cpp +src/dbg/assemble.h +src/dbg/bookmark.cpp +src/dbg/bookmark.h +src/dbg/breakpoint.cpp +src/dbg/breakpoint.h +src/dbg/command.cpp +src/dbg/command.h +src/dbg/commandline.cpp +src/dbg/commandline.h +src/dbg/commandparser.cpp +src/dbg/commandparser.h +src/dbg/commands/cmd-all.h +src/dbg/commands/cmd-analysis.cpp +src/dbg/commands/cmd-analysis.h +src/dbg/commands/cmd-breakpoint-control.cpp +src/dbg/commands/cmd-breakpoint-control.h +src/dbg/commands/cmd-conditional-breakpoint-control.cpp +src/dbg/commands/cmd-conditional-breakpoint-control.h +src/dbg/commands/cmd-debug-control.cpp +src/dbg/commands/cmd-debug-control.h +src/dbg/commands/cmd-general-purpose.cpp +src/dbg/commands/cmd-general-purpose.h +src/dbg/commands/cmd-gui.cpp +src/dbg/commands/cmd-gui.h +src/dbg/commands/cmd-memory-operations.cpp +src/dbg/commands/cmd-memory-operations.h +src/dbg/commands/cmd-misc.cpp +src/dbg/commands/cmd-misc.h +src/dbg/commands/cmd-operating-system-control.cpp +src/dbg/commands/cmd-operating-system-control.h +src/dbg/commands/cmd-plugins.cpp +src/dbg/commands/cmd-plugins.h +src/dbg/commands/cmd-script.cpp +src/dbg/commands/cmd-script.h +src/dbg/commands/cmd-searching.cpp +src/dbg/commands/cmd-searching.h +src/dbg/commands/cmd-thread-control.cpp +src/dbg/commands/cmd-thread-control.h +src/dbg/commands/cmd-tracing.cpp +src/dbg/commands/cmd-tracing.h +src/dbg/commands/cmd-types.cpp +src/dbg/commands/cmd-types.h +src/dbg/commands/cmd-undocumented.cpp +src/dbg/commands/cmd-undocumented.h +src/dbg/commands/cmd-user-database.cpp +src/dbg/commands/cmd-user-database.h +src/dbg/commands/cmd-variables.cpp +src/dbg/commands/cmd-variables.h +src/dbg/commands/cmd-watch-control.cpp +src/dbg/commands/cmd-watch-control.h +src/dbg/comment.cpp +src/dbg/comment.h +src/dbg/console.cpp +src/dbg/console.h +src/dbg/database.cpp +src/dbg/database.h +src/dbg/datainst_helper.cpp +src/dbg/datainst_helper.h +src/dbg/dbghelp/dbghelp.h +src/dbg/dbghelp_safe.cpp +src/dbg/dbghelp_safe.h +src/dbg/debugger.cpp +src/dbg/debugger.h +src/dbg/debugger_cookie.h +src/dbg/debugger_tracing.h +src/dbg/disasm_fast.cpp +src/dbg/disasm_fast.h +src/dbg/disasm_helper.cpp +src/dbg/disasm_helper.h +src/dbg/dynamicmem.h +src/dbg/encodemap.cpp +src/dbg/encodemap.h +src/dbg/exception.cpp +src/dbg/exception.h +src/dbg/exhandlerinfo.cpp +src/dbg/exhandlerinfo.h +src/dbg/expressionfunctions.cpp +src/dbg/expressionfunctions.h +src/dbg/expressionparser.cpp +src/dbg/expressionparser.h +src/dbg/exprfunc.cpp +src/dbg/exprfunc.h +src/dbg/filehelper.cpp +src/dbg/filehelper.h +src/dbg/filemap.h +src/dbg/formatfunctions.cpp +src/dbg/formatfunctions.h +src/dbg/function.cpp +src/dbg/function.h +src/dbg/handle.h +src/dbg/handles.cpp +src/dbg/handles.h +src/dbg/historycontext.cpp +src/dbg/historycontext.h +src/dbg/jansson/jansson.h +src/dbg/jansson/jansson_config.h +src/dbg/jansson/jansson_x64dbg.h +src/dbg/jit.cpp +src/dbg/jit.h +src/dbg/keystone/arm.h +src/dbg/keystone/arm64.h +src/dbg/keystone/hexagon.h +src/dbg/keystone/keystone.h +src/dbg/keystone/mips.h +src/dbg/keystone/ppc.h +src/dbg/keystone/sparc.h +src/dbg/keystone/systemz.h +src/dbg/keystone/x86.h +src/dbg/label.cpp +src/dbg/label.h +src/dbg/log.cpp +src/dbg/loop.cpp +src/dbg/loop.h +src/dbg/lz4/lz4.h +src/dbg/lz4/lz4file.h +src/dbg/lz4/lz4hc.h +src/dbg/main.cpp +src/dbg/memory.cpp +src/dbg/memory.h +src/dbg/mnemonichelp.cpp +src/dbg/mnemonichelp.h +src/dbg/module.cpp +src/dbg/module.h +src/dbg/msgqueue.cpp +src/dbg/msgqueue.h +src/dbg/murmurhash.cpp +src/dbg/murmurhash.h +src/dbg/ntdll/ntdll.h +src/dbg/patches.cpp +src/dbg/patches.h +src/dbg/patternfind.cpp +src/dbg/patternfind.h +src/dbg/plugin_loader.cpp +src/dbg/plugin_loader.h +src/dbg/reference.cpp +src/dbg/reference.h +src/dbg/serializablemap.h +src/dbg/simplescript.cpp +src/dbg/simplescript.h +src/dbg/stackinfo.cpp +src/dbg/stackinfo.h +src/dbg/stringformat.cpp +src/dbg/stringformat.h +src/dbg/stringutils.cpp +src/dbg/stringutils.h +src/dbg/symbolinfo.cpp +src/dbg/symbolinfo.h +src/dbg/symcache.cpp +src/dbg/symcache.h +src/dbg/taskthread.h +src/dbg/tcpconnections.cpp +src/dbg/tcpconnections.h +src/dbg/test/general/dll/main.cpp +src/dbg/test/general/dll/main.h +src/dbg/test/general/exe/main.cpp +src/dbg/test/guard_page/main.cpp +src/dbg/thread.cpp +src/dbg/thread.h +src/dbg/threading.cpp +src/dbg/threading.h +src/dbg/types.cpp +src/dbg/types.h +src/dbg/typesparser.cpp +src/dbg/value.cpp +src/dbg/value.h +src/dbg/variable.cpp +src/dbg/variable.h +src/dbg/watch.cpp +src/dbg/watch.h +src/dbg/x64dbg.cpp +src/dbg/x64dbg.h +src/dbg/xrefs.cpp +src/dbg/xrefs.h +src/dbg/yara/yara.h +src/dbg/yara/yara/ahocorasick.h +src/dbg/yara/yara/arena.h +src/dbg/yara/yara/atoms.h +src/dbg/yara/yara/compiler.h +src/dbg/yara/yara/dotnet.h +src/dbg/yara/yara/elf.h +src/dbg/yara/yara/endian.h +src/dbg/yara/yara/error.h +src/dbg/yara/yara/exec.h +src/dbg/yara/yara/exefiles.h +src/dbg/yara/yara/filemap.h +src/dbg/yara/yara/globals.h +src/dbg/yara/yara/hash.h +src/dbg/yara/yara/hex_lexer.h +src/dbg/yara/yara/integers.h +src/dbg/yara/yara/lexer.h +src/dbg/yara/yara/libyara.h +src/dbg/yara/yara/limits.h +src/dbg/yara/yara/mem.h +src/dbg/yara/yara/modules.h +src/dbg/yara/yara/object.h +src/dbg/yara/yara/parser.h +src/dbg/yara/yara/pe.h +src/dbg/yara/yara/pe_utils.h +src/dbg/yara/yara/proc.h +src/dbg/yara/yara/re.h +src/dbg/yara/yara/re_lexer.h +src/dbg/yara/yara/rules.h +src/dbg/yara/yara/scan.h +src/dbg/yara/yara/sizedstr.h +src/dbg/yara/yara/stream.h +src/dbg/yara/yara/strutils.h +src/dbg/yara/yara/threading.h +src/dbg/yara/yara/types.h +src/dbg/yara/yara/utils.h +src/dbg_assert.h +src/dbg_types.h +src/exe/LoadResourceString.h +src/exe/crashdump.cpp +src/exe/crashdump.h +src/exe/icon.h +src/exe/resource.h +src/exe/strings.h +src/exe/x64dbg_exe.cpp +src/gui/Src/BasicView/AbstractTableView.cpp +src/gui/Src/BasicView/AbstractTableView.h +src/gui/Src/BasicView/Disassembly.cpp +src/gui/Src/BasicView/Disassembly.h +src/gui/Src/BasicView/HeaderButton.h +src/gui/Src/BasicView/HexDump.cpp +src/gui/Src/BasicView/HexDump.h +src/gui/Src/BasicView/HistoryLineEdit.cpp +src/gui/Src/BasicView/HistoryLineEdit.h +src/gui/Src/BasicView/LabeledSplitter.cpp +src/gui/Src/BasicView/LabeledSplitter.h +src/gui/Src/BasicView/LabeledSplitterDetachedWindow.cpp +src/gui/Src/BasicView/LabeledSplitterDetachedWindow.h +src/gui/Src/BasicView/ReferenceView.cpp +src/gui/Src/BasicView/ReferenceView.h +src/gui/Src/BasicView/SearchListView.cpp +src/gui/Src/BasicView/SearchListView.h +src/gui/Src/BasicView/SearchListViewTable.cpp +src/gui/Src/BasicView/SearchListViewTable.h +src/gui/Src/BasicView/ShortcutEdit.cpp +src/gui/Src/BasicView/ShortcutEdit.h +src/gui/Src/BasicView/StdTable.cpp +src/gui/Src/BasicView/StdTable.h +src/gui/Src/Bridge/Bridge.cpp +src/gui/Src/Bridge/Bridge.h +src/gui/Src/Bridge/BridgeResult.cpp +src/gui/Src/Bridge/BridgeResult.h +src/gui/Src/Disassembler/CsQBeaEngine.cpp +src/gui/Src/Disassembler/CsQBeaEngine.h +src/gui/Src/Disassembler/QBeaEngine.cpp +src/gui/Src/Disassembler/QBeaEngine.h +src/gui/Src/Disassembler/capstone_gui.cpp +src/gui/Src/Disassembler/capstone_gui.h +src/gui/Src/Disassembler/cs_capstone_gui.cpp +src/gui/Src/Disassembler/cs_capstone_gui.h +src/gui/Src/Exports.h +src/gui/Src/Gui/AboutDialog.cpp +src/gui/Src/Gui/AboutDialog.h +src/gui/Src/Gui/AppearanceDialog.cpp +src/gui/Src/Gui/AppearanceDialog.h +src/gui/Src/Gui/AssembleDialog.cpp +src/gui/Src/Gui/AssembleDialog.h +src/gui/Src/Gui/AttachDialog.cpp +src/gui/Src/Gui/AttachDialog.h +src/gui/Src/Gui/BreakpointMenu.cpp +src/gui/Src/Gui/BreakpointMenu.h +src/gui/Src/Gui/BreakpointsView.cpp +src/gui/Src/Gui/BreakpointsView.h +src/gui/Src/Gui/BrowseDialog.cpp +src/gui/Src/Gui/BrowseDialog.h +src/gui/Src/Gui/CPUArgumentWidget.cpp +src/gui/Src/Gui/CPUArgumentWidget.h +src/gui/Src/Gui/CPUDisassembly.cpp +src/gui/Src/Gui/CPUDisassembly.h +src/gui/Src/Gui/CPUDump.cpp +src/gui/Src/Gui/CPUDump.h +src/gui/Src/Gui/CPUInfoBox.cpp +src/gui/Src/Gui/CPUInfoBox.h +src/gui/Src/Gui/CPUMultiDump.cpp +src/gui/Src/Gui/CPUMultiDump.h +src/gui/Src/Gui/CPUSideBar.cpp +src/gui/Src/Gui/CPUSideBar.h +src/gui/Src/Gui/CPUStack.cpp +src/gui/Src/Gui/CPUStack.h +src/gui/Src/Gui/CPUWidget.cpp +src/gui/Src/Gui/CPUWidget.h +src/gui/Src/Gui/CalculatorDialog.cpp +src/gui/Src/Gui/CalculatorDialog.h +src/gui/Src/Gui/CallStackView.cpp +src/gui/Src/Gui/CallStackView.h +src/gui/Src/Gui/CloseDialog.cpp +src/gui/Src/Gui/CloseDialog.h +src/gui/Src/Gui/CodepageSelectionDialog.cpp +src/gui/Src/Gui/CodepageSelectionDialog.h +src/gui/Src/Gui/ColumnReorderDialog.cpp +src/gui/Src/Gui/ColumnReorderDialog.h +src/gui/Src/Gui/ComboBoxDialog.cpp +src/gui/Src/Gui/ComboBoxDialog.h +src/gui/Src/Gui/CommandHelpView.cpp +src/gui/Src/Gui/CommandHelpView.h +src/gui/Src/Gui/CommandLineEdit.cpp +src/gui/Src/Gui/CommandLineEdit.h +src/gui/Src/Gui/CustomizeMenuDialog.cpp +src/gui/Src/Gui/CustomizeMenuDialog.h +src/gui/Src/Gui/DataCopyDialog.cpp +src/gui/Src/Gui/DataCopyDialog.h +src/gui/Src/Gui/DebugStatusLabel.cpp +src/gui/Src/Gui/DebugStatusLabel.h +src/gui/Src/Gui/DisassemblerGraphView.cpp +src/gui/Src/Gui/DisassemblerGraphView.h +src/gui/Src/Gui/DisassemblyPopup.cpp +src/gui/Src/Gui/DisassemblyPopup.h +src/gui/Src/Gui/EditBreakpointDialog.cpp +src/gui/Src/Gui/EditBreakpointDialog.h +src/gui/Src/Gui/EditFloatRegister.cpp +src/gui/Src/Gui/EditFloatRegister.h +src/gui/Src/Gui/EntropyDialog.cpp +src/gui/Src/Gui/EntropyDialog.h +src/gui/Src/Gui/ExceptionRangeDialog.cpp +src/gui/Src/Gui/ExceptionRangeDialog.h +src/gui/Src/Gui/FavouriteTools.cpp +src/gui/Src/Gui/FavouriteTools.h +src/gui/Src/Gui/GotoDialog.cpp +src/gui/Src/Gui/GotoDialog.h +src/gui/Src/Gui/HandlesView.cpp +src/gui/Src/Gui/HandlesView.h +src/gui/Src/Gui/HexEditDialog.cpp +src/gui/Src/Gui/HexEditDialog.h +src/gui/Src/Gui/HexLineEdit.cpp +src/gui/Src/Gui/HexLineEdit.h +src/gui/Src/Gui/LineEditDialog.cpp +src/gui/Src/Gui/LineEditDialog.h +src/gui/Src/Gui/LocalVarsView.cpp +src/gui/Src/Gui/LocalVarsView.h +src/gui/Src/Gui/LogStatusLabel.cpp +src/gui/Src/Gui/LogStatusLabel.h +src/gui/Src/Gui/LogView.cpp +src/gui/Src/Gui/LogView.h +src/gui/Src/Gui/MainWindow.cpp +src/gui/Src/Gui/MainWindow.h +src/gui/Src/Gui/MemoryMapView.cpp +src/gui/Src/Gui/MemoryMapView.h +src/gui/Src/Gui/MessagesBreakpoints.cpp +src/gui/Src/Gui/MessagesBreakpoints.h +src/gui/Src/Gui/NotepadView.cpp +src/gui/Src/Gui/NotepadView.h +src/gui/Src/Gui/NotesManager.cpp +src/gui/Src/Gui/NotesManager.h +src/gui/Src/Gui/PageMemoryRights.cpp +src/gui/Src/Gui/PageMemoryRights.h +src/gui/Src/Gui/PatchDialog.cpp +src/gui/Src/Gui/PatchDialog.h +src/gui/Src/Gui/PatchDialogGroupSelector.cpp +src/gui/Src/Gui/PatchDialogGroupSelector.h +src/gui/Src/Gui/ReferenceManager.cpp +src/gui/Src/Gui/ReferenceManager.h +src/gui/Src/Gui/RegistersView.cpp +src/gui/Src/Gui/RegistersView.h +src/gui/Src/Gui/SEHChainView.cpp +src/gui/Src/Gui/SEHChainView.h +src/gui/Src/Gui/ScriptView.cpp +src/gui/Src/Gui/ScriptView.h +src/gui/Src/Gui/SelectFields.cpp +src/gui/Src/Gui/SelectFields.h +src/gui/Src/Gui/SettingsDialog.cpp +src/gui/Src/Gui/SettingsDialog.h +src/gui/Src/Gui/ShortcutsDialog.cpp +src/gui/Src/Gui/ShortcutsDialog.h +src/gui/Src/Gui/SimpleTraceDialog.cpp +src/gui/Src/Gui/SimpleTraceDialog.h +src/gui/Src/Gui/SourceView.cpp +src/gui/Src/Gui/SourceView.h +src/gui/Src/Gui/SourceViewerManager.cpp +src/gui/Src/Gui/SourceViewerManager.h +src/gui/Src/Gui/StructWidget.cpp +src/gui/Src/Gui/StructWidget.h +src/gui/Src/Gui/SymbolView.cpp +src/gui/Src/Gui/SymbolView.h +src/gui/Src/Gui/TabBar.cpp +src/gui/Src/Gui/TabBar.h +src/gui/Src/Gui/TabWidget.cpp +src/gui/Src/Gui/TabWidget.h +src/gui/Src/Gui/ThreadView.cpp +src/gui/Src/Gui/ThreadView.h +src/gui/Src/Gui/TimeWastedCounter.cpp +src/gui/Src/Gui/TimeWastedCounter.h +src/gui/Src/Gui/VirtualModDialog.cpp +src/gui/Src/Gui/VirtualModDialog.h +src/gui/Src/Gui/WatchView.cpp +src/gui/Src/Gui/WatchView.h +src/gui/Src/Gui/WordEditDialog.cpp +src/gui/Src/Gui/WordEditDialog.h +src/gui/Src/Gui/XrefBrowseDialog.cpp +src/gui/Src/Gui/XrefBrowseDialog.h +src/gui/Src/Gui/YaraRuleSelectionDialog.cpp +src/gui/Src/Gui/YaraRuleSelectionDialog.h +src/gui/Src/Imports.h +src/gui/Src/Memory/MemoryPage.cpp +src/gui/Src/Memory/MemoryPage.h +src/gui/Src/QEntropyView/Entropy.h +src/gui/Src/QEntropyView/QEntropyView.cpp +src/gui/Src/QEntropyView/QEntropyView.h +src/gui/Src/QHexEdit/ArrayCommand.cpp +src/gui/Src/QHexEdit/ArrayCommand.h +src/gui/Src/QHexEdit/QHexEdit.cpp +src/gui/Src/QHexEdit/QHexEdit.h +src/gui/Src/QHexEdit/QHexEditPrivate.cpp +src/gui/Src/QHexEdit/QHexEditPrivate.h +src/gui/Src/QHexEdit/XByteArray.cpp +src/gui/Src/QHexEdit/XByteArray.h +src/gui/Src/ThirdPartyLibs/ldconvert/ldconvert.h +src/gui/Src/ThirdPartyLibs/snowman/SnowmanView.h +src/gui/Src/Utils/ActionHelpers.h +src/gui/Src/Utils/Breakpoints.cpp +src/gui/Src/Utils/Breakpoints.h +src/gui/Src/Utils/CachedFontMetrics.h +src/gui/Src/Utils/CodeFolding.cpp +src/gui/Src/Utils/CodeFolding.h +src/gui/Src/Utils/Configuration.cpp +src/gui/Src/Utils/Configuration.h +src/gui/Src/Utils/EncodeMap.cpp +src/gui/Src/Utils/EncodeMap.h +src/gui/Src/Utils/FlickerThread.cpp +src/gui/Src/Utils/FlickerThread.h +src/gui/Src/Utils/HexValidator.cpp +src/gui/Src/Utils/HexValidator.h +src/gui/Src/Utils/LongLongValidator.cpp +src/gui/Src/Utils/LongLongValidator.h +src/gui/Src/Utils/MRUList.cpp +src/gui/Src/Utils/MRUList.h +src/gui/Src/Utils/MainWindowCloseThread.cpp +src/gui/Src/Utils/MainWindowCloseThread.h +src/gui/Src/Utils/MenuBuilder.cpp +src/gui/Src/Utils/MenuBuilder.h +src/gui/Src/Utils/MiscUtil.cpp +src/gui/Src/Utils/MiscUtil.h +src/gui/Src/Utils/RichTextPainter.cpp +src/gui/Src/Utils/RichTextPainter.h +src/gui/Src/Utils/StringUtil.cpp +src/gui/Src/Utils/StringUtil.h +src/gui/Src/Utils/UpdateChecker.cpp +src/gui/Src/Utils/UpdateChecker.h +src/gui/Src/Utils/VaHistory.h +src/gui/Src/Utils/ValidateExpressionThread.cpp +src/gui/Src/Utils/ValidateExpressionThread.h +src/gui/Src/main.cpp +src/gui/Src/main.h +src/launcher/x64dbg_launcher.cpp +src/zydis_wrapper/ZydisExportConfig.h +src/zydis_wrapper/zydis_wrapper.cpp +src/zydis_wrapper/zydis_wrapper.h diff --git a/hooks/AStyleWhore.exe b/hooks/AStyleWhore.exe index 2eddec0c..074fd174 100644 Binary files a/hooks/AStyleWhore.exe and b/hooks/AStyleWhore.exe differ diff --git a/hooks/README.md b/hooks/README.md index ebf3613d..445ea194 100644 --- a/hooks/README.md +++ b/hooks/README.md @@ -1,5 +1,5 @@ # hooks -This contains two binaries `AStyleWhore.exe` and `AStyle.dll` to format any code before you commit. They are signed with the serial number `‎37 ba b6 0f 84 53 0e 5e e5 76 ba d2 6d 45 4b 58`. +This contains two binaries `AStyleWhore.exe` and `AStyle.dll` to format any code before you commit. If you are unsure about the integrity of the files, don't hesitate to contact me (mrexodia). The source code is available at [BitBucket](https://bitbucket.org/mrexodia/astylewhore). The version of `AStyle.dll` is compiled from `AStyle_2.06_windows.zip` which came from [Sourceforge](https://sourceforge.net/projects/astyle/files/astyle/astyle%202.06/AStyle_2.06_windows.zip/download). \ No newline at end of file diff --git a/src/gui/Src/Disassembler/CsQBeaEngine.cpp b/src/gui/Src/Disassembler/CsQBeaEngine.cpp index 40e4c25d..96969b86 100644 --- a/src/gui/Src/Disassembler/CsQBeaEngine.cpp +++ b/src/gui/Src/Disassembler/CsQBeaEngine.cpp @@ -1,329 +1,329 @@ -#include "CsQBeaEngine.h" -#include "StringUtil.h" -#include "EncodeMap.h" -#include "CodeFolding.h" - -CsQBeaEngine::CsQBeaEngine(int maxModuleSize) - : _tokenizer(maxModuleSize), mCodeFoldingManager(nullptr), _bLongDataInst(false) -{ - CsCapstoneTokenizer::UpdateColors(); - UpdateDataInstructionMap(); - this->mEncodeMap = new EncodeMap(); -} - -CsQBeaEngine::~CsQBeaEngine() -{ - delete this->mEncodeMap; -} - -/** - * @brief Return the address of the nth instruction before the instruction pointed by ip. @n - * This function has been grabbed from OllyDbg ("Disassembleback" in asmserv.c) - * - * @param[in] data Address of the data to disassemble - * @param[in] base Original base address of the memory page (Required to disassemble destination addresses) - * @param[in] size Size of the data block pointed by data - * @param[in] ip RVA of the current instruction (Relative to data pointer) - * @param[in] n Number of instruction back - * - * @return Return the RVA (Relative to the data pointer) of the nth instruction before the instruction pointed by ip - */ -ulong CsQBeaEngine::DisassembleBack(byte_t* data, duint base, duint size, duint ip, int n) -{ - int i; - uint abuf[128], addr, back, cmdsize; - unsigned char* pdata; - - // Reset Disasm Structure - Capstone cp; - - // Check if the pointer is not null - if(data == NULL) - return 0; - - // Round the number of back instructions to 127 - if(n < 0) - n = 0; - else if(n > 127) - n = 127; - - // Check if the instruction pointer ip is not outside the memory range - if(ip >= size) - ip = size - 1; - - // Obvious answer - if(n == 0) - return ip; - - if(ip < (uint)n) - return ip; - - //TODO: buffer overflow due to unchecked "back" value - back = MAX_DISASM_BUFFER * (n + 3); // Instruction length limited to 16 - - if(ip < back) - back = ip; - - addr = ip - back; - if(mCodeFoldingManager && mCodeFoldingManager->isFolded(addr + base)) - { - duint newback = mCodeFoldingManager->getFoldBegin(addr + base); - if(newback >= base && newback < size + base) - addr = newback - base; - } - - pdata = data + addr; - - for(i = 0; addr < ip; i++) - { - abuf[i % 128] = addr; - - if(mCodeFoldingManager && mCodeFoldingManager->isFolded(addr + base)) - { - duint newaddr = mCodeFoldingManager->getFoldBegin(addr + base); - if(newaddr >= base) - { - addr = newaddr - base; - } - cmdsize = mCodeFoldingManager->getFoldEnd(addr + base) - (addr + base) + 1; - } - else - { - if(!cp.DisassembleSafe(addr + base, pdata, (int)size)) - cmdsize = 2; //heuristic for better output (FF FE or FE FF are usually part of an instruction) - else - cmdsize = cp.Size(); - - cmdsize = mEncodeMap->getDataSize(base + addr, cmdsize); - - } - - - pdata += cmdsize; - addr += cmdsize; - back -= cmdsize; - size -= cmdsize; - } - - if(i < n) - return abuf[0]; - else - return abuf[(i - n + 128) % 128]; - -} - -/** - * @brief Return the address of the nth instruction after the instruction pointed by ip. @n - * This function has been grabbed from OllyDbg ("Disassembleforward" in asmserv.c) - * - * @param[in] data Address of the data to disassemble - * @param[in] base Original base address of the memory page (Required to disassemble destination addresses) - * @param[in] size Size of the data block pointed by data - * @param[in] ip RVA of the current instruction (Relative to data pointer) - * @param[in] n Number of instruction next - * - * @return Return the RVA (Relative to the data pointer) of the nth instruction after the instruction pointed by ip - */ -ulong CsQBeaEngine::DisassembleNext(byte_t* data, duint base, duint size, duint ip, int n) -{ - int i; - uint cmdsize; - unsigned char* pdata; - - // Reset Disasm Structure - Capstone cp; - - if(data == NULL) - return 0; - - if(ip >= size) - ip = size - 1; - - if(n <= 0) - return ip; - - - pdata = data + ip; - size -= ip; - - for(i = 0; i < n && size > 0; i++) - { - if(mCodeFoldingManager && mCodeFoldingManager->isFolded(ip + base)) - { - cmdsize = mCodeFoldingManager->getFoldEnd(ip + base) - (ip + base) + 1; - } - else - { - if(!cp.DisassembleSafe(ip + base, pdata, (int)size)) - cmdsize = 1; - else - cmdsize = cp.Size(); - - cmdsize = mEncodeMap->getDataSize(base + ip, cmdsize); - - } - - pdata += cmdsize; - ip += cmdsize; - size -= cmdsize; - } - - return ip; -} - -/** - * @brief Disassemble the instruction at the given ip RVA. - * - * @param[in] data Pointer to memory data (Can be either a buffer or the original data memory) - * @param[in] size Size of the memory pointed by data (Can be the memory page size if data points to the original memory page base address) - * @param[in] origBase Original base address of the memory page (Required to disassemble destination addresses) - * @param[in] origInstRVA Original Instruction RVA of the instruction to disassemble - * - * @return Return the disassembled instruction - */ -Instruction_t CsQBeaEngine::DisassembleAt(byte_t* data, duint size, duint origBase, duint origInstRVA, bool datainstr) -{ - if(datainstr) - { - ENCODETYPE type = mEncodeMap->getDataType(origBase + origInstRVA); - if(!mEncodeMap->isCode(type)) - return DecodeDataAt(data, size, origBase, origInstRVA, type); - } - //tokenize - CapstoneTokenizer::InstructionToken cap; - _tokenizer.Tokenize(origBase + origInstRVA, data, size, cap); - int len = _tokenizer.Size(); - - const auto & cp = _tokenizer.GetCapstone(); - bool success = cp.Success(); - - - auto branchType = Instruction_t::None; - Instruction_t wInst; - if(success && (cp.InGroup(CS_GRP_JUMP) || cp.IsLoop() || cp.InGroup(CS_GRP_CALL) || cp.InGroup(CS_GRP_RET))) - { - wInst.branchDestination = DbgGetBranchDestination(origBase + origInstRVA); - switch(cp.GetId()) - { - case X86_INS_JMP: - case X86_INS_LJMP: - branchType = Instruction_t::Unconditional; - break; - case X86_INS_CALL: - case X86_INS_LCALL: - branchType = Instruction_t::Call; - break; - default: - branchType = cp.InGroup(CS_GRP_RET) ? Instruction_t::None : Instruction_t::Conditional; - break; - } - } - else - wInst.branchDestination = 0; - - wInst.instStr = QString(cp.InstructionText().c_str()); - wInst.dump = QByteArray((const char*)data, len); - wInst.rva = origInstRVA; - if(mCodeFoldingManager && mCodeFoldingManager->isFolded(origInstRVA)) - wInst.length = mCodeFoldingManager->getFoldEnd(origInstRVA + origBase) - (origInstRVA + origBase) + 1; - else - wInst.length = len; - wInst.branchType = branchType; - wInst.tokens = cap; - - if(success) - { - cp.RegInfo(reginfo); - cp.FlagInfo(flaginfo); - - auto flaginfo2reginfo = [](uint8_t info) - { - auto result = 0; -#define checkFlag(test, reg) result |= (info & test) == test ? reg : 0 - checkFlag(Capstone::Modify, Capstone::Write); - checkFlag(Capstone::Prior, Capstone::None); - checkFlag(Capstone::Reset, Capstone::Write); - checkFlag(Capstone::Set, Capstone::Write); - checkFlag(Capstone::Test, Capstone::Read); - checkFlag(Capstone::Undefined, Capstone::None); -#undef checkFlag - return result; - }; - - for(uint8_t i = Capstone::FLAG_INVALID; i < Capstone::FLAG_ENDING; i++) - if(flaginfo[i]) - { - reginfo[X86_REG_EFLAGS] = Capstone::None; - wInst.regsReferenced.push_back({cp.FlagName(Capstone::Flag(i)), flaginfo2reginfo(flaginfo[i])}); - } - - reginfo[ArchValue(X86_REG_EIP, X86_REG_RIP)] = Capstone::None; - for(uint8_t i = X86_REG_INVALID; i < X86_REG_ENDING; i++) - if(reginfo[i]) - wInst.regsReferenced.push_back({cp.RegName(x86_reg(i)), reginfo[i]}); - } - - return wInst; -} - -Instruction_t CsQBeaEngine::DecodeDataAt(byte_t* data, duint size, duint origBase, duint origInstRVA, ENCODETYPE type) -{ - //tokenize - CapstoneTokenizer::InstructionToken cap; - - auto & infoIter = dataInstMap.find(type); - if(infoIter == dataInstMap.end()) - infoIter = dataInstMap.find(enc_byte); - - int len = mEncodeMap->getDataSize(origBase + origInstRVA, 1); - - QString mnemonic = _bLongDataInst ? infoIter.value().longName : infoIter.value().shortName; - - len = std::min(len, (int)size); - - QString datastr = GetDataTypeString(data, len, type); - - _tokenizer.TokenizeData(mnemonic, datastr, cap); - - Instruction_t wInst; - wInst.instStr = mnemonic + " " + datastr; - wInst.dump = QByteArray((const char*)data, len); - wInst.rva = origInstRVA; - wInst.length = len; - wInst.branchType = Instruction_t::None; - wInst.branchDestination = 0; - wInst.tokens = cap; - - return wInst; -} - -void CsQBeaEngine::UpdateDataInstructionMap() -{ - dataInstMap.clear(); - dataInstMap.insert(enc_byte, {"db", "byte", "int8"}); - dataInstMap.insert(enc_word, {"dw", "word", "short"}); - dataInstMap.insert(enc_dword, {"dd", "dword", "int"}); - dataInstMap.insert(enc_fword, {"df", "fword", "fword"}); - dataInstMap.insert(enc_qword, {"dq", "qword", "long"}); - dataInstMap.insert(enc_tbyte, {"tbyte", "tbyte", "tbyte"}); - dataInstMap.insert(enc_oword, {"oword", "oword", "oword"}); - dataInstMap.insert(enc_mmword, {"mmword", "mmword", "long long"}); - dataInstMap.insert(enc_xmmword, {"xmmword", "xmmword", "_m128"}); - dataInstMap.insert(enc_ymmword, {"ymmword", "ymmword", "_m256"}); - dataInstMap.insert(enc_real4, {"real4", "real4", "float"}); - dataInstMap.insert(enc_real8, {"real8", "real8", "double"}); - dataInstMap.insert(enc_real10, {"real10", "real10", "long double"}); - dataInstMap.insert(enc_ascii, {"ascii", "ascii", "string"}); - dataInstMap.insert(enc_unicode, {"unicode", "unicode", "wstring"}); -} - -void CsQBeaEngine::setCodeFoldingManager(CodeFoldingHelper* CodeFoldingManager) -{ - mCodeFoldingManager = CodeFoldingManager; -} - -void CsQBeaEngine::UpdateConfig() -{ - _bLongDataInst = ConfigBool("Disassembler", "LongDataInstruction"); - _tokenizer.UpdateConfig(); -} +#include "CsQBeaEngine.h" +#include "StringUtil.h" +#include "EncodeMap.h" +#include "CodeFolding.h" + +CsQBeaEngine::CsQBeaEngine(int maxModuleSize) + : _tokenizer(maxModuleSize), mCodeFoldingManager(nullptr), _bLongDataInst(false) +{ + CsCapstoneTokenizer::UpdateColors(); + UpdateDataInstructionMap(); + this->mEncodeMap = new EncodeMap(); +} + +CsQBeaEngine::~CsQBeaEngine() +{ + delete this->mEncodeMap; +} + +/** + * @brief Return the address of the nth instruction before the instruction pointed by ip. @n + * This function has been grabbed from OllyDbg ("Disassembleback" in asmserv.c) + * + * @param[in] data Address of the data to disassemble + * @param[in] base Original base address of the memory page (Required to disassemble destination addresses) + * @param[in] size Size of the data block pointed by data + * @param[in] ip RVA of the current instruction (Relative to data pointer) + * @param[in] n Number of instruction back + * + * @return Return the RVA (Relative to the data pointer) of the nth instruction before the instruction pointed by ip + */ +ulong CsQBeaEngine::DisassembleBack(byte_t* data, duint base, duint size, duint ip, int n) +{ + int i; + uint abuf[128], addr, back, cmdsize; + unsigned char* pdata; + + // Reset Disasm Structure + Capstone cp; + + // Check if the pointer is not null + if(data == NULL) + return 0; + + // Round the number of back instructions to 127 + if(n < 0) + n = 0; + else if(n > 127) + n = 127; + + // Check if the instruction pointer ip is not outside the memory range + if(ip >= size) + ip = size - 1; + + // Obvious answer + if(n == 0) + return ip; + + if(ip < (uint)n) + return ip; + + //TODO: buffer overflow due to unchecked "back" value + back = MAX_DISASM_BUFFER * (n + 3); // Instruction length limited to 16 + + if(ip < back) + back = ip; + + addr = ip - back; + if(mCodeFoldingManager && mCodeFoldingManager->isFolded(addr + base)) + { + duint newback = mCodeFoldingManager->getFoldBegin(addr + base); + if(newback >= base && newback < size + base) + addr = newback - base; + } + + pdata = data + addr; + + for(i = 0; addr < ip; i++) + { + abuf[i % 128] = addr; + + if(mCodeFoldingManager && mCodeFoldingManager->isFolded(addr + base)) + { + duint newaddr = mCodeFoldingManager->getFoldBegin(addr + base); + if(newaddr >= base) + { + addr = newaddr - base; + } + cmdsize = mCodeFoldingManager->getFoldEnd(addr + base) - (addr + base) + 1; + } + else + { + if(!cp.DisassembleSafe(addr + base, pdata, (int)size)) + cmdsize = 2; //heuristic for better output (FF FE or FE FF are usually part of an instruction) + else + cmdsize = cp.Size(); + + cmdsize = mEncodeMap->getDataSize(base + addr, cmdsize); + + } + + + pdata += cmdsize; + addr += cmdsize; + back -= cmdsize; + size -= cmdsize; + } + + if(i < n) + return abuf[0]; + else + return abuf[(i - n + 128) % 128]; + +} + +/** + * @brief Return the address of the nth instruction after the instruction pointed by ip. @n + * This function has been grabbed from OllyDbg ("Disassembleforward" in asmserv.c) + * + * @param[in] data Address of the data to disassemble + * @param[in] base Original base address of the memory page (Required to disassemble destination addresses) + * @param[in] size Size of the data block pointed by data + * @param[in] ip RVA of the current instruction (Relative to data pointer) + * @param[in] n Number of instruction next + * + * @return Return the RVA (Relative to the data pointer) of the nth instruction after the instruction pointed by ip + */ +ulong CsQBeaEngine::DisassembleNext(byte_t* data, duint base, duint size, duint ip, int n) +{ + int i; + uint cmdsize; + unsigned char* pdata; + + // Reset Disasm Structure + Capstone cp; + + if(data == NULL) + return 0; + + if(ip >= size) + ip = size - 1; + + if(n <= 0) + return ip; + + + pdata = data + ip; + size -= ip; + + for(i = 0; i < n && size > 0; i++) + { + if(mCodeFoldingManager && mCodeFoldingManager->isFolded(ip + base)) + { + cmdsize = mCodeFoldingManager->getFoldEnd(ip + base) - (ip + base) + 1; + } + else + { + if(!cp.DisassembleSafe(ip + base, pdata, (int)size)) + cmdsize = 1; + else + cmdsize = cp.Size(); + + cmdsize = mEncodeMap->getDataSize(base + ip, cmdsize); + + } + + pdata += cmdsize; + ip += cmdsize; + size -= cmdsize; + } + + return ip; +} + +/** + * @brief Disassemble the instruction at the given ip RVA. + * + * @param[in] data Pointer to memory data (Can be either a buffer or the original data memory) + * @param[in] size Size of the memory pointed by data (Can be the memory page size if data points to the original memory page base address) + * @param[in] origBase Original base address of the memory page (Required to disassemble destination addresses) + * @param[in] origInstRVA Original Instruction RVA of the instruction to disassemble + * + * @return Return the disassembled instruction + */ +Instruction_t CsQBeaEngine::DisassembleAt(byte_t* data, duint size, duint origBase, duint origInstRVA, bool datainstr) +{ + if(datainstr) + { + ENCODETYPE type = mEncodeMap->getDataType(origBase + origInstRVA); + if(!mEncodeMap->isCode(type)) + return DecodeDataAt(data, size, origBase, origInstRVA, type); + } + //tokenize + CapstoneTokenizer::InstructionToken cap; + _tokenizer.Tokenize(origBase + origInstRVA, data, size, cap); + int len = _tokenizer.Size(); + + const auto & cp = _tokenizer.GetCapstone(); + bool success = cp.Success(); + + + auto branchType = Instruction_t::None; + Instruction_t wInst; + if(success && (cp.InGroup(CS_GRP_JUMP) || cp.IsLoop() || cp.InGroup(CS_GRP_CALL) || cp.InGroup(CS_GRP_RET))) + { + wInst.branchDestination = DbgGetBranchDestination(origBase + origInstRVA); + switch(cp.GetId()) + { + case X86_INS_JMP: + case X86_INS_LJMP: + branchType = Instruction_t::Unconditional; + break; + case X86_INS_CALL: + case X86_INS_LCALL: + branchType = Instruction_t::Call; + break; + default: + branchType = cp.InGroup(CS_GRP_RET) ? Instruction_t::None : Instruction_t::Conditional; + break; + } + } + else + wInst.branchDestination = 0; + + wInst.instStr = QString(cp.InstructionText().c_str()); + wInst.dump = QByteArray((const char*)data, len); + wInst.rva = origInstRVA; + if(mCodeFoldingManager && mCodeFoldingManager->isFolded(origInstRVA)) + wInst.length = mCodeFoldingManager->getFoldEnd(origInstRVA + origBase) - (origInstRVA + origBase) + 1; + else + wInst.length = len; + wInst.branchType = branchType; + wInst.tokens = cap; + + if(success) + { + cp.RegInfo(reginfo); + cp.FlagInfo(flaginfo); + + auto flaginfo2reginfo = [](uint8_t info) + { + auto result = 0; +#define checkFlag(test, reg) result |= (info & test) == test ? reg : 0 + checkFlag(Capstone::Modify, Capstone::Write); + checkFlag(Capstone::Prior, Capstone::None); + checkFlag(Capstone::Reset, Capstone::Write); + checkFlag(Capstone::Set, Capstone::Write); + checkFlag(Capstone::Test, Capstone::Read); + checkFlag(Capstone::Undefined, Capstone::None); +#undef checkFlag + return result; + }; + + for(uint8_t i = Capstone::FLAG_INVALID; i < Capstone::FLAG_ENDING; i++) + if(flaginfo[i]) + { + reginfo[X86_REG_EFLAGS] = Capstone::None; + wInst.regsReferenced.push_back({cp.FlagName(Capstone::Flag(i)), flaginfo2reginfo(flaginfo[i])}); + } + + reginfo[ArchValue(X86_REG_EIP, X86_REG_RIP)] = Capstone::None; + for(uint8_t i = X86_REG_INVALID; i < X86_REG_ENDING; i++) + if(reginfo[i]) + wInst.regsReferenced.push_back({cp.RegName(x86_reg(i)), reginfo[i]}); + } + + return wInst; +} + +Instruction_t CsQBeaEngine::DecodeDataAt(byte_t* data, duint size, duint origBase, duint origInstRVA, ENCODETYPE type) +{ + //tokenize + CapstoneTokenizer::InstructionToken cap; + + auto & infoIter = dataInstMap.find(type); + if(infoIter == dataInstMap.end()) + infoIter = dataInstMap.find(enc_byte); + + int len = mEncodeMap->getDataSize(origBase + origInstRVA, 1); + + QString mnemonic = _bLongDataInst ? infoIter.value().longName : infoIter.value().shortName; + + len = std::min(len, (int)size); + + QString datastr = GetDataTypeString(data, len, type); + + _tokenizer.TokenizeData(mnemonic, datastr, cap); + + Instruction_t wInst; + wInst.instStr = mnemonic + " " + datastr; + wInst.dump = QByteArray((const char*)data, len); + wInst.rva = origInstRVA; + wInst.length = len; + wInst.branchType = Instruction_t::None; + wInst.branchDestination = 0; + wInst.tokens = cap; + + return wInst; +} + +void CsQBeaEngine::UpdateDataInstructionMap() +{ + dataInstMap.clear(); + dataInstMap.insert(enc_byte, {"db", "byte", "int8"}); + dataInstMap.insert(enc_word, {"dw", "word", "short"}); + dataInstMap.insert(enc_dword, {"dd", "dword", "int"}); + dataInstMap.insert(enc_fword, {"df", "fword", "fword"}); + dataInstMap.insert(enc_qword, {"dq", "qword", "long"}); + dataInstMap.insert(enc_tbyte, {"tbyte", "tbyte", "tbyte"}); + dataInstMap.insert(enc_oword, {"oword", "oword", "oword"}); + dataInstMap.insert(enc_mmword, {"mmword", "mmword", "long long"}); + dataInstMap.insert(enc_xmmword, {"xmmword", "xmmword", "_m128"}); + dataInstMap.insert(enc_ymmword, {"ymmword", "ymmword", "_m256"}); + dataInstMap.insert(enc_real4, {"real4", "real4", "float"}); + dataInstMap.insert(enc_real8, {"real8", "real8", "double"}); + dataInstMap.insert(enc_real10, {"real10", "real10", "long double"}); + dataInstMap.insert(enc_ascii, {"ascii", "ascii", "string"}); + dataInstMap.insert(enc_unicode, {"unicode", "unicode", "wstring"}); +} + +void CsQBeaEngine::setCodeFoldingManager(CodeFoldingHelper* CodeFoldingManager) +{ + mCodeFoldingManager = CodeFoldingManager; +} + +void CsQBeaEngine::UpdateConfig() +{ + _bLongDataInst = ConfigBool("Disassembler", "LongDataInstruction"); + _tokenizer.UpdateConfig(); +} diff --git a/src/gui/Src/Disassembler/CsQBeaEngine.h b/src/gui/Src/Disassembler/CsQBeaEngine.h index 173bde4d..6db9e536 100644 --- a/src/gui/Src/Disassembler/CsQBeaEngine.h +++ b/src/gui/Src/Disassembler/CsQBeaEngine.h @@ -1,47 +1,47 @@ -#ifndef CSQBEAENGINE_H -#define CSQBEAENGINE_H - -#include -#include -#include "cs_capstone_gui.h" -#include "QBeaEngine.h" // for instruction_t - -class EncodeMap; -class CodeFoldingHelper; - -class CsQBeaEngine -{ -public: - explicit CsQBeaEngine(int maxModuleSize); - ~CsQBeaEngine(); - ulong DisassembleBack(byte_t* data, duint base, duint size, duint ip, int n); - ulong DisassembleNext(byte_t* data, duint base, duint size, duint ip, int n); - Instruction_t DisassembleAt(byte_t* data, duint size, duint origBase, duint origInstRVA, bool datainstr = true); - Instruction_t DecodeDataAt(byte_t* data, duint size, duint origBase, duint origInstRVA, ENCODETYPE type); - void setCodeFoldingManager(CodeFoldingHelper* CodeFoldingManager); - void UpdateConfig(); - - EncodeMap* getEncodeMap() - { - return mEncodeMap; - } - -private: - struct DataInstructionInfo - { - QString shortName; - QString longName; - QString cName; - }; - - void UpdateDataInstructionMap(); - CsCapstoneTokenizer _tokenizer; - QHash dataInstMap; - bool _bLongDataInst; - EncodeMap* mEncodeMap; - CodeFoldingHelper* mCodeFoldingManager; - uint8_t reginfo[X86_REG_ENDING]; - uint8_t flaginfo[Capstone::FLAG_ENDING]; -}; - -#endif // CSQBEAENGINE_H +#ifndef CSQBEAENGINE_H +#define CSQBEAENGINE_H + +#include +#include +#include "cs_capstone_gui.h" +#include "QBeaEngine.h" // for instruction_t + +class EncodeMap; +class CodeFoldingHelper; + +class CsQBeaEngine +{ +public: + explicit CsQBeaEngine(int maxModuleSize); + ~CsQBeaEngine(); + ulong DisassembleBack(byte_t* data, duint base, duint size, duint ip, int n); + ulong DisassembleNext(byte_t* data, duint base, duint size, duint ip, int n); + Instruction_t DisassembleAt(byte_t* data, duint size, duint origBase, duint origInstRVA, bool datainstr = true); + Instruction_t DecodeDataAt(byte_t* data, duint size, duint origBase, duint origInstRVA, ENCODETYPE type); + void setCodeFoldingManager(CodeFoldingHelper* CodeFoldingManager); + void UpdateConfig(); + + EncodeMap* getEncodeMap() + { + return mEncodeMap; + } + +private: + struct DataInstructionInfo + { + QString shortName; + QString longName; + QString cName; + }; + + void UpdateDataInstructionMap(); + CsCapstoneTokenizer _tokenizer; + QHash dataInstMap; + bool _bLongDataInst; + EncodeMap* mEncodeMap; + CodeFoldingHelper* mCodeFoldingManager; + uint8_t reginfo[X86_REG_ENDING]; + uint8_t flaginfo[Capstone::FLAG_ENDING]; +}; + +#endif // CSQBEAENGINE_H diff --git a/src/gui/Src/Disassembler/cs_capstone_gui.cpp b/src/gui/Src/Disassembler/cs_capstone_gui.cpp index ee88e5fb..02fa2c3f 100644 --- a/src/gui/Src/Disassembler/cs_capstone_gui.cpp +++ b/src/gui/Src/Disassembler/cs_capstone_gui.cpp @@ -1,617 +1,617 @@ -#include "cs_capstone_gui.h" -#include "Configuration.h" -#include "StringUtil.h" -#include "CachedFontMetrics.h" - -CsCapstoneTokenizer::CsCapstoneTokenizer(int maxModuleLength) - : _maxModuleLength(maxModuleLength), - _success(false), - isNop(false), - _mnemonicType(CapstoneTokenizer::TokenType::Uncategorized) -{ - SetConfig(false, false, false, false, false, false, false); -} - -static CapstoneTokenizer::TokenColor colorNamesMap[CapstoneTokenizer::TokenType::Last]; -QHash CsCapstoneTokenizer::stringPoolMap; -int CsCapstoneTokenizer::poolId = 0; - -void CsCapstoneTokenizer::addColorName(CapstoneTokenizer::TokenType type, QString color, QString backgroundColor) -{ - colorNamesMap[int(type)] = CapstoneTokenizer::TokenColor(color, backgroundColor); -} - -void CsCapstoneTokenizer::addStringsToPool(const QString & strings) -{ - QStringList stringList = strings.split(' ', QString::SkipEmptyParts); - for(const QString & string : stringList) - stringPoolMap.insert(string, poolId); - poolId++; -} - -void CsCapstoneTokenizer::UpdateColors() -{ - //filling - addColorName(CapstoneTokenizer::TokenType::Comma, "InstructionCommaColor", "InstructionCommaBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::Space, "", ""); - addColorName(CapstoneTokenizer::TokenType::ArgumentSpace, "", ""); - addColorName(CapstoneTokenizer::TokenType::MemoryOperatorSpace, "", ""); - //general instruction parts - addColorName(CapstoneTokenizer::TokenType::Prefix, "InstructionPrefixColor", "InstructionPrefixBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::Uncategorized, "InstructionUncategorizedColor", "InstructionUncategorizedBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::Address, "InstructionAddressColor", "InstructionAddressBackgroundColor"); //jump/call destinations - addColorName(CapstoneTokenizer::TokenType::Value, "InstructionValueColor", "InstructionValueBackgroundColor"); - //mnemonics - addColorName(CapstoneTokenizer::TokenType::MnemonicNormal, "InstructionMnemonicColor", "InstructionMnemonicBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicPushPop, "InstructionPushPopColor", "InstructionPushPopBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicCall, "InstructionCallColor", "InstructionCallBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicRet, "InstructionRetColor", "InstructionRetBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicCondJump, "InstructionConditionalJumpColor", "InstructionConditionalJumpBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicUncondJump, "InstructionUnconditionalJumpColor", "InstructionUnconditionalJumpBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicNop, "InstructionNopColor", "InstructionNopBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicFar, "InstructionFarColor", "InstructionFarBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicInt3, "InstructionInt3Color", "InstructionInt3BackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MnemonicUnusual, "InstructionUnusualColor", "InstructionUnusualBackgroundColor"); - //memory - addColorName(CapstoneTokenizer::TokenType::MemorySize, "InstructionMemorySizeColor", "InstructionMemorySizeBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MemorySegment, "InstructionMemorySegmentColor", "InstructionMemorySegmentBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MemoryBrackets, "InstructionMemoryBracketsColor", "InstructionMemoryBracketsBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MemoryStackBrackets, "InstructionMemoryStackBracketsColor", "InstructionMemoryStackBracketsBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MemoryBaseRegister, "InstructionMemoryBaseRegisterColor", "InstructionMemoryBaseRegisterBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MemoryIndexRegister, "InstructionMemoryIndexRegisterColor", "InstructionMemoryIndexRegisterBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MemoryScale, "InstructionMemoryScaleColor", "InstructionMemoryScaleBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MemoryOperator, "InstructionMemoryOperatorColor", "InstructionMemoryOperatorBackgroundColor"); - //registers - addColorName(CapstoneTokenizer::TokenType::GeneralRegister, "InstructionGeneralRegisterColor", "InstructionGeneralRegisterBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::FpuRegister, "InstructionFpuRegisterColor", "InstructionFpuRegisterBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::MmxRegister, "InstructionMmxRegisterColor", "InstructionMmxRegisterBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::XmmRegister, "InstructionXmmRegisterColor", "InstructionXmmRegisterBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::YmmRegister, "InstructionYmmRegisterColor", "InstructionYmmRegisterBackgroundColor"); - addColorName(CapstoneTokenizer::TokenType::ZmmRegister, "InstructionZmmRegisterColor", "InstructionZmmRegisterBackgroundColor"); -} - -void CsCapstoneTokenizer::UpdateStringPool() -{ - poolId = 0; - stringPoolMap.clear(); - // These registers must be in lower case. - addStringsToPool("rax eax ax al ah"); - addStringsToPool("rbx ebx bx bl bh"); - addStringsToPool("rcx ecx cx cl ch"); - addStringsToPool("rdx edx dx dl dh"); - addStringsToPool("rsi esi si sil"); - addStringsToPool("rdi edi di dil"); - addStringsToPool("rbp ebp bp bpl"); - addStringsToPool("rsp esp sp spl"); - addStringsToPool("r8 r8d r8w r8b"); - addStringsToPool("r9 r9d r9w r9b"); - addStringsToPool("r10 r10d r10w r10b"); - addStringsToPool("r11 r11d r11w r11b"); - addStringsToPool("r12 r12d r12w r12b"); - addStringsToPool("r13 r13d r13w r13b"); - addStringsToPool("r14 r14d r14w r14b"); - addStringsToPool("r15 r15d r15w r15b"); - addStringsToPool("xmm0 ymm0"); - addStringsToPool("xmm1 ymm1"); - addStringsToPool("xmm2 ymm2"); - addStringsToPool("xmm3 ymm3"); - addStringsToPool("xmm4 ymm4"); - addStringsToPool("xmm5 ymm5"); - addStringsToPool("xmm6 ymm6"); - addStringsToPool("xmm7 ymm7"); - addStringsToPool("xmm8 ymm8"); - addStringsToPool("xmm9 ymm9"); - addStringsToPool("xmm10 ymm10"); - addStringsToPool("xmm11 ymm11"); - addStringsToPool("xmm12 ymm12"); - addStringsToPool("xmm13 ymm13"); - addStringsToPool("xmm14 ymm14"); - addStringsToPool("xmm15 ymm15"); -} - -bool CsCapstoneTokenizer::Tokenize(duint addr, const unsigned char* data, int datasize, CapstoneTokenizer::InstructionToken & instruction) -{ - _inst = CapstoneTokenizer::InstructionToken(); - - _success = _cp.DisassembleSafe(addr, data, datasize); - if(_success) - { - isNop = _cp.IsNop(); - if(!tokenizeMnemonic()) - return false; - - for(int i = 0; i < _cp.OpCount(); i++) - { - if(i) - { - addToken(CapstoneTokenizer::TokenType::Comma, ","); - if(_bArgumentSpaces) - addToken(CapstoneTokenizer::TokenType::ArgumentSpace, " "); - } - if(!tokenizeOperand(_cp[i])) - return false; - } - } - else - { - isNop = false; - addToken(CapstoneTokenizer::TokenType::MnemonicUnusual, "???"); - } - - if(_bNoHighlightOperands) - { - while(_inst.tokens.size() && _inst.tokens[_inst.tokens.size() - 1].type == CapstoneTokenizer::TokenType::Space) - _inst.tokens.pop_back(); - for(CapstoneTokenizer::SingleToken & token : _inst.tokens) - token.type = _mnemonicType; - } - - instruction = _inst; - - return true; -} - -bool CsCapstoneTokenizer::TokenizeData(const QString & datatype, const QString & data, CapstoneTokenizer::InstructionToken & instruction) -{ - _inst = CapstoneTokenizer::InstructionToken(); - isNop = false; - - if(!tokenizeMnemonic(CapstoneTokenizer::TokenType::MnemonicNormal, datatype)) - return false; - - addToken(CapstoneTokenizer::TokenType::Value, data); - - instruction = _inst; - - return true; -} - -void CsCapstoneTokenizer::UpdateConfig() -{ - SetConfig(ConfigBool("Disassembler", "Uppercase"), - ConfigBool("Disassembler", "TabbedMnemonic"), - ConfigBool("Disassembler", "ArgumentSpaces"), - ConfigBool("Disassembler", "MemorySpaces"), - ConfigBool("Disassembler", "NoHighlightOperands"), - ConfigBool("Disassembler", "NoCurrentModuleText"), - ConfigBool("Disassembler", "0xPrefixValues")); - _maxModuleLength = (int)ConfigUint("Disassembler", "MaxModuleSize"); - UpdateStringPool(); -} - -void CsCapstoneTokenizer::SetConfig(bool bUppercase, bool bTabbedMnemonic, bool bArgumentSpaces, bool bMemorySpaces, bool bNoHighlightOperands, bool bNoCurrentModuleText, bool b0xPrefixValues) -{ - _bUppercase = bUppercase; - _bTabbedMnemonic = bTabbedMnemonic; - _bArgumentSpaces = bArgumentSpaces; - _bMemorySpaces = bMemorySpaces; - _bNoHighlightOperands = bNoHighlightOperands; - _bNoCurrentModuleText = bNoCurrentModuleText; - _b0xPrefixValues = b0xPrefixValues; -} - -int CsCapstoneTokenizer::Size() const -{ - return _success ? _cp.Size() : 1; -} - -const Capstone & CsCapstoneTokenizer::GetCapstone() const -{ - return _cp; -} - -void CsCapstoneTokenizer::TokenToRichText(const CapstoneTokenizer::InstructionToken & instr, RichTextPainter::List & richTextList, const CapstoneTokenizer::SingleToken* highlightToken) -{ - QColor highlightColor = ConfigColor("InstructionHighlightColor"); - for(const auto & token : instr.tokens) - { - RichTextPainter::CustomRichText_t richText; - richText.highlight = TokenEquals(&token, highlightToken); - richText.highlightColor = highlightColor; - richText.flags = RichTextPainter::FlagNone; - richText.text = token.text; - if(token.type < CapstoneTokenizer::TokenType::Last) - { - const auto & tokenColor = colorNamesMap[int(token.type)]; - richText.flags = tokenColor.flags; - richText.textColor = tokenColor.color; - richText.textBackground = tokenColor.backgroundColor; - } - richTextList.push_back(richText); - } -} - -bool CsCapstoneTokenizer::TokenFromX(const CapstoneTokenizer::InstructionToken & instr, CapstoneTokenizer::SingleToken & token, int x, CachedFontMetrics* fontMetrics) -{ - if(x < instr.x) //before the first token - return false; - int len = int(instr.tokens.size()); - for(int i = 0, xStart = instr.x; i < len; i++) - { - const auto & curToken = instr.tokens.at(i); - int curWidth = fontMetrics->width(curToken.text); - int xEnd = xStart + curWidth; - if(x >= xStart && x < xEnd) - { - token = curToken; - return true; - } - xStart = xEnd; - } - return false; //not found -} - -bool CsCapstoneTokenizer::IsHighlightableToken(const CapstoneTokenizer::SingleToken & token) -{ - switch(token.type) - { - case CapstoneTokenizer::TokenType::Comma: - case CapstoneTokenizer::TokenType::Space: - case CapstoneTokenizer::TokenType::ArgumentSpace: - case CapstoneTokenizer::TokenType::Uncategorized: - case CapstoneTokenizer::TokenType::MemoryOperatorSpace: - case CapstoneTokenizer::TokenType::MemoryBrackets: - case CapstoneTokenizer::TokenType::MemoryStackBrackets: - case CapstoneTokenizer::TokenType::MemoryOperator: - return false; - break; - } - return true; -} - -bool CsCapstoneTokenizer::tokenTextPoolEquals(const QString & a, const QString & b) -{ - if(a.compare(b, Qt::CaseInsensitive) == 0) - return true; - auto found1 = stringPoolMap.find(a.toLower()); - auto found2 = stringPoolMap.find(b.toLower()); - if(found1 == stringPoolMap.end() || found2 == stringPoolMap.end()) - return false; - return found1.value() == found2.value(); -} - -bool CsCapstoneTokenizer::TokenEquals(const CapstoneTokenizer::SingleToken* a, const CapstoneTokenizer::SingleToken* b, bool ignoreSize) -{ - if(!a || !b) - return false; - if(a->value.size != 0 && b->value.size != 0) //we have a value - { - if(!ignoreSize && a->value.size != b->value.size) - return false; - else if(a->value.value != b->value.value) - return false; - } - return tokenTextPoolEquals(a->text, b->text); -} - -void CsCapstoneTokenizer::addToken(CapstoneTokenizer::TokenType type, QString text, const CapstoneTokenizer::TokenValue & value) -{ - switch(type) - { - case CapstoneTokenizer::TokenType::Space: - case CapstoneTokenizer::TokenType::ArgumentSpace: - case CapstoneTokenizer::TokenType::MemoryOperatorSpace: - break; - default: - text = text.trimmed(); - break; - } - if(_bUppercase && !value.size) - text = text.toUpper(); - _inst.tokens.push_back(CapstoneTokenizer::SingleToken(isNop ? CapstoneTokenizer::TokenType::MnemonicNop : type, text, value)); -} - -void CsCapstoneTokenizer::addToken(CapstoneTokenizer::TokenType type, const QString & text) -{ - addToken(type, text, CapstoneTokenizer::TokenValue()); -} - -void CsCapstoneTokenizer::addMemoryOperator(char operatorText) -{ - if(_bMemorySpaces) - addToken(CapstoneTokenizer::TokenType::MemoryOperatorSpace, " "); - QString text; - text += operatorText; - addToken(CapstoneTokenizer::TokenType::MemoryOperator, text); - if(_bMemorySpaces) - addToken(CapstoneTokenizer::TokenType::MemoryOperatorSpace, " "); -} - -QString CsCapstoneTokenizer::printValue(const CapstoneTokenizer::TokenValue & value, bool expandModule, int maxModuleLength) const -{ - QString labelText; - char label_[MAX_LABEL_SIZE] = ""; - char module_[MAX_MODULE_SIZE] = ""; - QString moduleText; - duint addr = value.value; - bool bHasLabel = DbgGetLabelAt(addr, SEG_DEFAULT, label_); - labelText = QString(label_); - bool bHasModule; - if(_bNoCurrentModuleText) - { - duint size, base; - base = DbgMemFindBaseAddr(this->GetCapstone().Address(), &size); - if(addr >= base && addr < base + size) - bHasModule = false; - else - bHasModule = (expandModule && DbgGetModuleAt(addr, module_) && !QString(labelText).startsWith("JMP.&")); - } - else - bHasModule = (expandModule && DbgGetModuleAt(addr, module_) && !QString(labelText).startsWith("JMP.&")); - moduleText = QString(module_); - if(maxModuleLength != -1) - moduleText.truncate(maxModuleLength); - if(moduleText.length()) - moduleText += "."; - QString addrText = ToHexString(addr); - QString finalText; - if(bHasLabel && bHasModule) // - finalText = QString("<%1%2>").arg(moduleText).arg(labelText); - else if(bHasModule) //module.addr - finalText = QString("%1%2").arg(moduleText).arg(addrText); - else if(bHasLabel) //