1
0
Fork 0

Compare commits

...

153 Commits

Author SHA1 Message Date
Duncan Ogilvie bec9333351 Improve developer experience when forking 2025-07-05 19:03:41 +02:00
Duncan Ogilvie bcdb5c5837
Merge pull request #3622 from x64dbg/revert-3588-fix-addr-cbInstrFindAllMem
Revert "Fixed inverted logic"
2025-07-04 21:22:30 +02:00
Duncan Ogilvie e5cb193849
Revert "Fixed inverted logic" 2025-07-04 21:03:46 +02:00
Duncan Ogilvie 736b2be377
Merge pull request #3617 from kalhotky/development
Display style values refactor and MASM style
2025-07-04 18:44:52 +02:00
Duncan Ogilvie 0fb8c3d263
Merge pull request #3620 from kalhotky/fix/hide-pointer-sizes
Fix ambiguous operand size when hiding pointer sizes
2025-07-04 18:44:21 +02:00
Duncan Ogilvie 9fb30cc7b4 Fix bug with string formatting 2025-07-04 18:34:15 +02:00
Duncan Ogilvie 7646a36dc9 Exclude unnecessary OpenGL libraries from snapshot 2025-07-04 17:58:27 +02:00
Duncan Ogilvie e9492e70d0 Fix AVX-512 crash on 32-bit 2025-07-04 17:29:33 +02:00
Duncan Ogilvie d0eecd084e Fix snapshot timestamp format 2025-07-04 02:06:29 +02:00
Duncan Ogilvie 699342d1b7 Move https://github.com/x64dbg/docs into this repo 2025-07-04 01:32:42 +02:00
kalhotky 2ea1f5b2a7 Format code. 2025-07-04 01:04:10 +02:00
kalhotky f711458ff9 Format code. 2025-07-04 00:46:57 +02:00
kalhotky 9b57a49627 Match coding style, add comment. 2025-07-04 00:41:42 +02:00
kalhotky 8e71dad881 Fix ambiguous operand size when hiding pointer sizes. 2025-07-04 00:38:48 +02:00
kalhotky 2b10f47749 Fix uninitialized variables. 2025-07-03 15:50:22 +02:00
kalhotky 2cd2476fbc Fix .ui line endings. 2025-07-03 15:49:58 +02:00
kalhotky 7065d6a7a0 Add display MASM style values. 2025-07-03 15:49:58 +02:00
Duncan Ogilvie 03aebe8a50 Always load VC runtime from application directory
#3616
2025-07-03 11:01:11 +02:00
Duncan Ogilvie 5cf93e0c3a InitializeSignatureCheck now loads msvcp140.dll 2025-07-02 01:23:06 +02:00
Duncan Ogilvie 9683bb38d0
Merge pull request #3588 from OldGamesCracking/fix-addr-cbInstrFindAllMem
Fixed inverted logic
2025-06-30 17:03:37 +02:00
Duncan Ogilvie fe8e5a013e
Merge pull request #3607 from eldarkg/wine-msg-bp
Fix Handles->Message Breakpoint: wnd proc or handle is unavailable (wine)
2025-06-30 17:02:58 +02:00
Duncan Ogilvie 65a087982b
Merge pull request #3610 from oxqnd/fix/label-whitespace-bug
Fix: Trim trailing whitespace in script labels #3589
2025-06-30 17:02:32 +02:00
Duncan Ogilvie 23f0ece561 Upload snapshot ZIP files as artifacts directly 2025-06-30 03:19:25 +02:00
Duncan Ogilvie abe77409b5 Update dependencies 2025-06-30 02:29:09 +02:00
Duncan Ogilvie a5cf563777 Match snapshot format to previous releases 2025-06-30 02:19:06 +02:00
Duncan Ogilvie 32f42753fd Get rid of Qt5Network dependency 2025-06-30 02:18:23 +02:00
oxqnd 34705e27be Fix: Handle trailing whitespace in script labels 2025-06-29 18:43:16 +09:00
Duncan Ogilvie 2aa48159b8 Print string values of character arrays 2025-06-26 21:22:17 +02:00
Eldar Khayrullin 58e7bf67bd Fix messages breakpoints: wnd proc or handle is unavailable (wine) 2025-06-26 22:10:35 +03:00
Duncan Ogilvie d88a62893a Improve pretty printing in NodeVisitor 2025-06-26 20:33:16 +02:00
Duncan Ogilvie 2e3af1c9c9 Hide __anonymous types 2025-06-26 17:29:24 +02:00
Duncan Ogilvie 52e3121583 Add GuiTypeListUpdated for better UX 2025-06-26 17:12:08 +02:00
Duncan Ogilvie 4df4c2ec87 Make type visiting expansion depth configurable 2025-06-26 17:12:08 +02:00
Duncan Ogilvie 5db5a106a0 Change StructWidget to inherit from TypeWidget 2025-06-26 17:12:00 +02:00
Duncan Ogilvie 1eae9f72ea Implement DisplayTypeDialog for better UX 2025-06-26 14:55:41 +02:00
Duncan Ogilvie 655708309a Add selectionChanged signal to SearchListView 2025-06-26 12:51:19 +02:00
Duncan Ogilvie b2e6e501ba Add back missing /DELAYLOAD options
#3412
2025-06-25 19:18:25 +02:00
Duncan Ogilvie 9b7733598b Add test for #3599 2025-06-25 19:04:33 +02:00
Duncan Ogilvie 15b3035ffe Update breakpoint dialog tooltip match reality 2025-06-25 19:04:32 +02:00
Duncan Ogilvie 27bba69ea6 Add a few string expression functions 2025-06-25 19:04:32 +02:00
Duncan Ogilvie 8fe261cb82 Prefix commands with $ to format the command itself 2025-06-25 16:56:39 +02:00
Duncan Ogilvie b1a14260f9 Static MSVC runtime for launcher and loaddll 2025-06-25 14:55:16 +02:00
Duncan Ogilvie df110dc06f Remove Visual Studio projects 2025-06-21 14:33:21 +02:00
Duncan Ogilvie 118d270d81 Performance improvements for StructWidget 2025-06-20 00:53:30 +02:00
Duncan Ogilvie 1e9bae2021 Fix a bug with GotoDialog::setInitialExpression not working twice in a row 2025-06-20 00:11:18 +02:00
Duncan Ogilvie d01fcbdd34 Mark padding as bitfield 2025-06-19 19:13:20 +02:00
Duncan Ogilvie 2223a7f10b Update AStyleHelper to only format changed files 2025-06-19 14:09:15 +02:00
Duncan Ogilvie 13b63bb2d4
Merge pull request #3597 from notpidgey/struct-view-update
Added Type Reload Functionality in Struct View
2025-06-19 14:09:07 +02:00
Duncan Ogilvie ba881ee3e8 Reorder the menu to be more natural 2025-06-19 14:07:09 +02:00
Duncan Ogilvie e125c96f05 Default to an empty name when display type 2025-06-19 13:46:31 +02:00
Duncan Ogilvie 78ed057754 Restore Refresh functionality and replace 'change address' with 'reload type' 2025-06-19 13:09:58 +02:00
Duncan Ogilvie fef5f2f2cd Simplify ActionHelpers and allow creating actions with descriptions 2025-06-19 13:09:15 +02:00
Duncan Ogilvie 2f6637f9cc Fix backwards compatibility 2025-06-19 11:48:28 +02:00
Pidgey 8197c96ce6
Updated code to fit PR review 2025-06-19 02:01:41 -04:00
Pidgey cf64258e9b
Added stable typename lookup API for enum members
LookupTypeById will cause nullptr if the types are reloaded but keep the same name. As a result, it will not be able to retrieve the enum members for the current enum name.
2025-06-18 02:05:13 -04:00
Pidgey 33db0de838
Fixed incorrect initialization of typeName field 2025-06-18 02:03:59 -04:00
Pidgey b75fdcd4a8
Moved reload into refresh function 2025-06-17 19:59:55 -04:00
Pidgey a719a0f4b6
Added struct refresh 2025-06-17 19:42:40 -04:00
Duncan Ogilvie 972d296b5c
Add IRC link to README 2025-06-16 21:35:01 +02:00
Duncan Ogilvie 82c5725862
Merge pull request #3578 from torusrxxx/patch000000f9
Copy graph image
2025-06-16 21:33:49 +02:00
Duncan Ogilvie 167c8becfe
Merge pull request #3585 from torusrxxx/patch000000fa
Draw jump lines under register label; Focus on window in handles view
2025-06-16 21:33:24 +02:00
Pidgey ab38798693
wip type refreshing 2025-06-15 17:13:21 -04:00
Duncan Ogilvie f3862f4641
Merge pull request #3595 from notpidgey/callconv-args
Added Copy Menu for Call Conv Arguments
2025-06-14 21:42:57 +02:00
Pidgey d6cd31e1d3
Added copy menu for arguments 2025-06-13 19:41:24 -04:00
Duncan Ogilvie ff1b2b21b9 Fix error handling in ParseTypes 2025-06-09 23:53:24 +02:00
Duncan Ogilvie e5ea90143f
Merge pull request #3593 from WindowsAPI/fix/types-missing-cstdint
Fix missing stdint types when building with vs2022 v120_xp toolset
2025-06-09 11:42:41 +02:00
WindowsAPI f920310a93
Fix missing <cstdint> include in types.h for uint*_t support
When trying to build from a clean env using vs2022 with vs13 platform toolset (v120_xp) results in missing type errors (e.g., uint32_t not defined). Adding <cstdint> resolves the issue.
2025-06-08 21:35:08 -07:00
Duncan Ogilvie 2d54cc46ec Move "Display type" to CommonActions and add to registers/stack 2025-06-08 22:03:38 +02:00
Duncan Ogilvie fd153e701f Small UX improvements in struct widget 2025-06-08 21:15:06 +02:00
Duncan Ogilvie c5abf7dfc2 Allow configuring default max pointer depth in DisplayType 2025-06-08 21:15:06 +02:00
Duncan Ogilvie f751f5bc18 Improved error reporting in DisplayType command 2025-06-08 21:15:06 +02:00
Duncan Ogilvie 6a874665de Fix errors with simple header parsing 2025-06-08 21:15:06 +02:00
Duncan Ogilvie b4da6eda3c Improve plugin loading error messages 2025-06-08 21:15:06 +02:00
Duncan Ogilvie c183595c1b
Update badges 2025-05-29 11:30:01 +02:00
OldGamesCracking af7b4043a7
Fixed inverted logic 2025-05-28 00:19:23 +02:00
torusrxxx 72f159fa88
Focus on window in handles view 2025-05-26 21:36:14 +08:00
torusrxxx acd8903e0b
Draw jump lines under register label 2025-05-26 21:01:54 +08:00
Duncan Ogilvie 2819790e13 Fix structure packing in TitanEngine.h
Closes #3563
2025-05-24 18:31:47 +02:00
torusrxxx 09c802bec5
Copy graph image 2025-05-05 20:04:49 +08:00
Duncan Ogilvie 9f1e78710f
Merge pull request #3552 from notpidgey/struct-view-update
Updated Type Database Handling
2025-04-14 19:55:37 +02:00
Pidgey d519cd0e5b
Bitfield display fix 2025-04-04 20:35:25 -04:00
Duncan Ogilvie 822a86a483 Little too much renaming there 2025-04-05 01:28:43 +02:00
Duncan Ogilvie a5a25cc4a4 Automatically download submodules when necessary 2025-04-05 00:13:24 +02:00
Duncan Ogilvie c2615db58e Rename and document a few more things in TypeManager 2025-04-05 00:11:00 +02:00
Pidgey fc751c8d80
Fixed unsigned int16s showing up as signed 2025-04-04 01:17:10 -04:00
Duncan Ogilvie 5d7a71a2ca Some small cleanups 2025-04-03 01:19:40 +02:00
Pidgey 02991d0cf6
fixed typo 2025-04-02 17:16:01 -04:00
Pidgey dcd4c069b1
added type lookup by id 2025-04-02 17:15:24 -04:00
Duncan Ogilvie 762b44d60d fix deps 2025-04-02 22:31:02 +02:00
Pidgey 90dec0a319
some gui stuff 2025-04-02 16:10:40 -04:00
snow 7dfa4a736f
visit type wip 2025-04-02 02:22:10 -04:00
snow ec267b96c6
added enum type resolution 2025-04-02 02:22:10 -04:00
snow 93ae8b1560
cleaned type size logic 2025-04-02 02:22:10 -04:00
snow 58cf1f8f5a
memory read callback fix 2025-04-02 02:22:10 -04:00
Pidgey d36c3b0dfa
moved enum display memory logic 2025-04-02 02:22:10 -04:00
Pidgey 51b9e0ec08
added clearing of enums 2025-04-02 02:22:10 -04:00
Pidgey 0288ff97fe
wip 2025-04-02 02:22:10 -04:00
snow fb97407043
hide anon fields/type names 2025-04-02 02:22:10 -04:00
snow 5d6fe5e503
added bitsize/size loading 2025-04-02 02:22:09 -04:00
snow 6963ca7589
fixed array visit member and display 2025-04-02 02:22:09 -04:00
snow 3934a9ff96
added isbitfield field 2025-04-02 02:21:55 -04:00
snow 792b5fbaff
Added void and typedef types 2025-04-02 02:21:55 -04:00
snow 2c79b99644
wip 2025-04-02 02:21:54 -04:00
snow 024b25a912
fixed padding 2025-04-02 02:21:54 -04:00
snow 16bf06d929
Schizo commit 2025-04-02 02:21:54 -04:00
Pidgey 60f9388938
Set default display type to assigned type 2025-04-02 02:21:54 -04:00
Pidgey 69df47aab7
Bounds check on struct parent display 2025-04-02 02:21:54 -04:00
Pidgey e40652fc5a
Recursive struct search for typedef types 2025-04-02 02:21:54 -04:00
Duncan Ogilvie 2df98d8074 Add some more state for the headless mode 2025-03-30 19:02:59 +02:00
Duncan Ogilvie 2a08360c67 Fix compilation with clang-cl 2025-03-30 17:50:01 +02:00
Duncan Ogilvie 1bde29d9df Add headless mode POC
Currently useless, but after #3516 is merged this will be used for automated testing

