Compare commits
153 Commits
2025.03.15
...
developmen
Author | SHA1 | Date |
---|---|---|
|
bec9333351 | |
|
bcdb5c5837 | |
|
e5cb193849 | |
|
736b2be377 | |
|
0fb8c3d263 | |
|
9fb30cc7b4 | |
|
7646a36dc9 | |
|
e9492e70d0 | |
|
d0eecd084e | |
|
699342d1b7 | |
|
2ea1f5b2a7 | |
|
f711458ff9 | |
|
9b57a49627 | |
|
8e71dad881 | |
|
2b10f47749 | |
|
2cd2476fbc | |
|
7065d6a7a0 | |
|
03aebe8a50 | |
|
5cf93e0c3a | |
|
9683bb38d0 | |
|
fe8e5a013e | |
|
65a087982b | |
|
23f0ece561 | |
|
abe77409b5 | |
|
a5cf563777 | |
|
32f42753fd | |
|
34705e27be | |
|
2aa48159b8 | |
|
58e7bf67bd | |
|
d88a62893a | |
|
2e3af1c9c9 | |
|
52e3121583 | |
|
4df4c2ec87 | |
|
5db5a106a0 | |
|
1eae9f72ea | |
|
655708309a | |
|
b2e6e501ba | |
|
9b7733598b | |
|
15b3035ffe | |
|
27bba69ea6 | |
|
8fe261cb82 | |
|
b1a14260f9 | |
|
df110dc06f | |
|
118d270d81 | |
|
1e9bae2021 | |
|
d01fcbdd34 | |
|
2223a7f10b | |
|
13b63bb2d4 | |
|
ba881ee3e8 | |
|
e125c96f05 | |
|
78ed057754 | |
|
fef5f2f2cd | |
|
2f6637f9cc | |
|
8197c96ce6 | |
|
cf64258e9b | |
|
33db0de838 | |
|
b75fdcd4a8 | |
|
a719a0f4b6 | |
|
972d296b5c | |
|
82c5725862 | |
|
167c8becfe | |
|
ab38798693 | |
|
f3862f4641 | |
|
d6cd31e1d3 | |
|
ff1b2b21b9 | |
|
e5ea90143f | |
|
f920310a93 | |
|
2d54cc46ec | |
|
fd153e701f | |
|
c5abf7dfc2 | |
|
f751f5bc18 | |
|
6a874665de | |
|
b4da6eda3c | |
|
c183595c1b | |
|
af7b4043a7 | |
|
72f159fa88 | |
|
acd8903e0b | |
|
2819790e13 | |
|
09c802bec5 | |
|
9f1e78710f | |
|
d519cd0e5b | |
|
822a86a483 | |
|
a5a25cc4a4 | |
|
c2615db58e | |
|
fc751c8d80 | |
|
5d7a71a2ca | |
|
02991d0cf6 | |
|
dcd4c069b1 | |
|
762b44d60d | |
|
90dec0a319 | |
|
7dfa4a736f | |
|
ec267b96c6 | |
|
93ae8b1560 | |
|
58cf1f8f5a | |
|
d36c3b0dfa | |
|
51b9e0ec08 | |
|
0288ff97fe | |
|
fb97407043 | |
|
5d6fe5e503 | |
|
6963ca7589 | |
|
3934a9ff96 | |
|
792b5fbaff | |
|
2c79b99644 | |
|
024b25a912 | |
|
16bf06d929 | |
|
60f9388938 | |
|
69df47aab7 | |
|
e40652fc5a | |
|
2df98d8074 | |
|
2a08360c67 | |
|
1bde29d9df | |
|
53637c610b | |
|
310935b749 | |
|
79e5e7ffcd | |
|
31993c2d58 | |
|
d659dc9a24 | |
|
a7e64fc72c | |
|
3caa50e4f2 | |
|
84a23f161f | |
|
54d8dd4c25 | |
|
0a6d8c5496 | |
|
c71327443d | |
|
298cf102be | |
|
8e52767d46 | |
|
cbc4896d43 | |
|
30fda8b41c | |
|
fd172927fe | |
|
ae8504f372 | |
|
1956402b30 | |
|
9eaa5f4553 | |
|
62421ffd16 | |
|
2192d19bed | |
|
8eb501713b | |
|
ca93f483fc | |
|
c2204b8431 | |
|
f2ee27b732 | |
|
66ddb4198e | |
|
5b2f5c4031 | |
|
04703952d6 | |
|
d1670eef81 | |
|
4d2d0bd410 | |
|
9b301b3c8d | |
|
b57b134b35 | |
|
8adaab5db5 | |
|
e8ffba6dcc | |
|
53d1123e83 | |
|
2cfccf8d5e | |
|
c113b20c4d | |
|
0939434287 | |
|
1218421857 | |
|
1c9d49af8c | |
|
0c4d84d0b2 | |
|
a3a96b71e4 |
Binary file not shown.
|
@ -3,31 +3,46 @@
|
|||
# Simple script to auto-format every source file before committing.
|
||||
#
|
||||
|
||||
#check if the formatter is present
|
||||
if [ ! -f ./.github/format/AStyleHelper.exe ]; then
|
||||
# Check if the formatter is present
|
||||
if [ ! -f .github/format/AStyleHelper.exe ]; then
|
||||
echo "AStyleHelper not found!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#format the code
|
||||
"./.github/format/AStyleHelper.exe" Silent
|
||||
# Get stamp file epoch (default to 0)
|
||||
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 [ $? == 0 ]; then
|
||||
# If the HEAD is newer than the stamp (we switched branches), set stamp to 0
|
||||
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
|
||||
fi
|
||||
|
||||
#stage the formatted files (when staged in this commit)
|
||||
gitFiles=$(git diff-index --name-only --cached HEAD)
|
||||
if [[ -n "${gitFiles}" ]]; then
|
||||
for fname in $gitFiles; do
|
||||
git add --all -- "${fname}"
|
||||
# Stage the formatted files (when staged in this commit)
|
||||
GIT_FILES=$(git diff-index --name-only --cached HEAD)
|
||||
if [[ -n "$GIT_FILES" ]]; then
|
||||
for GIT_FILE in $GIT_FILES; do
|
||||
git add --all -- "$GIT_FILE"
|
||||
done
|
||||
fi
|
||||
|
||||
#cancel commit if the changes were undone by the formatting
|
||||
gitFiles=$(git diff-index --name-only --cached HEAD)
|
||||
if [ -z "$gitFiles" ]; then
|
||||
"./.github/AStyleHelper.exe" "After formatting, no files were staged..."
|
||||
# Cancel commit if the changes were undone by the formatting
|
||||
GIT_FILES=$(git diff-index --name-only --cached HEAD)
|
||||
if [ -z "$GIT_FILES" ]; then
|
||||
".github/AStyleHelper.exe" "After formatting, no files were staged..."
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
@ -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,6 +4,7 @@
|
|||
/bin/*.dll
|
||||
/bin/*.ini
|
||||
/bin/*.chm
|
||||
/bin/*.zip
|
||||
/src/**/x64/
|
||||
/src/**/Win32/
|
||||
/src/gui_build/
|
||||
|
@ -25,7 +26,10 @@ cmake-build*/
|
|||
*.pro.user*
|
||||
*.orig
|
||||
*.pdb
|
||||
*.ilk
|
||||
.DS_Store
|
||||
Makefile
|
||||
Makefile.*
|
||||
|
||||
CMakeLists.txt.user
|
||||
/.cache
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[submodule "src/dbg/btparser"]
|
||||
path = src/dbg/btparser
|
||||
url = ../btparser
|
||||
url = ../../x64dbg/btparser
|
||||
[submodule "deps"]
|
||||
path = deps
|
||||
url = ../deps
|
||||
url = ../../x64dbg/deps
|
||||
shallow = true
|
|
@ -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")
|
||||
endif()
|
||||
|
||||
# Enable support for MSVC_RUNTIME_LIBRARY
|
||||
cmake_policy(SET CMP0091 NEW)
|
||||
|
||||
set(CMKR_ROOT_PROJECT OFF)
|
||||
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||
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
|
||||
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()
|
||||
|
||||
# Options
|
||||
option(X64DBG_BUILD_IN_TREE "" ON)
|
||||
|
||||
# Variables
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||||
|
||||
include("cmake/VSToolchain.cmake")
|
||||
|
||||
project(x64dbg
|
||||
|
@ -37,7 +50,6 @@ include("cmake/VSFlags.cmake")
|
|||
find_package(Qt5 REQUIRED
|
||||
COMPONENTS
|
||||
Widgets
|
||||
Network
|
||||
WinExtras
|
||||
)
|
||||
|
||||
|
@ -372,6 +384,8 @@ set(dbg_SOURCES
|
|||
"src/dbg/types.cpp"
|
||||
"src/dbg/types.h"
|
||||
"src/dbg/typesparser.cpp"
|
||||
"src/dbg/typevisitor.cpp"
|
||||
"src/dbg/typevisitor.h"
|
||||
"src/dbg/value.cpp"
|
||||
"src/dbg/value.h"
|
||||
"src/dbg/variable.cpp"
|
||||
|
@ -399,6 +413,24 @@ target_include_directories(dbg PRIVATE
|
|||
"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
|
||||
zydis_wrapper
|
||||
bridge
|
||||
|
@ -435,6 +467,12 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 8) # x64
|
|||
)
|
||||
endif()
|
||||
|
||||
if(MSVC) # msvc
|
||||
target_link_options(dbg PUBLIC
|
||||
"/DELAYLOAD:TitanEngine.dll"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
||||
set_target_properties(dbg PROPERTIES
|
||||
OUTPUT_NAME
|
||||
|
@ -560,6 +598,9 @@ set(gui_SOURCES
|
|||
"src/gui/Src/Gui/DisassemblerGraphView.h"
|
||||
"src/gui/Src/Gui/DisassemblyPopup.cpp"
|
||||
"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.h"
|
||||
"src/gui/Src/Gui/EditBreakpointDialog.ui"
|
||||
|
@ -644,7 +685,6 @@ set(gui_SOURCES
|
|||
"src/gui/Src/Gui/SourceViewerManager.h"
|
||||
"src/gui/Src/Gui/StructWidget.cpp"
|
||||
"src/gui/Src/Gui/StructWidget.h"
|
||||
"src/gui/Src/Gui/StructWidget.ui"
|
||||
"src/gui/Src/Gui/SymbolView.cpp"
|
||||
"src/gui/Src/Gui/SymbolView.h"
|
||||
"src/gui/Src/Gui/SymbolView.ui"
|
||||
|
@ -659,6 +699,8 @@ set(gui_SOURCES
|
|||
"src/gui/Src/Gui/ThreadView.h"
|
||||
"src/gui/Src/Gui/TimeWastedCounter.cpp"
|
||||
"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.h"
|
||||
"src/gui/Src/Gui/VirtualModDialog.ui"
|
||||
|
@ -778,13 +820,21 @@ target_include_directories(gui PRIVATE
|
|||
"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
|
||||
Qt5::Widgets
|
||||
Qt5::Network
|
||||
Qt5::WinExtras
|
||||
zydis_wrapper
|
||||
bridge
|
||||
winmm
|
||||
wininet
|
||||
)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
||||
|
@ -848,7 +898,21 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 8) # x64
|
|||
)
|
||||
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
|
||||
MSVC_RUNTIME_LIBRARY
|
||||
"MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
||||
WIN32_EXECUTABLE
|
||||
ON
|
||||
)
|
||||
|
@ -871,7 +935,7 @@ set(exe_SOURCES
|
|||
"src/exe/signaturecheck.cpp"
|
||||
"src/exe/signaturecheck.h"
|
||||
"src/exe/strings.h"
|
||||
"src/exe/strings.rc"
|
||||
"src/exe/strings_utf8.rc"
|
||||
"src/exe/x64dbg_exe.cpp"
|
||||
)
|
||||
|
||||
|
@ -892,18 +956,37 @@ add_executable(exe)
|
|||
target_sources(exe PRIVATE ${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
|
||||
bridge
|
||||
Wintrust
|
||||
)
|
||||
|
||||
if(MSVC) # msvc
|
||||
target_link_options(exe PRIVATE
|
||||
"/DEF:${CMAKE_SOURCE_DIR}/src/exe/signaturecheck.def"
|
||||
"/INCREMENTAL:NO"
|
||||
target_link_libraries(exe PRIVATE
|
||||
Delayimp
|
||||
)
|
||||
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
|
||||
set_target_properties(exe PROPERTIES
|
||||
OUTPUT_NAME
|
||||
|
@ -922,11 +1005,6 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 8) # x64
|
|||
)
|
||||
endif()
|
||||
|
||||
set_target_properties(exe PROPERTIES
|
||||
WIN32_EXECUTABLE
|
||||
ON
|
||||
)
|
||||
|
||||
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 exe)
|
||||
|
@ -934,7 +1012,44 @@ endif()
|
|||
|
||||
set(CMKR_TARGET exe)
|
||||
# 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
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
||||
|
@ -942,7 +1057,7 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
|||
cmake.toml
|
||||
"src/exe/icon.rc"
|
||||
"src/exe/resource.rc"
|
||||
"src/exe/strings.rc"
|
||||
"src/exe/strings_utf8.rc"
|
||||
"src/launcher/x64dbg_launcher.cpp"
|
||||
)
|
||||
|
||||
|
@ -957,15 +1072,27 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
|||
)
|
||||
|
||||
set_target_properties(launcher PROPERTIES
|
||||
MSVC_RUNTIME_LIBRARY
|
||||
"MultiThreaded$<$<CONFIG:Debug>:Debug>"
|
||||
OUTPUT_NAME
|
||||
x96dbg
|
||||
WIN32_EXECUTABLE
|
||||
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)
|
||||
if(NOT CMKR_VS_STARTUP_PROJECT)
|
||||
set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT launcher)
|
||||
endif()
|
||||
|
||||
set(CMKR_TARGET launcher)
|
||||
add_dependencies(exe launcher)
|
||||
|
||||
endif()
|
||||
|
|
|
@ -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": []
|
||||
}
|
||||
]
|
||||
}
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
<img width="100" src="https://github.com/x64dbg/x64dbg/raw/development/src/bug_black.png"/>
|
||||
|
||||
[](https://ci.appveyor.com/project/mrexodia/x64dbg) [](https://translate.x64dbg.com) [](https://sourceforge.net/projects/x64dbg/files/latest/download)
|
||||
[](https://translate.x64dbg.com) [](https://sourceforge.net/projects/x64dbg/files/latest/download) [](https://deepwiki.com/x64dbg/x64dbg)
|
||||
|
||||
[](https://invite.gg/x64dbg) [](https://telegram.me/x64dbg) [](https://gitter.im/x64dbg/x64dbg) [](https://riot.im/app/#/room/#x64dbg:matrix.org)
|
||||
[](https://discord.x64dbg.com) [](https://slack.x64dbg.com) [](https://gitter.im/x64dbg/x64dbg) [](https://riot.im/app/#/room/#x64dbg:matrix.org) [](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)!
|
||||
|
||||
|
|
83
build.bat
83
build.bat
|
@ -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=
|
86
clean.bat
86
clean.bat
|
@ -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 ..\..
|
67
cmake.toml
67
cmake.toml
|
@ -2,9 +2,16 @@
|
|||
version = "3.15"
|
||||
cmkr-include = "cmake/cmkr.cmake"
|
||||
|
||||
[options]
|
||||
X64DBG_BUILD_IN_TREE = true
|
||||
|
||||
[variables]
|
||||
CMAKE_MODULE_PATH = "${CMAKE_SOURCE_DIR}/cmake"
|
||||
|
||||
[project]
|
||||
name = "x64dbg"
|
||||
description = "An open-source x64/x32 debugger for windows."
|
||||
msvc-runtime = "dynamic"
|
||||
include-before = [
|
||||
"cmake/VSToolchain.cmake"
|
||||
]
|
||||
|
@ -17,7 +24,7 @@ x86 = "CMAKE_SIZEOF_VOID_P EQUAL 4"
|
|||
x64 = "CMAKE_SIZEOF_VOID_P EQUAL 8"
|
||||
|
||||
[find-package]
|
||||
Qt5 = { components = ["Widgets", "Network", "WinExtras"] }
|
||||
Qt5 = { components = ["Widgets", "WinExtras"] }
|
||||
|
||||
[target.zydis_wrapper]
|
||||
type = "static"
|
||||
|
@ -91,9 +98,9 @@ sources = [
|
|||
"src/dbg/XEDParse/*.h",
|
||||
]
|
||||
private-link-libraries = [
|
||||
"zydis_wrapper",
|
||||
"bridge",
|
||||
"btparser",
|
||||
"::zydis_wrapper",
|
||||
"::bridge",
|
||||
"::btparser",
|
||||
"Psapi",
|
||||
"Shlwapi",
|
||||
"Ws2_32",
|
||||
|
@ -127,6 +134,12 @@ private-include-directories = [
|
|||
"src/dbg/analysis",
|
||||
"src/dbg/commands",
|
||||
]
|
||||
msvc.link-options = [
|
||||
"/DELAYLOAD:TitanEngine.dll",
|
||||
]
|
||||
msvc.link-libraries = [
|
||||
"Delayimp",
|
||||
]
|
||||
|
||||
[target.dbg.properties]
|
||||
x86.OUTPUT_NAME = "x32dbg"
|
||||
|
@ -142,11 +155,11 @@ sources = [
|
|||
]
|
||||
private-link-libraries = [
|
||||
"Qt5::Widgets",
|
||||
"Qt5::Network",
|
||||
"Qt5::WinExtras",
|
||||
"zydis_wrapper",
|
||||
"bridge",
|
||||
"::zydis_wrapper",
|
||||
"::bridge",
|
||||
"winmm",
|
||||
"wininet",
|
||||
]
|
||||
x86.private-link-libraries = [
|
||||
"src/gui/Src/ThirdPartyLibs/ldconvert/ldconvert_x86.lib",
|
||||
|
@ -181,6 +194,7 @@ AUTOUIC = true
|
|||
|
||||
[target.loaddll]
|
||||
type = "executable"
|
||||
msvc-runtime = "static"
|
||||
sources = [
|
||||
"src/loaddll/loaddll.cpp",
|
||||
]
|
||||
|
@ -190,32 +204,44 @@ x86.link-libraries = [
|
|||
x64.link-libraries = [
|
||||
"src/dbg/ntdll/ntdll_x64.lib",
|
||||
]
|
||||
msvc.link-options = [
|
||||
"/DELAYLOAD:user32.dll",
|
||||
]
|
||||
msvc.link-libraries = [
|
||||
"Delayimp",
|
||||
]
|
||||
|
||||
[target.loaddll.properties]
|
||||
WIN32_EXECUTABLE = "ON"
|
||||
|
||||
[target.exe]
|
||||
type = "executable"
|
||||
msvc-runtime = "static"
|
||||
sources = [
|
||||
"src/exe/*.cpp",
|
||||
"src/exe/*.h",
|
||||
"src/exe/manifest.xml",
|
||||
"src/exe/resource.rc",
|
||||
"src/exe/strings.rc",
|
||||
"src/exe/strings_utf8.rc",
|
||||
]
|
||||
x86.sources = ["src/exe/icon32.rc"]
|
||||
x64.sources = ["src/exe/icon64.rc"]
|
||||
link-libraries = [
|
||||
"bridge",
|
||||
"::bridge",
|
||||
"Wintrust",
|
||||
]
|
||||
msvc.link-options = [
|
||||
"/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 = """
|
||||
# Make the executable the main target
|
||||
add_dependencies(exe dbg gui deps)
|
||||
add_dependencies(exe dbg gui loaddll deps)
|
||||
"""
|
||||
|
||||
[target.exe.properties]
|
||||
|
@ -225,20 +251,37 @@ x86.PDB_NAME = "x32dbg_exe"
|
|||
x64.PDB_NAME = "x64dbg_exe"
|
||||
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]
|
||||
type = "executable"
|
||||
condition = "x86"
|
||||
msvc-runtime = "static"
|
||||
sources = [
|
||||
"src/launcher/*.cpp",
|
||||
"src/exe/icon.rc",
|
||||
"src/exe/resource.rc",
|
||||
"src/exe/strings.rc",
|
||||
"src/exe/strings_utf8.rc",
|
||||
]
|
||||
link-libraries = [
|
||||
"Shlwapi",
|
||||
"Comctl32",
|
||||
]
|
||||
cmake-after = "add_dependencies(exe launcher)"
|
||||
|
||||
[target.launcher.properties]
|
||||
OUTPUT_NAME = "x96dbg"
|
||||
WIN32_EXECUTABLE = "ON"
|
||||
X64DBG_BUILD_IN_TREE.RUNTIME_OUTPUT_DIRECTORY = "${PROJECT_SOURCE_DIR}/bin"
|
||||
|
|
|
@ -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()
|
|
@ -7,10 +7,15 @@ if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
|||
add_compile_options(/MP)
|
||||
endif()
|
||||
|
||||
# TODO: support other toolchains
|
||||
if(MSVC)
|
||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG:FULL /INCREMENTAL:NO /OPT:REF /OPT:ICF" CACHE STRING "")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DEBUG:FULL /INCREMENTAL:NO /OPT:REF /OPT:ICF" CACHE STRING "")
|
||||
# Generate PDB files for release builds
|
||||
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()
|
||||
|
||||
# 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 AUTORCC_SOURCE_GROUP "Generated Files")
|
||||
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()
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
include_guard()
|
||||
|
||||
# Initialize submodule if necessary
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/init-submodules.cmake)
|
||||
|
||||
# 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_TAG "v0.2.44" CACHE STRING "cmkr git tag (this needs to be available forever)" FORCE)
|
||||
|
|
|
@ -11,13 +11,23 @@ if(CMAKE_SCRIPT_MODE_FILE)
|
|||
|
||||
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
|
||||
OUTPUT_VARIABLE DEPS_COPIED
|
||||
)
|
||||
|
||||
# Split the output into lines
|
||||
string(REGEX REPLACE "\n" ";" DEPS_COPIED "${DEPS_COPIED}")
|
||||
foreach(line ${DEPS_COPIED})
|
||||
message(STATUS "Copying ${line}")
|
||||
endforeach()
|
||||
|
||||
function(copy_dep relfile)
|
||||
if(EXISTS ${relfile})
|
||||
message(STATUS "Skipping ${relfile}")
|
||||
return()
|
||||
endif()
|
||||
set(DEPS_COPIED ${DEPS_COPIED} ${relfile} PARENT_SCOPE)
|
||||
message(STATUS "Copying ${relfile}")
|
||||
get_filename_component(reldir ${relfile} DIRECTORY)
|
||||
get_filename_component(relfile ${relfile} NAME)
|
||||
|
@ -26,15 +36,14 @@ if(CMAKE_SCRIPT_MODE_FILE)
|
|||
|
||||
file(GLOB DEPS RELATIVE ${DEPS_DIR} "${DEPS_DIR}/*.dll")
|
||||
foreach(DEP ${DEPS})
|
||||
if(NOT DEP MATCHES "^(Qt5|msvc)")
|
||||
copy_dep(${DEP})
|
||||
endif()
|
||||
copy_dep(${DEP})
|
||||
endforeach()
|
||||
|
||||
copy_dep(GleeBug/TitanEngine.dll)
|
||||
copy_dep(StaticEngine/TitanEngine.dll)
|
||||
|
||||
file(TOUCH "${GUI_DIR}/.deps_copied")
|
||||
list(JOIN DEPS_COPIED "\n" DEPS_COPIED)
|
||||
file(WRITE "${GUI_DIR}/.deps_copied" "${DEPS_COPIED}")
|
||||
|
||||
return()
|
||||
endif()
|
||||
|
@ -75,3 +84,8 @@ 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
|
||||
)
|
||||
|
|
|
@ -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)
|
|
@ -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}")
|
|
@ -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)
|
|
@ -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
2
deps
|
@ -1 +1 @@
|
|||
Subproject commit fdef4703ba4045204d36f6f5c1734749a8b7204a
|
||||
Subproject commit 5b16b5f74c0f7abd4bcef9a58f449b8d55c526c3
|
|
@ -0,0 +1,7 @@
|
|||
|
||||
; Top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
; Windows-style newlines
|
||||
[*]
|
||||
end_of_line = CRLF
|
|
@ -0,0 +1,3 @@
|
|||
_build*/
|
||||
*.chm
|
||||
python-2.7.18.amd64.portable/
|
|
@ -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
|
|
@ -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,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`.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
Loading…
Reference in New Issue