https://github.com/x64dbg/x64dbg_headless
2025-03-30 16:22:41 +02:00
Duncan Ogilvie 53637c610b Make a rebuild copy the dependencies again 2025-03-30 14:15:11 +02:00
Duncan Ogilvie 310935b749
Merge pull request #3532 from G3ph4z/issue_1640
New x96dbg configuration dialog
2025-03-30 13:55:15 +02:00
Duncan Ogilvie 79e5e7ffcd
Merge pull request #3521 from whindsaks/patch-1
Show launcher on first launch after installing
2025-03-30 13:52:05 +02:00
Duncan Ogilvie 31993c2d58
Merge pull request #3537 from G3ph4z/issue_2670
Always update the Example text's background color
2025-03-30 13:51:48 +02:00
Duncan Ogilvie d659dc9a24
Merge pull request #3546 from x64dbg/torusrxxx-patch-1-1
Fix wrong icon for ActionTreatSelectionAsXXX
2025-03-30 13:51:40 +02:00
Duncan Ogilvie a7e64fc72c
Merge pull request #3539 from x64dbg/mingw
Fix compilation on MinGW (clang)
2025-03-30 13:51:22 +02:00
Duncan Ogilvie 3caa50e4f2
Merge pull request #3536 from torusrxxx/AVX512
Add support for AVX512
2025-03-30 13:49:38 +02:00
Duncan Ogilvie 84a23f161f Bump TitanEngine_x64 2025-03-30 13:38:04 +02:00
torusrxxx 54d8dd4c25
Fix keyboard navigation in RegistersView 2025-03-27 17:41:45 +08:00
torusrxxx 0a6d8c5496
Limit vector length to 256 bits on computers not supporting AVX-512 2025-03-27 17:09:24 +08:00
torusrxxx c71327443d
Add support for editing AVX512 registers 2025-03-27 00:28:44 +08:00
torusrxxx 298cf102be Allow highlighting opmask registers 2025-03-26 22:32:59 +08:00
torusrxxx 8e52767d46
Pop up error when double clicking on AVX-512 registers when not supported 2025-03-26 21:21:41 +08:00
torusrxxx cbc4896d43
Reorganize REGDUMP to minimize padding, add winerrorname format function 2025-03-26 20:35:09 +08:00
torusrxxx 30fda8b41c
Add support for opmask registers in RegistersView 2025-03-26 17:04:22 +08:00
torusrxxx fd172927fe
Add AVX512 support for RegistersView 2025-03-26 00:46:02 +08:00
torusrxxx ae8504f372
Add AVX512 support for EncodeMap 2025-03-25 22:28:56 +08:00
Torusrxxx 1956402b30
Fix wrong icon for ActionTreatSelectionAsXXX 2025-03-24 11:37:25 +00:00
torusrxxx 9eaa5f4553
Add AVX512 support for CPUInfoBox 2025-03-24 13:02:20 +08:00
torusrxxx 62421ffd16 Begin migrating x64dbg.dll to use new AVX512 register context 2025-03-24 12:38:10 +08:00
torusrxxx 2192d19bed Allow kmovq to GPR, add kmovd command (easier for 32-bit) 2025-03-24 12:38:10 +08:00
torusrxxx 8eb501713b Allow using k0 register 2025-03-24 12:38:10 +08:00
torusrxxx ca93f483fc Add support for AVX512 2025-03-24 12:38:10 +08:00
Duncan Ogilvie c2204b8431
Merge pull request #3544 from torusrxxx/patch000000f7
Add dump support for half float
2025-03-23 21:13:46 +01:00
torusrxxx f2ee27b732
Add dump support for half float 2025-03-21 15:55:10 +08:00
Duncan Ogilvie 66ddb4198e
Merge pull request #3541 from x64dbg/torusrxxx-patch-2
Fix buffer overflow
2025-03-20 01:51:09 +01:00
Torusrxxx 5b2f5c4031
Update stringformat.cpp 2025-03-19 16:22:49 +00:00
Torusrxxx 04703952d6
Fix buffer overflow 2025-03-19 16:18:20 +00:00
Duncan Ogilvie d1670eef81 Fix spelling mistake 2025-03-17 02:55:28 +01:00
Duncan Ogilvie 4d2d0bd410 Cross-compilation example toolchain 2025-03-17 02:48:22 +01:00
Duncan Ogilvie 9b301b3c8d Fix compilation on MinGW (clang) 2025-03-17 02:32:14 +01:00
Duncan Ogilvie b57b134b35 Ignore clangd cache 2025-03-17 02:25:57 +01:00
Duncan Ogilvie 8adaab5db5
Merge pull request #3538 from x64dbg/vs2022-github-actions
Build with GitHub Actions
2025-03-17 02:07:45 +01:00
Duncan Ogilvie e8ffba6dcc Build with GitHub Actions 2025-03-17 01:32:11 +01:00
Duncan Ogilvie 53d1123e83 Split ModuleStdTable into header and sources to fix Q_OBJECT error 2025-03-16 23:14:28 +01:00
Duncan Ogilvie 2cfccf8d5e Fix translation errors 2025-03-16 18:03:09 +01:00
G3ph4z c113b20c4d fix: Always update the example text bg color 2025-03-15 20:17:30 +01:00
G3ph4z 0939434287 reformat: DlgConfigurations checkbox text 2025-03-03 23:42:54 +01:00
G3ph4z 1218421857 fix: DlgConfigurations size 2025-03-03 23:16:03 +01:00
G3ph4z 1c9d49af8c fix: Code format 2025-03-02 20:29:25 +01:00
G3ph4z 0c4d84d0b2 feat: New configuration dialog
It should solve the following issues: #1640 #3138
2025-03-02 20:27:04 +01:00
Whindmar Saksit a3a96b71e4
Show launcher on first launch after installing
This avoids having to re-start x96dbg on first run.
2025-02-14 15:13:21 +01:00
869 changed files with 29124 additions and 6274 deletions

Binary file not shown.

View File

@ -3,31 +3,46 @@
# Simple script to auto-format every source file before committing. # Simple script to auto-format every source file before committing.
# #
#check if the formatter is present # Check if the formatter is present
if [ ! -f ./.github/format/AStyleHelper.exe ]; then if [ ! -f .github/format/AStyleHelper.exe ]; then
echo "AStyleHelper not found!" echo "AStyleHelper not found!"
exit 0 exit 0
fi fi
#format the code # Get stamp file epoch (default to 0)
"./.github/format/AStyleHelper.exe" Silent STAMP_EPOCH=$(date -u -r .git/AStyleHelper.stamp +%s 2>/dev/null)
STAMP_EPOCH=${STAMP_EPOCH:-0}
#exit when nothing needs to be done # If the HEAD is newer than the stamp (we switched branches), set stamp to 0
if [ $? == 0 ]; then if [ $(date -u -r .git/HEAD +%s 2>/dev/null) -gt $STAMP_EPOCH ]; then
echo "AStyleHelper: branch switched, performing full formatting"
STAMP_EPOCH=0
fi
# Format the code
".github/format/AStyleHelper.exe" Silent $STAMP_EPOCH
FORMAT_STATUS=$?
# Touch the stamp file to indicate when the last formatting was done
touch .git/AStyleHelper.stamp
# Exit when nothing needs to be done
if [ $FORMAT_STATUS -eq 0 ]; then
echo "AStyleHelper: no formatting needed"
exit 0 exit 0
fi fi
#stage the formatted files (when staged in this commit) # Stage the formatted files (when staged in this commit)
gitFiles=$(git diff-index --name-only --cached HEAD) GIT_FILES=$(git diff-index --name-only --cached HEAD)
if [[ -n "${gitFiles}" ]]; then if [[ -n "$GIT_FILES" ]]; then
for fname in $gitFiles; do for GIT_FILE in $GIT_FILES; do
git add --all -- "${fname}" git add --all -- "$GIT_FILE"
done done
fi fi
#cancel commit if the changes were undone by the formatting # Cancel commit if the changes were undone by the formatting
gitFiles=$(git diff-index --name-only --cached HEAD) GIT_FILES=$(git diff-index --name-only --cached HEAD)
if [ -z "$gitFiles" ]; then if [ -z "$GIT_FILES" ]; then
"./.github/AStyleHelper.exe" "After formatting, no files were staged..." ".github/AStyleHelper.exe" "After formatting, no files were staged..."
exit 1 exit 1
fi fi

90
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,90 @@
name: Build
on: [push, pull_request]
jobs:
cmake:
# Skip building pull requests from the same repository
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository }}
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
arch: [x64, x86]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 1
- name: Visual Studio Development Environment
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
with:
arch: ${{ matrix.arch }}
- name: Build
run: |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: build-${{ matrix.arch }}
path: bin
if-no-files-found: error
include-hidden-files: true
retention-days: 1
package:
needs: cmake
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Download x64 Artifacts
uses: actions/download-artifact@v4
with:
name: build-x64
path: bin
- name: Download x86 Artifacts
uses: actions/download-artifact@v4
with:
name: build-x86
path: bin
- name: Prepare release
run: |
curl.exe -L https://github.com/x64dbg/translations/releases/download/translations/qm.zip -o bin\qm.zip
7z x bin\qm.zip -obin
cmake -P .\cmake\release.cmake
$timestamp = Get-Date (Get-Date).ToUniversalTime() -Format "yyyy-MM-dd_HH-mm"
echo "timestamp=$timestamp" >> $env:GITHUB_ENV
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: snapshot_${{ env.timestamp }}
path: |
release/pluginsdk
release/release
release/commithash.txt
if-no-files-found: error
include-hidden-files: true
compression-level: 9
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: symbols-snapshot_${{ env.timestamp }}
path: |
release/pdb
release/commithash.txt
if-no-files-found: error
include-hidden-files: true
compression-level: 9

4
.gitignore vendored
View File

@ -4,6 +4,7 @@
/bin/*.dll /bin/*.dll
/bin/*.ini /bin/*.ini
/bin/*.chm /bin/*.chm
/bin/*.zip
/src/**/x64/ /src/**/x64/
/src/**/Win32/ /src/**/Win32/
/src/gui_build/ /src/gui_build/
@ -25,7 +26,10 @@ cmake-build*/
*.pro.user* *.pro.user*
*.orig *.orig
*.pdb *.pdb
*.ilk
.DS_Store .DS_Store
Makefile Makefile
Makefile.* Makefile.*
CMakeLists.txt.user CMakeLists.txt.user
/.cache

12
.gitmodules vendored
View File

@ -1,7 +1,7 @@
[submodule "src/dbg/btparser"] [submodule "src/dbg/btparser"]
path = src/dbg/btparser path = src/dbg/btparser
url = ../btparser url = ../../x64dbg/btparser
[submodule "deps"] [submodule "deps"]
path = deps path = deps
url = ../deps url = ../../x64dbg/deps
shallow = true shallow = true

155
CMakeLists.txt generated
View File

@ -7,6 +7,9 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(FATAL_ERROR "In-tree builds are not supported. Run CMake from a separate directory: cmake -B build") message(FATAL_ERROR "In-tree builds are not supported. Run CMake from a separate directory: cmake -B build")
endif() endif()
# Enable support for MSVC_RUNTIME_LIBRARY
cmake_policy(SET CMP0091 NEW)
set(CMKR_ROOT_PROJECT OFF) set(CMKR_ROOT_PROJECT OFF)
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(CMKR_ROOT_PROJECT ON) set(CMKR_ROOT_PROJECT ON)
@ -22,8 +25,18 @@ if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
# Create a configure-time dependency on cmake.toml to improve IDE support # Create a configure-time dependency on cmake.toml to improve IDE support
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cmake.toml) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cmake.toml)
if(NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
endif()
endif() endif()
# Options
option(X64DBG_BUILD_IN_TREE "" ON)
# Variables
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include("cmake/VSToolchain.cmake") include("cmake/VSToolchain.cmake")
project(x64dbg project(x64dbg
@ -37,7 +50,6 @@ include("cmake/VSFlags.cmake")
find_package(Qt5 REQUIRED find_package(Qt5 REQUIRED
COMPONENTS COMPONENTS
Widgets Widgets
Network
WinExtras WinExtras
) )
@ -372,6 +384,8 @@ set(dbg_SOURCES
"src/dbg/types.cpp" "src/dbg/types.cpp"
"src/dbg/types.h" "src/dbg/types.h"
"src/dbg/typesparser.cpp" "src/dbg/typesparser.cpp"
"src/dbg/typevisitor.cpp"
"src/dbg/typevisitor.h"
"src/dbg/value.cpp" "src/dbg/value.cpp"
"src/dbg/value.h" "src/dbg/value.h"
"src/dbg/variable.cpp" "src/dbg/variable.cpp"
@ -399,6 +413,24 @@ target_include_directories(dbg PRIVATE
"src/dbg/commands" "src/dbg/commands"
) )
if(MSVC) # msvc
target_link_libraries(dbg PUBLIC
Delayimp
)
endif()
if(NOT TARGET zydis_wrapper)
message(FATAL_ERROR "Target \"zydis_wrapper\" referenced by \"dbg\" does not exist!")
endif()
if(NOT TARGET bridge)
message(FATAL_ERROR "Target \"bridge\" referenced by \"dbg\" does not exist!")
endif()
if(NOT TARGET btparser)
message(FATAL_ERROR "Target \"btparser\" referenced by \"dbg\" does not exist!")
endif()
target_link_libraries(dbg PRIVATE target_link_libraries(dbg PRIVATE
zydis_wrapper zydis_wrapper
bridge bridge
@ -435,6 +467,12 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 8) # x64
) )
endif() endif()
if(MSVC) # msvc
target_link_options(dbg PUBLIC
"/DELAYLOAD:TitanEngine.dll"
)
endif()
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86 if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
set_target_properties(dbg PROPERTIES set_target_properties(dbg PROPERTIES
OUTPUT_NAME OUTPUT_NAME
@ -560,6 +598,9 @@ set(gui_SOURCES
"src/gui/Src/Gui/DisassemblerGraphView.h" "src/gui/Src/Gui/DisassemblerGraphView.h"
"src/gui/Src/Gui/DisassemblyPopup.cpp" "src/gui/Src/Gui/DisassemblyPopup.cpp"
"src/gui/Src/Gui/DisassemblyPopup.h" "src/gui/Src/Gui/DisassemblyPopup.h"
"src/gui/Src/Gui/DisplayTypeDialog.cpp"
"src/gui/Src/Gui/DisplayTypeDialog.h"
"src/gui/Src/Gui/DisplayTypeDialog.ui"
"src/gui/Src/Gui/EditBreakpointDialog.cpp" "src/gui/Src/Gui/EditBreakpointDialog.cpp"
"src/gui/Src/Gui/EditBreakpointDialog.h" "src/gui/Src/Gui/EditBreakpointDialog.h"
"src/gui/Src/Gui/EditBreakpointDialog.ui" "src/gui/Src/Gui/EditBreakpointDialog.ui"
@ -644,7 +685,6 @@ set(gui_SOURCES
"src/gui/Src/Gui/SourceViewerManager.h" "src/gui/Src/Gui/SourceViewerManager.h"
"src/gui/Src/Gui/StructWidget.cpp" "src/gui/Src/Gui/StructWidget.cpp"
"src/gui/Src/Gui/StructWidget.h" "src/gui/Src/Gui/StructWidget.h"
"src/gui/Src/Gui/StructWidget.ui"
"src/gui/Src/Gui/SymbolView.cpp" "src/gui/Src/Gui/SymbolView.cpp"
"src/gui/Src/Gui/SymbolView.h" "src/gui/Src/Gui/SymbolView.h"
"src/gui/Src/Gui/SymbolView.ui" "src/gui/Src/Gui/SymbolView.ui"
@ -659,6 +699,8 @@ set(gui_SOURCES
"src/gui/Src/Gui/ThreadView.h" "src/gui/Src/Gui/ThreadView.h"
"src/gui/Src/Gui/TimeWastedCounter.cpp" "src/gui/Src/Gui/TimeWastedCounter.cpp"
"src/gui/Src/Gui/TimeWastedCounter.h" "src/gui/Src/Gui/TimeWastedCounter.h"
"src/gui/Src/Gui/TypeWidget.cpp"
"src/gui/Src/Gui/TypeWidget.h"
"src/gui/Src/Gui/VirtualModDialog.cpp" "src/gui/Src/Gui/VirtualModDialog.cpp"
"src/gui/Src/Gui/VirtualModDialog.h" "src/gui/Src/Gui/VirtualModDialog.h"
"src/gui/Src/Gui/VirtualModDialog.ui" "src/gui/Src/Gui/VirtualModDialog.ui"
@ -778,13 +820,21 @@ target_include_directories(gui PRIVATE
"src/gui/Src/ThirdPartyLibs/ldconvert" "src/gui/Src/ThirdPartyLibs/ldconvert"
) )
if(NOT TARGET zydis_wrapper)
message(FATAL_ERROR "Target \"zydis_wrapper\" referenced by \"gui\" does not exist!")
endif()
if(NOT TARGET bridge)
message(FATAL_ERROR "Target \"bridge\" referenced by \"gui\" does not exist!")
endif()
target_link_libraries(gui PRIVATE target_link_libraries(gui PRIVATE
Qt5::Widgets Qt5::Widgets
Qt5::Network
Qt5::WinExtras Qt5::WinExtras
zydis_wrapper zydis_wrapper
bridge bridge
winmm winmm
wininet
) )
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86 if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
@ -848,7 +898,21 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 8) # x64
) )
endif() endif()
if(MSVC) # msvc
target_link_libraries(loaddll PRIVATE
Delayimp
)
endif()
if(MSVC) # msvc
target_link_options(loaddll PRIVATE
"/DELAYLOAD:user32.dll"
)
endif()
set_target_properties(loaddll PROPERTIES set_target_properties(loaddll PROPERTIES
MSVC_RUNTIME_LIBRARY
"MultiThreaded$<$<CONFIG:Debug>:Debug>"
WIN32_EXECUTABLE WIN32_EXECUTABLE
ON ON
) )
@ -871,7 +935,7 @@ set(exe_SOURCES
"src/exe/signaturecheck.cpp" "src/exe/signaturecheck.cpp"
"src/exe/signaturecheck.h" "src/exe/signaturecheck.h"
"src/exe/strings.h" "src/exe/strings.h"
"src/exe/strings.rc" "src/exe/strings_utf8.rc"
"src/exe/x64dbg_exe.cpp" "src/exe/x64dbg_exe.cpp"
) )
@ -892,18 +956,37 @@ add_executable(exe)
target_sources(exe PRIVATE ${exe_SOURCES}) target_sources(exe PRIVATE ${exe_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${exe_SOURCES}) source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${exe_SOURCES})
if(NOT TARGET bridge)
message(FATAL_ERROR "Target \"bridge\" referenced by \"exe\" does not exist!")
endif()
target_link_libraries(exe PRIVATE target_link_libraries(exe PRIVATE
bridge bridge
Wintrust Wintrust
) )
if(MSVC) # msvc if(MSVC) # msvc
target_link_options(exe PRIVATE target_link_libraries(exe PRIVATE
"/DEF:${CMAKE_SOURCE_DIR}/src/exe/signaturecheck.def" Delayimp
"/INCREMENTAL:NO"
) )
endif() endif()
if(MSVC) # msvc
target_link_options(exe PRIVATE
"/DEF:${CMAKE_SOURCE_DIR}/src/exe/signaturecheck.def"
"/DELAYLOAD:user32.dll"
"/DELAYLOAD:wintrust.dll"
"/DELAYLOAD:$<TARGET_FILE_NAME:bridge>"
)
endif()
set_target_properties(exe PROPERTIES
MSVC_RUNTIME_LIBRARY
"MultiThreaded$<$<CONFIG:Debug>:Debug>"
WIN32_EXECUTABLE
ON
)
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86 if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
set_target_properties(exe PROPERTIES set_target_properties(exe PROPERTIES
OUTPUT_NAME OUTPUT_NAME
@ -922,11 +1005,6 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 8) # x64
) )
endif() endif()
set_target_properties(exe PROPERTIES
WIN32_EXECUTABLE
ON
)
get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT) get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT)
if(NOT CMKR_VS_STARTUP_PROJECT) if(NOT CMKR_VS_STARTUP_PROJECT)
set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT exe) set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT exe)
@ -934,7 +1012,44 @@ endif()
set(CMKR_TARGET exe) set(CMKR_TARGET exe)
# Make the executable the main target # Make the executable the main target
add_dependencies(exe dbg gui deps) add_dependencies(exe dbg gui loaddll deps)
# Target: headless
set(headless_SOURCES
cmake.toml
"src/headless/headless.cpp"
"src/headless/signaturecheck.cpp"
"src/headless/stringutils.cpp"
"src/headless/stringutils.h"
"src/headless/tostring.h"
)
add_executable(headless)
target_sources(headless PRIVATE ${headless_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${headless_SOURCES})
if(NOT TARGET bridge)
message(FATAL_ERROR "Target \"bridge\" referenced by \"headless\" does not exist!")
endif()
target_link_libraries(headless PRIVATE
bridge
)
if(MSVC) # msvc
target_link_options(headless PRIVATE
"/DEF:${CMAKE_SOURCE_DIR}/src/exe/signaturecheck.def"
)
endif()
get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT)
if(NOT CMKR_VS_STARTUP_PROJECT)
set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT headless)
endif()
set(CMKR_TARGET headless)
add_dependencies(headless exe)
# Target: launcher # Target: launcher
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86 if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
@ -942,7 +1057,7 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
cmake.toml cmake.toml
"src/exe/icon.rc" "src/exe/icon.rc"
"src/exe/resource.rc" "src/exe/resource.rc"
"src/exe/strings.rc" "src/exe/strings_utf8.rc"
"src/launcher/x64dbg_launcher.cpp" "src/launcher/x64dbg_launcher.cpp"
) )
@ -957,15 +1072,27 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
) )
set_target_properties(launcher PROPERTIES set_target_properties(launcher PROPERTIES
MSVC_RUNTIME_LIBRARY
"MultiThreaded$<$<CONFIG:Debug>:Debug>"
OUTPUT_NAME OUTPUT_NAME
x96dbg x96dbg
WIN32_EXECUTABLE WIN32_EXECUTABLE
ON ON
) )
if(X64DBG_BUILD_IN_TREE) # X64DBG_BUILD_IN_TREE
set_target_properties(launcher PROPERTIES
RUNTIME_OUTPUT_DIRECTORY
"${PROJECT_SOURCE_DIR}/bin"
)
endif()
get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT) get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT)
if(NOT CMKR_VS_STARTUP_PROJECT) if(NOT CMKR_VS_STARTUP_PROJECT)
set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT launcher) set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT launcher)
endif() endif()
set(CMKR_TARGET launcher)
add_dependencies(exe launcher)
endif() endif()

50
CMakeSettings.json Normal file
View File

@ -0,0 +1,50 @@
{
"configurations": [
{
"name": "x64-Release",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ]
},
{
"name": "x86-Release",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x86" ],
"variables": []
},
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": ""
},
{
"name": "x86-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x86" ],
"variables": []
}
]
}

View File

@ -2,9 +2,9 @@
<img width="100" src="https://github.com/x64dbg/x64dbg/raw/development/src/bug_black.png"/> <img width="100" src="https://github.com/x64dbg/x64dbg/raw/development/src/bug_black.png"/>
[![Build status](https://ci.appveyor.com/api/projects/status/h1j489qa1mx67e0h?svg=true)](https://ci.appveyor.com/project/mrexodia/x64dbg) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/x64dbg/localized.svg)](https://translate.x64dbg.com) [![Download x64dbg](https://img.shields.io/sourceforge/dm/x64dbg.svg)](https://sourceforge.net/projects/x64dbg/files/latest/download) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/x64dbg/localized.svg)](https://translate.x64dbg.com) [![Download x64dbg](https://img.shields.io/sourceforge/dm/x64dbg.svg)](https://sourceforge.net/projects/x64dbg/files/latest/download) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/x64dbg/x64dbg)
[![Discord](https://img.shields.io/badge/chat-on%20Discord-green.svg)](https://invite.gg/x64dbg) [![Telegram](https://img.shields.io/badge/chat-%20on%20Telegram-blue.svg)](https://telegram.me/x64dbg) [![Gitter](https://img.shields.io/badge/chat-on%20Gitter-lightseagreen.svg)](https://gitter.im/x64dbg/x64dbg) [![Matrix](https://img.shields.io/badge/chat-on%20Matrix-yellowgreen.svg)](https://riot.im/app/#/room/#x64dbg:matrix.org) [![Discord](https://img.shields.io/badge/chat-on%20Discord-green.svg)](https://discord.x64dbg.com) [![Slack](https://img.shields.io/badge/chat-on%20Slack-red.svg)](https://slack.x64dbg.com) [![Gitter](https://img.shields.io/badge/chat-on%20Gitter-lightseagreen.svg)](https://gitter.im/x64dbg/x64dbg) [![Matrix](https://img.shields.io/badge/chat-on%20Matrix-yellowgreen.svg)](https://riot.im/app/#/room/#x64dbg:matrix.org) [![IRC](https://img.shields.io/badge/chat-on%20IRC-purple.svg)](https://web.libera.chat/#x64dbg)
An open-source binary debugger for Windows, aimed at malware analysis and reverse engineering of executables you do not have the source code for. There are many features available and a comprehensive [plugin system](https://plugins.x64dbg.com) to add your own. You can find more information on the [blog](https://x64dbg.com/blog)! An open-source binary debugger for Windows, aimed at malware analysis and reverse engineering of executables you do not have the source code for. There are many features available and a comprehensive [plugin system](https://plugins.x64dbg.com) to add your own. You can find more information on the [blog](https://x64dbg.com/blog)!

View File

@ -1,83 +0,0 @@
@echo off
echo Saving PATH
if "%OLDPATH%"=="" set OLDPATH=%PATH%
cd %~dp0
if /i "%1"=="x32" call setenv.bat x32&set type=Configuration=Release;Platform=Win32&goto build
if /i "%1"=="x64" call setenv.bat x64&set type=Configuration=Release;Platform=x64&goto build
if /i "%1"=="coverity" goto coverity
if /i "%1"=="sonarqube" goto sonarqube
goto usage
:build
echo Building DBG...
if "%MAXCORES%"=="" (
msbuild.exe x64dbg.sln /m /verbosity:minimal /t:Rebuild /p:%type%
) else (
set CL=/MP%MAXCORES%
msbuild.exe x64dbg.sln /m:1 /verbosity:minimal /t:Rebuild /p:%type%
)
if not %ERRORLEVEL%==0 exit
echo Building GUI...
rmdir /S /Q src\gui_build
cd src\gui
qmake x64dbg.pro CONFIG+=release
if not %ERRORLEVEL%==0 exit
if "%MAXCORES%"=="" (
jom
) else (
jom /J %MAXCORES%
)
if not %ERRORLEVEL%==0 exit
cd ..\..
goto :restorepath
:coverity
if "%2"=="" (
echo "Usage: build.bat coverity x32/x64"
goto usage
)
call setenv.bat coverity
echo Building with Coverity
cov-configure --msvc
cov-build --dir cov-int --instrument build.bat %2
goto :restorepath
:sonarqube
if "%2"=="" (
echo "Usage: build.bat sonarqube x32/x64"
goto usage
)
echo Building with SonarQube
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/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/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
:usage
echo "Usage: build.bat x32/x64/coverity"
echo.
echo Examples:
echo build.bat x32 : builds 32-bit release build
echo build.bat x64 : builds 64-bit release build
echo build.bat coverity x32 : builds 32-bit coverity build
echo build.bat coverity x64 : builds 64-bit coverity build
goto :restorepath
:restorepath
echo Resetting PATH
set PATH=%OLDPATH%
set OLDPATH=

View File

@ -1,86 +0,0 @@
@echo off
echo Cleaning base directory...
del /Q *.sdf
del /Q *.layout
del /Q /A H *.suo
rmdir /S /Q ipch
rmdir /S /Q release
rmdir /S /Q build
rmdir /S /Q cov-int
echo Cleaning BRIDGE...
cd src\bridge
call :delfiles
echo Cleaning DBG...
cd src\dbg
call :delfiles
echo Cleaning EXE...
cd src\exe
call :delfiles
echo Cleaning LAUNCHER...
cd src\launcher
call :delfiles
echo Cleaning GUI SRC...
rmdir /S /Q src\gui_build
echo Cleaning GUI...
cd src/gui
rmdir /S /Q build
del /Q Makefile*
del /Q *.pdb
cd ..\..
echo Cleaning bin\
del /Q bin\*.pdb
del /Q bin\*.exp
del /Q bin\*.a
del /Q bin\*.lib
del /Q bin\*.def
del /Q bin\x96dbg.exe
echo Cleaning bin\x32...
rmdir /S /Q bin\x32\db
del /Q bin\x32\*.pdb
del /Q bin\x32\*.exp
del /Q bin\x32\*.a
del /Q bin\x32\*.lib
del /Q bin\x32\*.def
del /Q bin\x32\x32dbg.exe
del /Q bin\x32\x32dbg.dll
del /Q bin\x32\x32gui.dll
del /Q bin\x32\x32bridge.dll
echo Cleaning bin\x64...
rmdir /S /Q bin\x64\db
del /Q bin\x64\*.pdb
del /Q bin\x64\*.exp
del /Q bin\x64\*.a
del /Q bin\x64\*.lib
del /Q bin\x64\*.def
del /Q bin\x64\x64dbg.exe
del /Q bin\x64\x64dbg.dll
del /Q bin\x64\x64gui.dll
del /Q bin\x64\x64bridge.dll
echo Cleaning help...
cd help
del /Q *.chm
rmdir /S /Q output
echo Done!
exit 0
:delfiles
rmdir /S /Q obj
rmdir /S /Q Win32
rmdir /S /Q x64
del /Q *.bmarks
del /Q *.layout
del /Q *.depend
del /Q *.pdb
cd ..\..

View File

@ -2,9 +2,16 @@
version = "3.15" version = "3.15"
cmkr-include = "cmake/cmkr.cmake" cmkr-include = "cmake/cmkr.cmake"
[options]
X64DBG_BUILD_IN_TREE = true
[variables]
CMAKE_MODULE_PATH = "${CMAKE_SOURCE_DIR}/cmake"
[project] [project]
name = "x64dbg" name = "x64dbg"
description = "An open-source x64/x32 debugger for windows." description = "An open-source x64/x32 debugger for windows."
msvc-runtime = "dynamic"
include-before = [ include-before = [
"cmake/VSToolchain.cmake" "cmake/VSToolchain.cmake"
] ]
@ -17,7 +24,7 @@ x86 = "CMAKE_SIZEOF_VOID_P EQUAL 4"
x64 = "CMAKE_SIZEOF_VOID_P EQUAL 8" x64 = "CMAKE_SIZEOF_VOID_P EQUAL 8"
[find-package] [find-package]
Qt5 = { components = ["Widgets", "Network", "WinExtras"] } Qt5 = { components = ["Widgets", "WinExtras"] }
[target.zydis_wrapper] [target.zydis_wrapper]
type = "static" type = "static"
@ -91,9 +98,9 @@ sources = [
"src/dbg/XEDParse/*.h", "src/dbg/XEDParse/*.h",
] ]
private-link-libraries = [ private-link-libraries = [
"zydis_wrapper", "::zydis_wrapper",
"bridge", "::bridge",
"btparser", "::btparser",
"Psapi", "Psapi",
"Shlwapi", "Shlwapi",
"Ws2_32", "Ws2_32",
@ -127,6 +134,12 @@ private-include-directories = [
"src/dbg/analysis", "src/dbg/analysis",
"src/dbg/commands", "src/dbg/commands",
] ]
msvc.link-options = [
"/DELAYLOAD:TitanEngine.dll",
]
msvc.link-libraries = [
"Delayimp",
]
[target.dbg.properties] [target.dbg.properties]
x86.OUTPUT_NAME = "x32dbg" x86.OUTPUT_NAME = "x32dbg"
@ -142,11 +155,11 @@ sources = [
] ]
private-link-libraries = [ private-link-libraries = [
"Qt5::Widgets", "Qt5::Widgets",
"Qt5::Network",
"Qt5::WinExtras", "Qt5::WinExtras",
"zydis_wrapper", "::zydis_wrapper",
"bridge", "::bridge",
"winmm", "winmm",
"wininet",
] ]
x86.private-link-libraries = [ x86.private-link-libraries = [
"src/gui/Src/ThirdPartyLibs/ldconvert/ldconvert_x86.lib", "src/gui/Src/ThirdPartyLibs/ldconvert/ldconvert_x86.lib",
@ -181,6 +194,7 @@ AUTOUIC = true
[target.loaddll] [target.loaddll]
type = "executable" type = "executable"
msvc-runtime = "static"
sources = [ sources = [
"src/loaddll/loaddll.cpp", "src/loaddll/loaddll.cpp",
] ]
@ -190,32 +204,44 @@ x86.link-libraries = [
x64.link-libraries = [ x64.link-libraries = [
"src/dbg/ntdll/ntdll_x64.lib", "src/dbg/ntdll/ntdll_x64.lib",
] ]
msvc.link-options = [
"/DELAYLOAD:user32.dll",
]
msvc.link-libraries = [
"Delayimp",
]
[target.loaddll.properties] [target.loaddll.properties]
WIN32_EXECUTABLE = "ON" WIN32_EXECUTABLE = "ON"
[target.exe] [target.exe]
type = "executable" type = "executable"
msvc-runtime = "static"
sources = [ sources = [
"src/exe/*.cpp", "src/exe/*.cpp",
"src/exe/*.h", "src/exe/*.h",
"src/exe/manifest.xml", "src/exe/manifest.xml",
"src/exe/resource.rc", "src/exe/resource.rc",
"src/exe/strings.rc", "src/exe/strings_utf8.rc",
] ]
x86.sources = ["src/exe/icon32.rc"] x86.sources = ["src/exe/icon32.rc"]
x64.sources = ["src/exe/icon64.rc"] x64.sources = ["src/exe/icon64.rc"]
link-libraries = [ link-libraries = [
"bridge", "::bridge",
"Wintrust", "Wintrust",
] ]
msvc.link-options = [ msvc.link-options = [
"/DEF:${CMAKE_SOURCE_DIR}/src/exe/signaturecheck.def", "/DEF:${CMAKE_SOURCE_DIR}/src/exe/signaturecheck.def",
"/INCREMENTAL:NO", "/DELAYLOAD:user32.dll",
"/DELAYLOAD:wintrust.dll",
"/DELAYLOAD:$<TARGET_FILE_NAME:bridge>",
]
msvc.link-libraries = [
"Delayimp",
] ]
cmake-after = """ cmake-after = """
# Make the executable the main target # Make the executable the main target
add_dependencies(exe dbg gui deps) add_dependencies(exe dbg gui loaddll deps)
""" """
[target.exe.properties] [target.exe.properties]
@ -225,20 +251,37 @@ x86.PDB_NAME = "x32dbg_exe"
x64.PDB_NAME = "x64dbg_exe" x64.PDB_NAME = "x64dbg_exe"
WIN32_EXECUTABLE = "ON" WIN32_EXECUTABLE = "ON"
[target.headless]
type = "executable"
sources = [
"src/headless/*.cpp",
"src/headless/*.h",
]
link-libraries = [
"::bridge",
]
msvc.link-options = [
"/DEF:${CMAKE_SOURCE_DIR}/src/exe/signaturecheck.def",
]
cmake-after = "add_dependencies(headless exe)"
[target.launcher] [target.launcher]
type = "executable" type = "executable"
condition = "x86" condition = "x86"
msvc-runtime = "static"
sources = [ sources = [
"src/launcher/*.cpp", "src/launcher/*.cpp",
"src/exe/icon.rc", "src/exe/icon.rc",
"src/exe/resource.rc", "src/exe/resource.rc",
"src/exe/strings.rc", "src/exe/strings_utf8.rc",
] ]
link-libraries = [ link-libraries = [
"Shlwapi", "Shlwapi",
"Comctl32", "Comctl32",
] ]
cmake-after = "add_dependencies(exe launcher)"
[target.launcher.properties] [target.launcher.properties]
OUTPUT_NAME = "x96dbg" OUTPUT_NAME = "x96dbg"
WIN32_EXECUTABLE = "ON" WIN32_EXECUTABLE = "ON"
X64DBG_BUILD_IN_TREE.RUNTIME_OUTPUT_DIRECTORY = "${PROJECT_SOURCE_DIR}/bin"

39
cmake/FindQt5.cmake Normal file
View File

@ -0,0 +1,39 @@
# Documentation: https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#find-modules
if(Qt5_FOUND)
return()
endif()
find_package(Qt5 COMPONENTS ${Qt5_FIND_COMPONENTS} QUIET CONFIG)
if(Qt5_FOUND)
if(NOT Qt5_FIND_QUIETLY)
message(STATUS "Qt5 found: ${Qt5_DIR}")
endif()
return()
endif()
if(Qt5_FIND_REQUIRED AND MSVC)
message(STATUS "Downloading Qt5...")
# Fix warnings about DOWNLOAD_EXTRACT_TIMESTAMP
if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW)
endif()
include(FetchContent)
set(FETCHCONTENT_QUIET OFF)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
FetchContent_Declare(Qt5
URL "https://github.com/x64dbg/deps/releases/download/2025.07.02/qt5.12.12-msvc2017_64.7z"
URL_HASH SHA256=770490bf09514982c8192ebde9a1fac8821108ba42b021f167bac54e85ada48a
)
else()
FetchContent_Declare(Qt5
URL "https://github.com/x64dbg/deps/releases/download/2025.07.02/qt5.12.12-msvc2017.7z"
URL_HASH SHA256=3ff2a58e5ed772be475643cd7bb2df3e5499d7169d794ddf1ed5df5c5e862cb6
)
endif()
FetchContent_MakeAvailable(Qt5)
unset(FETCHCONTENT_QUIET)
set(Qt5_ROOT ${qt5_SOURCE_DIR})
find_package(Qt5 COMPONENTS ${Qt5_FIND_COMPONENTS} CONFIG REQUIRED)
endif()

View File

@ -7,10 +7,15 @@ if (CMAKE_GENERATOR MATCHES "Visual Studio")
add_compile_options(/MP) add_compile_options(/MP)
endif() endif()
# TODO: support other toolchains
if(MSVC) if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG:FULL /INCREMENTAL:NO /OPT:REF /OPT:ICF" CACHE STRING "") # Generate PDB files for release builds
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DEBUG:FULL /INCREMENTAL:NO /OPT:REF /OPT:ICF" CACHE STRING "") add_link_options($<$<CONFIG:Release,MinSizeRel>:/DEBUG:FULL>)
# Disable incremental linking
add_link_options(
$<$<CONFIG:Release,MinSizeRel,RelWithDebInfo>:/INCREMENTAL:NO>
$<$<CONFIG:Release,MinSizeRel,RelWithDebInfo>:/OPT:REF>
$<$<CONFIG:Release,MinSizeRel,RelWithDebInfo>:/OPT:ICF>
)
endif() endif()
# Make the project look nicer in IDEs # Make the project look nicer in IDEs
@ -20,3 +25,16 @@ set_property(GLOBAL PROPERTY AUTOMOC_SOURCE_GROUP "Generated Files")
set_property(GLOBAL PROPERTY AUTOMOC_TARGETS_FOLDER "CMakePredefinedTargets") set_property(GLOBAL PROPERTY AUTOMOC_TARGETS_FOLDER "CMakePredefinedTargets")
set_property(GLOBAL PROPERTY AUTORCC_SOURCE_GROUP "Generated Files") set_property(GLOBAL PROPERTY AUTORCC_SOURCE_GROUP "Generated Files")
set_property(GLOBAL PROPERTY AUTORCC_TARGETS_FOLDER "CMakePredefinedTargets") set_property(GLOBAL PROPERTY AUTORCC_TARGETS_FOLDER "CMakePredefinedTargets")
# Build to the right output directory
if(X64DBG_BUILD_IN_TREE)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/x64$<$<CONFIG:Debug>:d>")
else()
set(OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin/x32$<$<CONFIG:Debug>:d>")
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY})
endif()

3
cmake/cmkr.cmake vendored
View File

@ -1,5 +1,8 @@
include_guard() include_guard()
# Initialize submodule if necessary
include(${CMAKE_CURRENT_LIST_DIR}/init-submodules.cmake)
# Change these defaults to point to your infrastructure if desired # Change these defaults to point to your infrastructure if desired
set(CMKR_REPO "https://github.com/build-cpp/cmkr" CACHE STRING "cmkr git repository" FORCE) set(CMKR_REPO "https://github.com/build-cpp/cmkr" CACHE STRING "cmkr git repository" FORCE)
set(CMKR_TAG "v0.2.44" CACHE STRING "cmkr git tag (this needs to be available forever)" FORCE) set(CMKR_TAG "v0.2.44" CACHE STRING "cmkr git tag (this needs to be available forever)" FORCE)

View File

@ -1,77 +1,91 @@
if(CMAKE_SCRIPT_MODE_FILE) if(CMAKE_SCRIPT_MODE_FILE)
set(GUI_DLL ${CMAKE_ARGV3}) set(GUI_DLL ${CMAKE_ARGV3})
set(DEPS_DIR ${CMAKE_ARGV4}) set(DEPS_DIR ${CMAKE_ARGV4})
set(WINDEPLOYQT ${CMAKE_ARGV5}) set(WINDEPLOYQT ${CMAKE_ARGV5})
get_filename_component(GUI_DIR ${GUI_DLL} DIRECTORY) get_filename_component(GUI_DIR ${GUI_DLL} DIRECTORY)
# Check if we already copied the dependencies # Check if we already copied the dependencies
if(EXISTS "${GUI_DIR}/.deps_copied") if(EXISTS "${GUI_DIR}/.deps_copied")
return() return()
endif() endif()
message(STATUS "Copying dependencies from ${DEPS_DIR} to ${GUI_DIR}") message(STATUS "Copying dependencies from ${DEPS_DIR} to ${GUI_DIR}")
execute_process(COMMAND ${WINDEPLOYQT} --no-compiler-runtime --force ${GUI_DLL}) execute_process(
COMMAND ${WINDEPLOYQT} --no-compiler-runtime --no-translations --no-opengl-sw --force ${GUI_DLL} --list relative
function(copy_dep relfile) OUTPUT_VARIABLE DEPS_COPIED
if(EXISTS ${relfile}) )
message(STATUS "Skipping ${relfile}")
return() # Split the output into lines
endif() string(REGEX REPLACE "\n" ";" DEPS_COPIED "${DEPS_COPIED}")
message(STATUS "Copying ${relfile}") foreach(line ${DEPS_COPIED})
get_filename_component(reldir ${relfile} DIRECTORY) message(STATUS "Copying ${line}")
get_filename_component(relfile ${relfile} NAME) endforeach()
file(COPY ${DEPS_DIR}/${relfile} DESTINATION ${GUI_DIR}/${reldir})
endfunction() function(copy_dep relfile)
if(EXISTS ${relfile})
file(GLOB DEPS RELATIVE ${DEPS_DIR} "${DEPS_DIR}/*.dll") message(STATUS "Skipping ${relfile}")
foreach(DEP ${DEPS}) return()
if(NOT DEP MATCHES "^(Qt5|msvc)") endif()
copy_dep(${DEP}) set(DEPS_COPIED ${DEPS_COPIED} ${relfile} PARENT_SCOPE)
endif() message(STATUS "Copying ${relfile}")
endforeach() get_filename_component(reldir ${relfile} DIRECTORY)
get_filename_component(relfile ${relfile} NAME)
copy_dep(GleeBug/TitanEngine.dll) file(COPY ${DEPS_DIR}/${relfile} DESTINATION ${GUI_DIR}/${reldir})
copy_dep(StaticEngine/TitanEngine.dll) endfunction()
file(TOUCH "${GUI_DIR}/.deps_copied") file(GLOB DEPS RELATIVE ${DEPS_DIR} "${DEPS_DIR}/*.dll")
foreach(DEP ${DEPS})
return() copy_dep(${DEP})
endif() endforeach()
if(NOT WIN32) copy_dep(GleeBug/TitanEngine.dll)
message(STATUS "copy_dependencies is only supported on Windows") copy_dep(StaticEngine/TitanEngine.dll)
return()
endif() list(JOIN DEPS_COPIED "\n" DEPS_COPIED)
file(WRITE "${GUI_DIR}/.deps_copied" "${DEPS_COPIED}")
if(NOT TARGET Qt5::windeployqt AND Qt5_FOUND AND TARGET Qt5::qmake)
get_target_property(_qt5_qmake_location Qt5::qmake IMPORTED_LOCATION) return()
endif()
execute_process(
COMMAND "${_qt5_qmake_location}" -query QT_INSTALL_PREFIX if(NOT WIN32)
RESULT_VARIABLE return_code message(STATUS "copy_dependencies is only supported on Windows")
OUTPUT_VARIABLE qt5_install_prefix return()
OUTPUT_STRIP_TRAILING_WHITESPACE endif()
)
if(NOT TARGET Qt5::windeployqt AND Qt5_FOUND AND TARGET Qt5::qmake)
set(imported_location "${qt5_install_prefix}/bin/windeployqt.exe") get_target_property(_qt5_qmake_location Qt5::qmake IMPORTED_LOCATION)
if(NOT EXISTS ${imported_location})
message(FATAL_ERROR "Qt5 tool not found: ${imported_location}") execute_process(
endif() COMMAND "${_qt5_qmake_location}" -query QT_INSTALL_PREFIX
RESULT_VARIABLE return_code
add_executable(Qt5::windeployqt IMPORTED) OUTPUT_VARIABLE qt5_install_prefix
OUTPUT_STRIP_TRAILING_WHITESPACE
set_target_properties(Qt5::windeployqt PROPERTIES )
IMPORTED_LOCATION ${imported_location}
) set(imported_location "${qt5_install_prefix}/bin/windeployqt.exe")
endif() if(NOT EXISTS ${imported_location})
message(FATAL_ERROR "Qt5 tool not found: ${imported_location}")
if(CMAKE_SIZEOF_VOID_P EQUAL 8) endif()
set(DEPS_DIR ${CMAKE_SOURCE_DIR}/deps/x64)
else() add_executable(Qt5::windeployqt IMPORTED)
set(DEPS_DIR ${CMAKE_SOURCE_DIR}/deps/x32)
endif() set_target_properties(Qt5::windeployqt PROPERTIES
IMPORTED_LOCATION ${imported_location}
add_custom_target(deps )
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_LIST_DIR}/deps.cmake $<TARGET_FILE:gui> ${DEPS_DIR} $<TARGET_FILE:Qt5::windeployqt> endif()
)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(DEPS_DIR ${CMAKE_SOURCE_DIR}/deps/x64)
else()
set(DEPS_DIR ${CMAKE_SOURCE_DIR}/deps/x32)
endif()
add_custom_target(deps
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_LIST_DIR}/deps.cmake $<TARGET_FILE:gui> ${DEPS_DIR} $<TARGET_FILE:Qt5::windeployqt>
)
# Make a rebuild copy the dependencies again
set_target_properties(deps PROPERTIES
ADDITIONAL_CLEAN_FILES $<TARGET_FILE_DIR:gui>/.deps_copied
)

View File

@ -0,0 +1,26 @@
function(init_submodule folder)
set(full_path "${CMAKE_CURRENT_SOURCE_DIR}/${folder}")
if(NOT EXISTS ${full_path})
message(FATAL_ERROR "Submodule folder does not exist: ${full_path}")
endif()
file(GLOB files "${full_path}/*")
if(NOT files)
find_package(Git REQUIRED)
message(STATUS "Submodule '${folder}' not initialized, running git...")
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse --show-toplevel
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE git_root
OUTPUT_STRIP_TRAILING_WHITESPACE
COMMAND_ERROR_IS_FATAL ANY
)
execute_process(
COMMAND "${GIT_EXECUTABLE}" submodule update --init -- "${full_path}"
WORKING_DIRECTORY "${git_root}"
COMMAND_ERROR_IS_FATAL ANY
)
endif()
endfunction()
init_submodule(src/dbg/btparser)
init_submodule(deps)

21
cmake/llvm-mingw.cmake Normal file
View File

@ -0,0 +1,21 @@
set(LLVM_MINGW /Users/admin/llvm-mingw-ucrt)
set(CMAKE_PREFIX_PATH /Users/admin/Qt5.6.3-msvc2015/msvc2015_64)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_C_COMPILER_TARGET ${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32)
set(CMAKE_C_COMPILER ${LLVM_MINGW}/bin/x86_64-w64-mingw32-clang)
set(CMAKE_CXX_COMPILER ${LLVM_MINGW}/bin/x86_64-w64-mingw32-clang++)
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_VERSION 1)
# This is working (thanks to Simon for finding this trick)
set(CMAKE_AR ${LLVM_MINGW}/bin/llvm-ar)
set(CMAKE_RANLIB ${LLVM_MINGW}/bin/x86_64-w64-mingw32-ranlib)
set(CMAKE_RC_COMPILER ${LLVM_MINGW}/bin/llvm-rc)
set(CMAKE_RC_COMPILER /Users/admin/Projects/zig-cross/cmake/zig-rc)
set(CMAKE_PROJECT_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/qt-cross.cmake)
set(CMAKE_CXX_FLAGS_INIT "-stdlib=libc++ -mlzcnt")
set(CMAKE_EXE_LINKER_FLAGS_INIT "--start-no-unused-arguments -rtlib=compiler-rt -unwindlib=libunwind --end-no-unused-arguments")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "${CMAKE_EXE_LINKER_FLAGS_INIT}")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "${CMAKE_EXE_LINKER_FLAGS_INIT}")

31
cmake/qt-cross.cmake Normal file
View File

@ -0,0 +1,31 @@
include_guard()
message(STATUS "Configuring Qt for cross-compilation...")
# Qt
#set(AUTOMOC_EXECUTABLE /Users/admin/Projects/qtbase-wasm32-wasi/bin/moc)
#set(AUTORCC_EXECUTABLE /Users/admin/Projects/qtbase-wasm32-wasi/bin/rcc)
#set(AUTOUIC_EXECUTABLE /Users/admin/Projects/qtbase-wasm32-wasi/bin/uic)
set(QT_HOST_BIN_DIR /Users/admin/Projects/qtbase-wasm32-wasi/bin/)
function(qt5_host_tool name)
if (NOT TARGET Qt5::${name})
add_executable(Qt5::${name} IMPORTED)
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
set(imported_location ${QT_HOST_BIN_DIR}/${name}.exe)
else()
set(imported_location ${QT_HOST_BIN_DIR}/${name})
endif()
if(NOT EXISTS ${imported_location})
message(FATAL_ERROR "Qt5 tool not found: ${imported_location}")
endif()
set_target_properties(Qt5::${name} PROPERTIES
IMPORTED_LOCATION ${imported_location}
)
endif()
endfunction()
qt5_host_tool(qmake)
qt5_host_tool(moc)
qt5_host_tool(rcc)
qt5_host_tool(uic)

123
cmake/release.cmake Normal file
View File

@ -0,0 +1,123 @@
cmake_minimum_required(VERSION 3.15)
# Get the root directory
get_filename_component(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
set(RELEASE_DIR "${ROOT_DIR}/release")
# Clean up existing release directory
file(REMOVE_RECURSE "${RELEASE_DIR}")
file(MAKE_DIRECTORY "${RELEASE_DIR}")
# Setup pluginsdk directories
set(PLUGINSDK_DIR "${RELEASE_DIR}/pluginsdk")
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}")
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/dbghelp")
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/DeviceNameResolver")
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/jansson")
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/lz4")
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/TitanEngine")
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/XEDParse")
# Setup release directories
file(MAKE_DIRECTORY "${RELEASE_DIR}/release")
file(MAKE_DIRECTORY "${RELEASE_DIR}/release/translations")
file(MAKE_DIRECTORY "${RELEASE_DIR}/release/x32")
file(MAKE_DIRECTORY "${RELEASE_DIR}/release/x64")
# Copy pluginsdk files
set(PLUGINSDK_DIR "${RELEASE_DIR}/pluginsdk")
# Copy directories
file(COPY "${ROOT_DIR}/src/dbg/dbghelp/" DESTINATION "${PLUGINSDK_DIR}/dbghelp")
file(COPY "${ROOT_DIR}/src/dbg/DeviceNameResolver/" DESTINATION "${PLUGINSDK_DIR}/DeviceNameResolver")
file(COPY "${ROOT_DIR}/src/dbg/jansson/" DESTINATION "${PLUGINSDK_DIR}/jansson")
file(COPY "${ROOT_DIR}/src/dbg/lz4/" DESTINATION "${PLUGINSDK_DIR}/lz4")
file(COPY "${ROOT_DIR}/src/dbg/TitanEngine/" DESTINATION "${PLUGINSDK_DIR}/TitanEngine")
file(COPY "${ROOT_DIR}/src/dbg/XEDParse/" DESTINATION "${PLUGINSDK_DIR}/XEDParse")
# Remove TitanEngine.txt
file(REMOVE "${PLUGINSDK_DIR}/TitanEngine/TitanEngine.txt")
# Copy headers
file(GLOB PLUGIN_HEADERS
"${ROOT_DIR}/src/dbg/_plugin_types.h"
"${ROOT_DIR}/src/dbg/_plugins.h"
"${ROOT_DIR}/src/dbg/_scriptapi*.h"
"${ROOT_DIR}/src/dbg/_dbgfunctions.h"
"${ROOT_DIR}/src/bridge/bridge*.h"
)
file(COPY ${PLUGIN_HEADERS} DESTINATION "${PLUGINSDK_DIR}")
file(COPY "${ROOT_DIR}/bin/x32/x32bridge.lib" DESTINATION "${PLUGINSDK_DIR}")
file(COPY "${ROOT_DIR}/bin/x32/x32dbg.lib" DESTINATION "${PLUGINSDK_DIR}")
file(COPY "${ROOT_DIR}/bin/x64/x64bridge.lib" DESTINATION "${PLUGINSDK_DIR}")
file(COPY "${ROOT_DIR}/bin/x64/x64dbg.lib" DESTINATION "${PLUGINSDK_DIR}")
# Copy release files
set(RELEASE_MAIN_DIR "${RELEASE_DIR}/release")
# Handle deps_copied
set(DEPS_BLACKLIST libGLESV2.dll libEGL.dll d3dcompiler_47.dll)
function(handle_deps_copied arch)
file(READ "${ROOT_DIR}/bin/${arch}/.deps_copied" DEPS_COPIED)
string(REGEX REPLACE "\n" ";" DEPS_COPIED "${DEPS_COPIED}")
foreach(DEP ${DEPS_COPIED})
if(NOT ${DEP} IN_LIST DEPS_BLACKLIST)
get_filename_component(reldir ${DEP} DIRECTORY)
file(COPY "${ROOT_DIR}/bin/${arch}/${DEP}" DESTINATION "${RELEASE_MAIN_DIR}/${arch}/${reldir}")
endif()
endforeach()
endfunction()
handle_deps_copied("x64")
handle_deps_copied("x32")
# Copy themes
file(COPY "${ROOT_DIR}/bin/themes/" DESTINATION "${RELEASE_MAIN_DIR}/themes")
# Copy main files
file(COPY "${ROOT_DIR}/bin/x96dbg.exe" DESTINATION "${RELEASE_MAIN_DIR}")
file(COPY "${ROOT_DIR}/bin/mnemdb.json" DESTINATION "${RELEASE_MAIN_DIR}")
file(COPY "${ROOT_DIR}/bin/errordb.txt" DESTINATION "${RELEASE_MAIN_DIR}")
file(COPY "${ROOT_DIR}/bin/exceptiondb.txt" DESTINATION "${RELEASE_MAIN_DIR}")
file(COPY "${ROOT_DIR}/bin/ntstatusdb.txt" DESTINATION "${RELEASE_MAIN_DIR}")
file(COPY "${ROOT_DIR}/bin/winconstants.txt" DESTINATION "${RELEASE_MAIN_DIR}")
# Copy translations
file(GLOB TRANSLATION_FILES "${ROOT_DIR}/bin/translations/*.qm")
file(COPY ${TRANSLATION_FILES} DESTINATION "${RELEASE_MAIN_DIR}/translations")
# Copy x32 files
file(COPY "${ROOT_DIR}/bin/x32/x32bridge.dll" DESTINATION "${RELEASE_MAIN_DIR}/x32")
file(COPY "${ROOT_DIR}/bin/x32/x32dbg.dll" DESTINATION "${RELEASE_MAIN_DIR}/x32")
file(COPY "${ROOT_DIR}/bin/x32/x32dbg.exe" DESTINATION "${RELEASE_MAIN_DIR}/x32")
file(COPY "${ROOT_DIR}/bin/x32/x32gui.dll" DESTINATION "${RELEASE_MAIN_DIR}/x32")
file(COPY "${ROOT_DIR}/bin/x32/loaddll.exe" DESTINATION "${RELEASE_MAIN_DIR}/x32")
# Copy x64 files
file(COPY "${ROOT_DIR}/bin/x64/x64bridge.dll" DESTINATION "${RELEASE_MAIN_DIR}/x64")
file(COPY "${ROOT_DIR}/bin/x64/x64dbg.dll" DESTINATION "${RELEASE_MAIN_DIR}/x64")
file(COPY "${ROOT_DIR}/bin/x64/x64dbg.exe" DESTINATION "${RELEASE_MAIN_DIR}/x64")
file(COPY "${ROOT_DIR}/bin/x64/x64gui.dll" DESTINATION "${RELEASE_MAIN_DIR}/x64")
file(COPY "${ROOT_DIR}/bin/x64/loaddll.exe" DESTINATION "${RELEASE_MAIN_DIR}/x64")
# Create commithash.txt
execute_process(
COMMAND git rev-parse HEAD
OUTPUT_FILE "${RELEASE_DIR}/commithash.txt"
WORKING_DIRECTORY "${ROOT_DIR}"
)
# Copy PDB files
file(MAKE_DIRECTORY "${RELEASE_DIR}/pdb")
file(MAKE_DIRECTORY "${RELEASE_DIR}/pdb/x32")
file(MAKE_DIRECTORY "${RELEASE_DIR}/pdb/x64")
file(GLOB PDB_FILES "${ROOT_DIR}/bin/*.pdb")
file(COPY ${PDB_FILES} DESTINATION "${RELEASE_DIR}/pdb")
file(GLOB PDB_X32_FILES "${ROOT_DIR}/bin/x32/*.pdb")
file(COPY ${PDB_X32_FILES} DESTINATION "${RELEASE_DIR}/pdb/x32")
file(GLOB PDB_X64_FILES "${ROOT_DIR}/bin/x64/*.pdb")
file(COPY ${PDB_X64_FILES} DESTINATION "${RELEASE_DIR}/pdb/x64")

2
deps

@ -1 +1 @@
Subproject commit fdef4703ba4045204d36f6f5c1734749a8b7204a Subproject commit 5b16b5f74c0f7abd4bcef9a58f449b8d55c526c3

7
docs/.editorconfig Normal file
View File

@ -0,0 +1,7 @@
; Top-most EditorConfig file
root = true
; Windows-style newlines
[*]
end_of_line = CRLF

3
docs/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
_build*/
*.chm
python-2.7.18.amd64.portable/

23
docs/.readthedocs.yaml Normal file
View File

@ -0,0 +1,23 @@
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Set the version of Python and other tools you might need
build:
os: ubuntu-22.04
tools:
python: "2.7"
# Build documentation in the docs/ directory with Sphinx
sphinx:
builder: html
configuration: docs/conf.py
fail_on_warning: false
# We recommend specifying your dependencies to enable reproducible builds:
# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
python:
install:
- requirements: docs/requirements.txt

13
docs/README.md Normal file
View File

@ -0,0 +1,13 @@
# docs
Documentation repository for [x64dbg](http://x64dbg.com) at [Read the Docs](https://readthedocs.org/projects/x64dbg).
## Building
1. Download https://github.com/x64dbg/docs/releases/download/python27-portable/python-2.7.18.amd64.portable.7z
2. Extract to the `python-2.7.18.amd64.portable` folder
3. run `makechm.bat`. It will build the .CHM help file.
Note: The following patch was applied:
Add `relpath = relpath.replace(os.path.sep, '/')` after `C:\Python27\Lib\site-packages\recommonmark\transform.py` line `63`

0
docs/_static/EMPTY vendored Normal file
View File

0
docs/_templates/EMPTY vendored Normal file
View File

View File

@ -0,0 +1,11 @@
# GetRelocSize/grs
Get the correct size of a relocation table. This is useful while unpacking and restoring the original relocation table.
## arguments
`arg1` The address of the relocation table to analyze.
## results
The found size of the relocation table is stored in `$result`.

View File

@ -0,0 +1,11 @@
# analadv
Do function analysis, embedded data analysis and xref analysis.
## arguments
This command has no arguments.
## results
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# analrecur/analr
Do single function analysis.
## arguments
`arg1` The base address of the function to analyze.
## results
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# analxrefs/analx
Do xrefs analysis in the module selected in the disassembly view.
## arguments
This command has no arguments.
## results
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# analyse/analyze/anal
Do function analysis.
## arguments
This command has no arguments.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# analyse_nukem/analyze_nukem/anal_nukem
Do function analysis using nukem's algorithm.
## arguments
This command has no arguments.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# cfanalyze/cfanalyse/cfanal
Do control flow analysis in the module selected in the disassembly view.
## arguments
This command has no arguments.
## results
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# exanalyse/exanalyze/exanal
Do exception directory analysis. This kind of analysis doesn't work on 32-bit executables.
## arguments
This command has no arguments.
## results
This command does not set any result variables.

View File

@ -0,0 +1,12 @@
exhandlers
==========
Print all exception handlers, including SEH(StructuredExceptionHandler), VEH(VectoredExceptionHandler),
VCH(VectoredContinueHandler) and UnhandledExceptionFilter, into the log.
arguments
---------
This command has no arguments
results
-------
This command does not set any result variables.

View File

@ -0,0 +1,24 @@
# exinfo
Print the `EXCEPTION_DEBUG_INFO` structure from the last exception.
Sample output:
```
EXCEPTION_DEBUG_INFO:
dwFirstChance: 1
ExceptionCode: 80000001 (EXCEPTION_GUARD_PAGE)
ExceptionFlags: 00000000
ExceptionAddress: 00007FFE16FB1B91 ntdll.00007FFE16FB1B91
NumberParameters: 2
ExceptionInformation[00]: 0000000000000008
ExceptionInformation[01]: 00007FFE16FB1B91 ntdll.00007FFE16FB1B91
```
arguments
---------
This command has no arguments
results
-------
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# imageinfo
Output the image information for a module. The information describes the Characteristics and DLL Characteristics fields in the PE header structure.
## arguments
`[arg1]` The base of the module. If not specified the module at CIP will be used.
## results
This command does not set any result variables.

View File

@ -0,0 +1,25 @@
Analysis
========
This section contains commands that are used for analysis.
**Contents:**
.. toctree::
:maxdepth: 1
analyse
exanalyse
cfanalyze
analyse_nukem
analxrefs
analrecur
analadv
virtualmod
symdownload
symload
symunload
imageinfo
GetRelocSize
exhandlers
exinfo
traceexecute

View File

@ -0,0 +1,13 @@
# symdownload/downloadsym
Attempt to download a symbol from a Symbol Store.
## arguments
`[arg1]` Module name (with or without extension) to attempt to download symbols for. When not specified, an attempt will be done to download symbols for all loaded modules.
`[arg2]` Symbol Store URL. When not specified, the default store will be used.
## result
This command does not set any result variables.

View File

@ -0,0 +1,15 @@
# symload/loadsym
Attempt to load a symbol from disk.
## arguments
`arg1` Module name (with or without extension) to attempt to load symbols for.
`arg2` Path to the symbol file.
`[arg3]` Force load. Set to `1` to skip symbol validation.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# symunload/unloadsym
Unload a symbol.
## arguments
`arg1` Module name (with or without extension) to unload symbols from.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# traceexecute
Tell the debugger that an address has been traced.
## arguments
`arg1` The address.
## result
This command does not set any result variables.

View File

@ -0,0 +1,15 @@
# virtualmod
Tell the debugger to treat a memory range as a virtual module.
## arguments
`arg1` the user-supplied module name.
`arg2` the base of the memory range.
`[arg3]` the size of the memory range.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# DeleteBPX/bpc/bc
Delete a breakpoint set using the SetBPX command.
## arguments
`[arg1]` Name or address of the breakpoint to delete. If this argument is not specified, all breakpoints will be deleted.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# DeleteExceptionBPX
Delete an exception breakpoint set using the SetExceptionBPX command.
## arguments
`[arg1]` Name, exception name or code of the exception breakpoint to delete. If this argument is not specified, all exception breakpoints will be deleted.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# DeleteHardwareBreakpoint/bphc/bphwc
Delete a hardware breakpoint set using the SetHardwareBreakpoint command.
## arguments
`[arg1]` Name or address of the hardware breakpoint to delete. If this argument is not specified, all hardware breakpoints will be deleted.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# DeleteMemoryBPX/membpc/bpmc
Delete a memory breakpoint set using the SetMemoryBPX command.
## arguments
`[arg1]` Name or (base) address of the memory breakpoint to delete. If this argument is not specified, all memory breakpoints will be deleted.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# DisableBPX/bpd/bd
Disable a breakpoint set using the SetBPX command.
## arguments
`[arg1]` Name or address of the breakpoint to disable. If this argument is not specified, all breakpoints will be disabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# DisableExceptionBPX
Disable an exception breakpoint set using the SetExceptionBPX command.
## arguments
`[arg1]` Name, exception name or code of the exception breakpoint to enable. If this argument is not specified, all exception breakpoints will be disabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# DisableHardwareBreakpoint/bphd/bphwd
Disable a hardware breakpoint.
## arguments
`[arg1]` Address of the hardware breakpoint to disable. If this argument is not specified, all hardware breakpoints will be disabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# DisableMemoryBreakpoint/membpd/bpmd
Disable a memory breakpoint.
## arguments
`[arg1]` Address of the memory breakpoint to disable. If this argument is not specified, all memory breakpoints will be disabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# EnableBPX/bpe/be
Enable a breakpoint set using the SetBPX command.
## arguments
`[arg1]` Name or address of the breakpoint to enable. If this argument is not specified, all breakpoints will be enabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# EnableExceptionBPX
Enable an exception breakpoint set using the SetExceptionBPX command.
## arguments
`[arg1]` Name, exception name or code of the exception breakpoint to enable. If this argument is not specified, all exception breakpoints will be enabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# EnableHardwareBreakpoint/bphe/bphwe
Enable a previously disabled hardware breakpoint.
## arguments
`[arg1]` Address of the hardware breakpoint to enable. If this argument is not specified, as many as possible hardware breakpoints will be enabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# EnableMemoryBreakpoint/membpe/bpme
Enable a previously disabled memory breakpoint.
## arguments
`[arg1]` Address of the memory breakpoint to enable. If this argument is not specified, all memory breakpoints will be enabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# LibrarianDisableBreakpoint/bpddll
Enable a DLL breakpoint set using the LibrarianSetBreakpoint command.
## arguments
`[arg1]` DLL Name of the DLL breakpoint to disable. If this argument is not specified, all DLL breakpoints will be disabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# LibrarianEnableBreakpoint/bpedll
Enable a DLL breakpoint set using the LibrarianSetBreakpoint command.
## arguments
`[arg1]` DLL Name of the DLL breakpoint to enable. If this argument is not specified, all DLL breakpoints will be enabled.
## result
This command does not set any result variables.

View File

@ -0,0 +1,11 @@
# LibrarianRemoveBreakpoint/bcdll
Remove a DLL breakpoint.
## arguments
`arg1` DLL Name to remove the breakpoint from.
## result
This command does not set any result variables.

View File

@ -0,0 +1,15 @@
# LibrarianSetBreakpoint/bpdll
Set a singleshoot breakpoint on DLL load/unload.
## arguments
`arg1` DLL Name to break on.
`[arg2]` `a` means on load and unload, `l` means on load, `u` means on unload. When not specified, x64dbg will break on both load and unload.
`[arg3]` When specified, the breakpoint will be singleshoot. When not specified the breakpoint will not be removed after it has been hit.
## result
This command does not set any result variables.

View File

@ -0,0 +1,15 @@
# SetBPX/bp/bpx
Set an INT3 (SHORT/LONG) or UD2 breakpoint and optionally assign a name to it.
## arguments
`arg1` Address to put a breakpoint on. This can be an API name.
`[arg2]` Name of the breakpoint, use quotation marks to include spaces. This name can be used by the EnableBPX, DisableBPX and DeleteBPX functions as alias, but is mainly intended to provide a single line of information about the currently-hit breakpoint. When arg2 equals to a valid type (arg3) the type is used and arg2 is ignored.
`[arg3]` Breakpoint type. Can be one of the following options in random order: "ss" (single shot breakpoint), "long" (CD03), "ud2" (0F0B) and "short" (CC). You can combine the "ss" option with one of the type options in one string. Example: "SetBPX 00401000,"entrypoint",ssud2" will set a single shot UD2 breakpoint at 00401000 with the name "entrypoint". When specifying no type or just the type "ss" the default type will be used. Per default this equals to the "short" type. You can change the default type using the "SetBPXOptions" command.
## result
This command does not any result variables.

View File

@ -0,0 +1,11 @@
# SetBPXOptions/bptype
Set the default type for the "SetBPX" command.
## arguments
`arg1` Default type. This can be "short" (CC), "long" (CD03) or "ud2" (0F0B). Type default type affects both NORMAL and SINGLESHOT breakpoints.
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBPX
Set an exception breakpoint. If an exception breakpoint is active, all the exceptions with the same chance and code will be captured as a breakpoint event and will not be handled by the default exception handling policy.
## arguments
`arg1` Exception name or code of the new exception breakpoint
`[arg2]` Chance. Set to `first`/`1` to capture first-chance exceptions, `second`/`2` to capture second-chance exceptions, `all`/`3` to capture all exceptions. Default value is `first`.
## result
This command does not any result variables.

View File

@ -0,0 +1,15 @@
# SetHardwareBreakpoint/bph/bphws
Set a hardware breakpoint (using debug registers).
## arguments
`arg1` Address of the hardware breakpoint.
`[arg2]` Hardware breakpoint type. Can be either 'r' (readwrite), 'w' (write) or 'x' (execute). When not specified, 'x' is assumed.
`[arg3]` Hardware breakpoint size. Can be either '1', '2', '4' or '8' (x64 only). Per default, '1' is assumed. The address you're putting the hardware breakpoint on must be aligned to the specified size.
## result
This command does not set any result variables.

View File

@ -0,0 +1,15 @@
# SetMemoryBPX/membp/bpm
Set a memory breakpoint (GUARD_PAGE) on the whole memory region the provided address is in.
## arguments
`arg1` Address of or inside a memory region that will be watched.
`[arg2]` 1/0 restore the memory breakpoint once it's hit? When this value is not equal to '1' or '0', it's assumed to be arg3. This means "bpm eax,r" would be the same command as: "bpm eax,0,r".
`[arg3]` Breakpoint type, it can be 'a' (read+write+execute) 'r' (read), 'w' (write) or 'x' (execute). Per default, it's 'a' (read+write+execute)
## result
This command does not set any result variables.

View File

@ -0,0 +1,15 @@
# SetMemoryRangeBPX/memrangebp/bpmrange
Set a memory breakpoint (GUARD_PAGE) on a specific memory range.
## arguments
`start` Start of the memory range.
`size` Size of the memory range.
`[type]` Breakpoint type, it can be 'a' (read+write+execute) 'r' (read), 'w' (write) or 'x' (execute). Per default, it's 'a' (read+write+execute). Append `ss` for a singleshot breakpoint (you can also use [`SetMemoryBreakpointSingleshoot`](../conditional-breakpoint-control/SetMemoryBreakpointSingleshoot.md) to do this).
## result
This command does not set any result variables.

View File

@ -0,0 +1,20 @@
# bpgoto
Configure the breakpoint so that when the program reaches it, the program will be directed to a new location. It is equivallent to the following commands:
```
SetBreakpointCondition arg1, 0
SetBreakpointCommand arg1, "CIP=arg2"
SetBreakpointCommandCondition arg1, 1
SetBreakpointFastResume arg1, 0
```
## arguments
`arg1` The address of the breakpoint.
`arg2` The new address to execute if the breakpoint is reached.
## results
This command does not set any result variables.

View File

@ -0,0 +1,21 @@
# bplist
Get a list of breakpoints. This list includes their state (enabled/disabled), their type, their address and (optionally) their names.
## arguments
This command has no arguments.
## result
This command does not set any result variables. A list entry has the following format:
STATE:TYPE:ADDRESS\[:NAME\]
STATEcan be 0 or 1. 0 means disabled, 1 means enabled. Only singleshoot and 'normal' breakpoints can be disabled.
TYPEcan be one of the following values: BP, SS, HW and GP. BP stands for a normal breakpoint (set using the SetBPX command), SS stands for SINGLESHOT, HW stands for HARDWARE and GP stand for Guard Page, the way of setting memory breakpoints.
ADDRESSis the breakpoint address, given in 32 and 64 bits for the x32 and x64 debugger respectively.
NAMEis the name assigned to the breakpoint.

View File

@ -0,0 +1,34 @@
Breakpoint Control
==================
This section contains breakpoint control (set/delete/enable/disable) commands.
**Context:**
.. toctree::
:maxdepth: 0
SetBPX
DeleteBPX
EnableBPX
DisableBPX
SetHardwareBreakpoint
DeleteHardwareBreakpoint
EnableHardwareBreakpoint
DisableHardwareBreakpoint
SetMemoryBPX
SetMemoryRangeBPX
DeleteMemoryBPX
EnableMemoryBreakpoint
DisableMemoryBreakpoint
LibrarianSetBreakpoint
LibrarianRemoveBreakpoint
LibrarianEnableBreakpoint
LibrarianDisableBreakpoint
SetExceptionBPX
DeleteExceptionBPX
EnableExceptionBPX
DisableExceptionBPX
bpgoto
bplist
SetBPXOptions

View File

@ -0,0 +1,11 @@
# GetBreakpointHitCount
Gets the hit counter of a software breakpoint.
## arguments
`arg1` The address of the breakpoint.
## result
`$result` will be set to the current value of the hit counter.

View File

@ -0,0 +1,11 @@
# GetExceptionBreakpointHitCount
Gets the hit counter of an exception breakpoint.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
## result
`$result` will be set to the current value of the hit counter.

View File

@ -0,0 +1,11 @@
# GetHardwareBreakpointHitCount
Gets the hit counter of a hardware breakpoint.
## arguments
`arg1` The address of the breakpoint.
## result
`$result` will be set to the current value of the hit counter.

View File

@ -0,0 +1,11 @@
# GetLibrarianBreakpointHitCount
Gets the hit counter of a librarian breakpoint.
## arguments
`arg1` The DLL name.
## result
`$result` will be set to the current value of the hit counter.

View File

@ -0,0 +1,11 @@
# GetMemoryBreakpointHitCount
Gets the hit counter of a memory breakpoint.
## arguments
`arg1` The address of the breakpoint.
## result
`$result` will be set to the current value of the hit counter.

View File

@ -0,0 +1,13 @@
# ResetBreakpointHitCount
Resets the hit counter of a software breakpoint.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The new hit count (zero when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# ResetExceptionBreakpointHitCount
Resets the hit counter of an exception breakpoint.
## arguments
`arg1` The name, exception code or name of the exception breakpoint.
`[arg2]` The new hit count (zero when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# ResetHardwareBreakpointHitCount
Resets the hit counter of a hardware breakpoint.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The new hit count (zero when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# ResetLibrarianBreakpointHitCount
Resets the hit counter of a librarian breakpoint.
## arguments
`arg1` The DLL name.
`[arg2]` The new hit count (zero when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# ResetMemoryBreakpointHitCount
Resets the hit counter of a memory breakpoint.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The new hit count (zero when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointCommand
Sets the command to execute when a software breakpoint is hit. If the command condition is not specified, it will be executed when the debugger breaks, otherwise it will be executed when the condition is satisfied.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The command (empty when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointCommandCondition
Sets the command condition of a software breakpoint. When command condition is not specified, the command will be executed when the debugger would break, otherwise it will be executed when the condition is satisfied.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The command condition (default condition when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointCondition/bpcond/bpcnd
Sets the software breakpoint condition. When this condition is set, it is evaluated every time the breakpoint hits and the debugger would stop only if condition is not 0.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The condition expression.
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointFastResume
Sets the fast resume flag of a software breakpoint. If this flag is set and the break condition doesn't evaluate to break, no GUI, plugin, logging or any other action will be performed, except for incrementing the hit counter.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The fast resume flag. If it is 0 (default), fast resume is disabled, otherwise it is enabled
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointLog/bplog/bpl
Sets log text when a software breakpoint is hit. When log condition is not specified, it will always be logged regardless of the break condition, otherwise it will be logged when the logging condition is satisfied.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The log format string (see introduction/formatting).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointLogCondition/bplogcondition
Sets the logging condition of a software breakpoint. When log condition is not specified, log text always be logged regardless of the break condition, otherwise it will be logged when the logging condition is satisfied.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The logging condition (default condition when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointName/bpname
Sets the name of a software breakpoint. It will be displayed in the breakpoints view and in the log when the breakpoint is hit.
## arguments
`arg1` The address of an existing software breakpoint.
`[arg2]` The name of the breakpoint (empty when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointSilent
Sets the silent flag of a software breakpoint. If this flag is set, the default log message will not appear. User-defined log is not affected.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The silent flag. If it is 0 (default), silent is disabled, otherwise it is enabled
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetBreakpointSingleshoot
Sets the singleshoot flag of a software breakpoint. If this flag is set the breakpoint will be removed on the first hit.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The singleshoot flag. If it is 0 (default), singleshoot is disabled, otherwise it is enabled
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointCommand
Sets the command to execute when an exception breakpoint is hit. If the command condition is not specified, it will be executed when the debugger breaks, otherwise it will be executed when the condition is satisfied.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The command (empty when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointCommandCondition
Sets the command condition of an exception breakpoint. When command condition is not specified, the command will be executed when the debugger would break, otherwise it will be executed when the condition is satisfied.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The command condition (default condition when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointCondition
Sets the exception breakpoint condition. When this condition is set, it is evaluated every time the exception occurs (chance must match) and the debugger would stop only if condition is not 0.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The condition expression.
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointFastResume
Sets the fast resume flag of an exception breakpoint. If this flag is set and the break condition doesn't evaluate to break, no GUI, plugin, logging or any other action will be performed, except for incrementing the hit counter.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The fast resume flag. If it is 0 (default), fast resume is disabled, otherwise it is enabled
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointLog
Sets log text when an exception breakpoint is hit. When log condition is not specified, it will always be logged regardless of the break condition, otherwise it will be logged when the logging condition is satisfied.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The log format string (see introduction/formatting).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointLogCondition
Sets the logging condition of an exception breakpoint. When log condition is not specified, log text always be logged regardless of the break condition, otherwise it will be logged when the logging condition is satisfied.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The logging condition (default condition when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointName
Sets the name of an exception breakpoint. It will be displayed in the breakpoints view and in the log when the breakpoint is hit.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The name of the breakpoint (empty when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointSilent
Sets the silent flag of an exception breakpoint. If this flag is set, the default log message will not appear. User-defined log is not affected.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The silent flag. If it is 0 (default), silent is disabled, otherwise it is enabled
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetExceptionBreakpointSingleshoot
Sets the singleshoot flag of an exception breakpoint. If this flag is set the exception breakpoint will be removed on the first hit.
## arguments
`arg1` The name, exception name or code of the exception breakpoint.
`[arg2]` The singleshoot flag. If it is 0 (default), singleshoot is disabled, otherwise it is enabled
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetHardwareBreakpointCommand
Sets the command to execute when a hardware breakpoint is hit. If the command condition is not specified, it will be executed when the debugger breaks, otherwise it will be executed when the condition is satisfied.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The command (empty when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetHardwareBreakpointCommandCondition
Sets the command condition of a hardware breakpoint. When command condition is not specified, the command will be executed when the debugger would break, otherwise it will be executed when the condition is satisfied.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The command condition (default condition when not specified).
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetHardwareBreakpointCondition/bphwcond
Sets the hardware breakpoint condition. When this condition is set, it is evaluated every time the breakpoint hits and the debugger would stop only if condition is not 0.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The condition expression.
## result
This command does not set any result variables.

View File

@ -0,0 +1,13 @@
# SetHardwareBreakpointFastResume
Sets the fast resume flag of a hardware breakpoint. If this flag is set and the break condition doesn't evaluate to break, no GUI, plugin, logging or any other action will be performed, except for incrementing the hit counter.
## arguments
`arg1` The address of the breakpoint.
`[arg2]` The fast resume flag. If it is 0 (default), fast resume is disabled, otherwise it is enabled
## result
This command does not set any result variables.

Some files were not shown because too many files have changed in this diff Show More