Compare commits
306 Commits
2025.03.15
...
developmen
Author | SHA1 | Date |
---|---|---|
|
85e0ff8579 | |
|
d6294a8370 | |
|
099a17a16a | |
|
dc3e8299d4 | |
|
7e31351107 | |
|
4803303d28 | |
|
3dc0f662fb | |
|
49c145e603 | |
|
05632f429a | |
|
5c84c5230d | |
|
28178084c6 | |
|
b9f4f834fa | |
|
f99c7c294b | |
|
dc3a12bb50 | |
|
dced055689 | |
|
531088c8eb | |
|
1b9b7664ec | |
|
54ddde3de0 | |
|
0b00197a4a | |
|
a1352559f0 | |
|
06cc3703ad | |
|
b711f19694 | |
|
c11e93f283 | |
|
cc983665bd | |
|
c4e61a5030 | |
|
22bae7bfe3 | |
|
d70428c1cf | |
|
64bc74a434 | |
|
88b268de05 | |
|
a04b3cafa2 | |
|
42d6a0fe68 | |
|
7ed54825a8 | |
|
9af3f860a6 | |
|
2c226c9147 | |
|
4f996a7276 | |
|
2dbe6c1600 | |
|
b79a172f3e | |
|
5a7cbc4a7b | |
|
0d2259a311 | |
|
6b2c8d1d26 | |
|
b5f6df737d | |
|
a4c45cf48d | |
|
608a10535c | |
|
f8cefad5c1 | |
|
56a151c06d | |
|
d9e0a2e3df | |
|
b79b1fd0e9 | |
|
566f0d07d5 | |
|
735d7d7450 | |
|
1ab2af295c | |
|
f28e7a3362 | |
|
35ca7ec4e8 | |
|
1503c00bfc | |
|
24644ed642 | |
|
351890978b | |
|
31f1fb6877 | |
|
a2af08bd33 | |
|
c3d608759b | |
|
7038b31e22 | |
|
a3fb148644 | |
|
5d4486e9b0 | |
|
950e4a7f07 | |
|
52ec21f647 | |
|
f4f93fbfb8 | |
|
6cacef3336 | |
|
9e6fc87773 | |
|
c84549a8ad | |
|
49ef645cb1 | |
|
cca598427f | |
|
c7d5592623 | |
|
4f0b68c69f | |
|
19bca832b3 | |
|
ee8d5ff93c | |
|
01daf5c5b8 | |
|
7f866fde29 | |
|
f73d41feba | |
|
a1abde511e | |
|
ecfc40fa58 | |
|
dc3b0a6540 | |
|
79539ee416 | |
|
badf2becf4 | |
|
e225968c4f | |
|
bb300b6d30 | |
|
dc96bc102b | |
|
232049df62 | |
|
c0d887dba5 | |
|
926a2187e8 | |
|
fc97d55786 | |
|
754b4666b5 | |
|
84668ac18d | |
|
3a5f352fa9 | |
|
9ce254418c | |
|
3522af5d80 | |
|
89033cb6ec | |
|
4c0c3cd3dc | |
|
ff890cfd84 | |
|
a185f6d548 | |
|
6cf7f60fff | |
|
e9e3596e1d | |
|
4fe2c45349 | |
|
bbec21fde3 | |
|
145c6a484a | |
|
575d823d76 | |
|
8e070b7677 | |
|
bffce5143e | |
|
59b458852a | |
|
e91ad3971f | |
|
2368bfe8de | |
|
a1ad4c00bb | |
|
731ccba006 | |
|
ab32791e06 | |
|
4f406b274e | |
|
68e80e6b3c | |
|
cd850f6c2c | |
|
e434db152f | |
|
64108f0b10 | |
|
078ea3fcc1 | |
|
6c94327505 | |
|
b7407e075d | |
|
eda7c3296b | |
|
074edbeb81 | |
|
9a93383cb9 | |
|
7ebb9c7c66 | |
|
840d9d2e93 | |
|
a5c3f8ab48 | |
|
71e669822a | |
|
73a15c3112 | |
|
d868da4c53 | |
|
4aa51f20e9 | |
|
bd315bb656 | |
|
fe16e2f1ac | |
|
1097920f8d | |
|
8f97124495 | |
|
529f36dd14 | |
|
ad8cc1f4e8 | |
|
56195a3a66 | |
|
195e6ab3f3 | |
|
0eed5b590e | |
|
51924190ff | |
|
6a5dfa7bbe | |
|
a08ffbe39f | |
|
6cace9a982 | |
|
e3f67f9888 | |
|
7c83a4c9b3 | |
|
dbadb32bea | |
|
73613d17fe | |
|
156b0ebe6a | |
|
3cf0821495 | |
|
dc5c48446e | |
|
98291b35b7 | |
|
c589e7db3b | |
|
ad5e2d2ee2 | |
|
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 | |
|
1976cdb01a | |
|
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 |
|
@ -0,0 +1,148 @@
|
|||
---
|
||||
Checks: '
|
||||
-*,
|
||||
bugprone-argument-comment,
|
||||
bugprone-assert-side-effect,
|
||||
bugprone-bad-signal-to-kill-thread,
|
||||
bugprone-branch-clone,
|
||||
bugprone-copy-constructor-init,
|
||||
bugprone-dangling-handle,
|
||||
bugprone-dynamic-static-initializers,
|
||||
bugprone-fold-init-type,
|
||||
bugprone-forward-declaration-namespace,
|
||||
bugprone-forwarding-reference-overload,
|
||||
bugprone-inaccurate-erase,
|
||||
bugprone-incorrect-roundings,
|
||||
bugprone-integer-division,
|
||||
bugprone-lambda-function-name,
|
||||
bugprone-macro-parentheses,
|
||||
bugprone-macro-repeated-side-effects,
|
||||
bugprone-misplaced-operator-in-strlen-in-alloc,
|
||||
bugprone-misplaced-pointer-arithmetic-in-alloc,
|
||||
bugprone-misplaced-widening-cast,
|
||||
bugprone-move-forwarding-reference,
|
||||
bugprone-multiple-statement-macro,
|
||||
bugprone-no-escape,
|
||||
bugprone-parent-virtual-call,
|
||||
bugprone-posix-return,
|
||||
bugprone-reserved-identifier,
|
||||
bugprone-sizeof-container,
|
||||
bugprone-sizeof-expression,
|
||||
bugprone-spuriously-wake-up-functions,
|
||||
bugprone-string-constructor,
|
||||
bugprone-string-integer-assignment,
|
||||
bugprone-string-literal-with-embedded-nul,
|
||||
bugprone-suspicious-enum-usage,
|
||||
bugprone-suspicious-include,
|
||||
bugprone-suspicious-memset-usage,
|
||||
bugprone-suspicious-missing-comma,
|
||||
bugprone-suspicious-semicolon,
|
||||
bugprone-suspicious-string-compare,
|
||||
bugprone-suspicious-memory-comparison,
|
||||
bugprone-suspicious-realloc-usage,
|
||||
bugprone-swapped-arguments,
|
||||
bugprone-terminating-continue,
|
||||
bugprone-throw-keyword-missing,
|
||||
bugprone-too-small-loop-variable,
|
||||
bugprone-undefined-memory-manipulation,
|
||||
bugprone-undelegated-constructor,
|
||||
bugprone-unhandled-self-assignment,
|
||||
bugprone-unused-raii,
|
||||
bugprone-unused-return-value,
|
||||
bugprone-use-after-move,
|
||||
bugprone-virtual-near-miss,
|
||||
cert-dcl21-cpp,
|
||||
cert-dcl58-cpp,
|
||||
cert-err34-c,
|
||||
cert-err52-cpp,
|
||||
cert-err60-cpp,
|
||||
cert-flp30-c,
|
||||
cert-msc50-cpp,
|
||||
cert-msc51-cpp,
|
||||
cert-str34-c,
|
||||
cppcoreguidelines-interfaces-global-init,
|
||||
cppcoreguidelines-narrowing-conversions,
|
||||
cppcoreguidelines-pro-type-member-init,
|
||||
cppcoreguidelines-pro-type-static-cast-downcast,
|
||||
cppcoreguidelines-slicing,
|
||||
google-default-arguments,
|
||||
google-explicit-constructor,
|
||||
google-runtime-operator,
|
||||
hicpp-exception-baseclass,
|
||||
hicpp-multiway-paths-covered,
|
||||
misc-misplaced-const,
|
||||
misc-new-delete-overloads,
|
||||
misc-no-recursion,
|
||||
misc-non-copyable-objects,
|
||||
misc-throw-by-value-catch-by-reference,
|
||||
misc-unconventional-assign-operator,
|
||||
misc-uniqueptr-reset-release,
|
||||
modernize-avoid-bind,
|
||||
modernize-concat-nested-namespaces,
|
||||
modernize-deprecated-headers,
|
||||
modernize-deprecated-ios-base-aliases,
|
||||
modernize-loop-convert,
|
||||
modernize-make-shared,
|
||||
modernize-make-unique,
|
||||
modernize-pass-by-value,
|
||||
modernize-raw-string-literal,
|
||||
modernize-redundant-void-arg,
|
||||
modernize-replace-auto-ptr,
|
||||
modernize-replace-disallow-copy-and-assign-macro,
|
||||
modernize-replace-random-shuffle,
|
||||
modernize-return-braced-init-list,
|
||||
modernize-shrink-to-fit,
|
||||
modernize-unary-static-assert,
|
||||
modernize-use-auto,
|
||||
modernize-use-bool-literals,
|
||||
modernize-use-emplace,
|
||||
modernize-use-equals-default,
|
||||
modernize-use-equals-delete,
|
||||
modernize-use-nodiscard,
|
||||
modernize-use-noexcept,
|
||||
modernize-use-nullptr,
|
||||
modernize-use-override,
|
||||
modernize-use-transparent-functors,
|
||||
modernize-use-uncaught-exceptions,
|
||||
mpi-buffer-deref,
|
||||
mpi-type-mismatch,
|
||||
openmp-use-default-none,
|
||||
performance-faster-string-find,
|
||||
performance-for-range-copy,
|
||||
performance-implicit-conversion-in-loop,
|
||||
performance-inefficient-algorithm,
|
||||
performance-inefficient-string-concatenation,
|
||||
performance-inefficient-vector-operation,
|
||||
performance-move-const-arg,
|
||||
performance-move-constructor-init,
|
||||
performance-no-automatic-move,
|
||||
performance-noexcept-move-constructor,
|
||||
performance-trivially-destructible,
|
||||
performance-type-promotion-in-math-fn,
|
||||
performance-unnecessary-copy-initialization,
|
||||
performance-unnecessary-value-param,
|
||||
portability-simd-intrinsics,
|
||||
readability-avoid-const-params-in-decls,
|
||||
readability-const-return-type,
|
||||
readability-container-size-empty,
|
||||
readability-convert-member-functions-to-static,
|
||||
readability-delete-null-pointer,
|
||||
readability-deleted-default,
|
||||
readability-inconsistent-declaration-parameter-name,
|
||||
readability-make-member-function-const,
|
||||
readability-misleading-indentation,
|
||||
readability-misplaced-array-index,
|
||||
readability-non-const-parameter,
|
||||
readability-redundant-control-flow,
|
||||
readability-redundant-declaration,
|
||||
readability-redundant-function-ptr-dereference,
|
||||
readability-redundant-smartptr-get,
|
||||
readability-redundant-string-cstr,
|
||||
readability-redundant-string-init,
|
||||
readability-simplify-subscript-expr,
|
||||
readability-static-accessed-through-instance,
|
||||
readability-static-definition-in-anonymous-namespace,
|
||||
readability-string-compare,
|
||||
readability-uniqueptr-delete-release,
|
||||
readability-use-anyofallof
|
||||
'
|
|
@ -7,19 +7,18 @@ Welcome to x64dbg! This document is relevant for you if you want to contribute t
|
|||
This is a list of things you can do to help us out (in no particular order). Each item will be expanded upon later in the document.
|
||||
|
||||
- [Compile x64dbg](https://github.com/x64dbg/x64dbg/wiki/Compiling-the-whole-project) and add new features ([good first issues](https://easy.x64dbg.com) are a good place to start).
|
||||
- [Report bugs](https://report.x64dbg.com) at the issue tracker.
|
||||
- Add feature requests to the [issue tracker](https://issues.x64dbg.com).
|
||||
- Add report bugs of feature requests to the [issue tracker](https://issues.x64dbg.com).
|
||||
- [Write a blogpost](https://x64dbg.com/blog/2016/07/09/Looking-for-writers.html) for the [official blog](https://blog.x64dbg.com).
|
||||
- [Contact us](https://x64dbg.com/#contact) and talk about x64dbg.
|
||||
- [Contact us](https://x64dbg.com/#contact) and chat about x64dbg.
|
||||
- Send a [donation](https://donate.x64dbg.com) to support the project.
|
||||
- [Translate](https://translate.x64dbg.com) x64dbg (contact us if your language isn't listed).
|
||||
- Help us improve the [documentation](https://github.com/x64dbg/docs/issues).
|
||||
- [Translate](https://translate.x64dbg.com) x64dbg (reach out if your language is not listed).
|
||||
- Help us improve the [documentation](https://help.x64dbg.com).
|
||||
|
||||
### Compile x64dbg
|
||||
|
||||
There is a guide to [compiling the whole project](https://github.com/x64dbg/x64dbg/wiki/Compiling-the-whole-project) available. This might seem difficult at first, but if you install the correct versions of the *Prerequisites* it will be a breeze.
|
||||
There is a guide to [compiling the whole project](https://github.com/x64dbg/x64dbg/wiki/Compiling-the-whole-project) available. We recently spent a lot of effort on making this as seamless as possible, but if you have any difficulties, reach out on Discord (`#development` channel)!
|
||||
|
||||
Compiling x64dbg is very useful to us (even if you don't add any code). Your experience can improve this guide and help new contributors.
|
||||
[](https://discord.x64dbg.com)
|
||||
|
||||
#### Getting started with development
|
||||
|
||||
|
@ -30,22 +29,38 @@ As with any open source project, documentation is lacking and the code can seem
|
|||
- [User interface design principles](https://x64dbg.com/blog/2016/08/08/user-interface-design-principles.html) blog post. It explains some of the design philosophy.
|
||||
- [Control flow graph](https://x64dbg.com/blog/2016/07/27/Control-flow-graph.html) blog post. The post links to the relevant code sections.
|
||||
- Blog post about the [plugin SDK](https://x64dbg.com/blog/2016/07/30/x64dbg-plugin-sdk.html). Writing an x64dbg plugin can also help you understand the code structure.
|
||||
- Check out the [DeepWiki page](https://deepwiki.com/x64dbg/x64dbg) and ask Devin where to start.
|
||||
|
||||
This is by no means an exhaustive list and we are still working on lowering the barrier for new contributors. The feedback of new contributors is vital to reaching this goal.
|
||||
|
||||
#### Sending a pull request
|
||||
|
||||
Here is a little guide on how to do a clean pull request for people who don't yet know how to use git. We recommend using [Git Extensions](https://gitextensions.github.io), but any git interface is fine.
|
||||
Here is a little guide on how to do a clean pull request for people who don't yet know how to use git:
|
||||
|
||||
1. First we need to [fork](https://help.github.com/articles/fork-a-repo/) the actual x64dbg repo on our github account.
|
||||
2. When the fork is finished, clone the repo (`git clone https://github.com/myname/x64dbg.git`).
|
||||
3. When pushing new features/bug/whatever to a github project the best practice is to create branches. The command `git checkout -b my-branch-name` will automatically create a branch and check it out.
|
||||
4. Make all the changes you want and when finishing it, use `git add myfiles` to add it to the repo.
|
||||
5. Commit your change. `git commit -m 'a message about what you changed'`. The change are applied to your local git repo.
|
||||
6. Push it to your `origin`. The `origin` is your repo which is hosted on github. `git push --set-upstream origin your-branch-name`.
|
||||
7. Sync with the `upstream` repo, the real x64dbg repo. `git remote add upstream https://github.com/x64dbg/x64dbg.git`, using `git remote -v` will show which origin/upstream are setup in the local repo.
|
||||
8. Sync your fork with the `upstream`, `git fetch upstream`. Now checkout your local `development` branch again `git checkout development` and merge the upstream `git merge upstream/development`.
|
||||
9. Time to create the pull request! Using the github ui, go to your account/repo, select the branch you already pushed, and click `Pull request`. Review your pull request and send it.
|
||||
1. First we need to [fork](https://github.com/x64dbg/x64dbg/fork) the upstream x64dbg repo on our GitHub account.
|
||||
2. When the fork is finished, clone the repo:
|
||||
```sh
|
||||
git clone --recursive https://github.com/<yourusername>/x64dbg.git
|
||||
```
|
||||
3. Create a [feature branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches) to isolate your changes:
|
||||
```sh
|
||||
git checkout -B my-feature
|
||||
```
|
||||
4. Make all the changes you want and when finished, add the files to the [staging area](https://git-scm.com/about/staging-area):
|
||||
```sh
|
||||
git add .
|
||||
```
|
||||
5. Create a [commit](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/about-commits) in your local git repository from the changes in your staging area:
|
||||
```sh
|
||||
git commit -m "Added a cool feature"
|
||||
```
|
||||
6. Push the changes to your fork:
|
||||
```sh
|
||||
git push --set-upstream origin my-feature
|
||||
```
|
||||
7. Time to create the pull request! Navigate to your forked repository in the browser and click the green `Pull request` button.
|
||||
|
||||
For a more in-depth tutorial, you can look at GitHub's official [contributing to a project](https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project) guide.
|
||||
|
||||
Happy PRs!
|
||||
|
||||
|
@ -67,11 +82,15 @@ We understand that it can be disappointing to not get your feature implemented,
|
|||
|
||||
### Write a blogpost
|
||||
|
||||
The x64dbg blog is open to all contributors (foreign and domestic). We encourage anyone who has an interesting encounter with the x64dbg code base, or a use case to share it with the community. For a guideline on how/what to contribute see the [blog post](https://x64dbg.com/blog/2016/07/09/Looking-for-writers.html) about contributing to the blog. Don't worry about contributing complex posts, we welcome ALL experience levels to add content to the blog!
|
||||
The x64dbg blog is open to all contributors (foreign and domestic). We encourage anyone who has an interesting encounter with the x64dbg code base, or a use case to share it with the community. For a guideline on how/what to contribute see the [blog post](https://x64dbg.com/blog/2016/07/09/Looking-for-writers.html) about contributing to the blog. Don't worry about contributing complex posts, we welcome ALL experience levels to add content to the blog!
|
||||
|
||||
### Contact us
|
||||
|
||||
There are several ways to reach out to the community of x64dbg developers, contributors and users. Chat channels consist of a [Telegram](https://telegram.me/x64dbg), [Gitter](https://gitter.x64dbg.com/) and [IRC](https://webchat.freenode.net/?channels=x64dbg) channel. Most questions regarding contributing, developing and using x64dbg can be answered here. To ensure channel cohesion a bot will sync messages across all three channels. (when it is not down ;))
|
||||
There are several ways to reach out to the community of x64dbg developers, contributors and users:
|
||||
|
||||
[](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)
|
||||
|
||||
Discord is the main communication channel, but the other platforms are synchronized with the `#general` channel.
|
||||
|
||||
### Translate
|
||||
|
||||
|
|
Binary file not shown.
|
@ -15,7 +15,7 @@
|
|||
<value>style=allman, convert-tabs, align-pointer=type, align-reference=middle, indent=spaces, indent-namespaces, indent-col1-comments, pad-oper, unpad-paren, keep-one-line-blocks, close-templates</value>
|
||||
</setting>
|
||||
<setting name="Ignore" serializeAs="String">
|
||||
<value />
|
||||
<value>src/cross/vendor;src/gui/Src/ThirdPartyLibs/md4c</value>
|
||||
</setting>
|
||||
<setting name="License" serializeAs="String">
|
||||
<value />
|
||||
|
|
|
@ -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,134 @@
|
|||
name: Build
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
# Automatically cancel previous runs of this workflow on the same branch
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
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 -DCMAKE_UNITY_BUILD=ON -DCMAKE_UNITY_BUILD_BATCH_SIZE=6 -DX64DBG_RELEASE=${{ startsWith(github.ref, 'refs/tags/') && 'ON' || 'OFF' }}
|
||||
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
|
||||
|
||||
docs:
|
||||
# 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
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Build Documentation
|
||||
run: |
|
||||
docs\makechm.bat
|
||||
|
||||
- name: Upload Documentation
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: docs
|
||||
path: docs/x64dbg.chm
|
||||
if-no-files-found: error
|
||||
include-hidden-files: true
|
||||
retention-days: 1
|
||||
|
||||
package:
|
||||
needs: [cmake, docs]
|
||||
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: Download Documentation
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: docs
|
||||
path: docs
|
||||
|
||||
- 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 Snapshot
|
||||
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 Symbols
|
||||
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
|
||||
|
||||
- name: Upload Plugin SDK
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: x64dbg-pluginsdk
|
||||
path: |
|
||||
release/pluginsdk
|
||||
if-no-files-found: error
|
||||
include-hidden-files: true
|
||||
compression-level: 9
|
|
@ -0,0 +1,39 @@
|
|||
name: Cross
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
# Automatically cancel previous runs of this workflow on the same branch
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
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 }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform: [windows-latest, ubuntu-latest]
|
||||
runs-on: ${{ matrix.platform }}
|
||||
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
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@d325aaf2a8baeeda41ad0b5d39f84a6af9bcf005 # v4.3.0
|
||||
with:
|
||||
cache: true
|
||||
modules: qtwebsockets
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cd src/cross
|
||||
cmake -B build -G Ninja -DCMAKE_UNITY_BUILD=ON
|
||||
cmake --build build
|
|
@ -4,6 +4,9 @@
|
|||
/bin/*.dll
|
||||
/bin/*.ini
|
||||
/bin/*.chm
|
||||
/bin/*.zip
|
||||
/bin/release-notes.md
|
||||
!/bin/themes/
|
||||
/src/**/x64/
|
||||
/src/**/Win32/
|
||||
/src/gui_build/
|
||||
|
@ -25,7 +28,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
|
||||
[submodule "deps"]
|
||||
path = deps
|
||||
url = ../deps
|
||||
[submodule "src/dbg/btparser"]
|
||||
path = src/dbg/btparser
|
||||
url = ../../x64dbg/btparser
|
||||
[submodule "deps"]
|
||||
path = 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,19 @@ 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)
|
||||
option(X64DBG_RELEASE "" OFF)
|
||||
|
||||
# Variables
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||||
|
||||
include("cmake/VSToolchain.cmake")
|
||||
|
||||
project(x64dbg
|
||||
|
@ -37,36 +51,28 @@ include("cmake/VSFlags.cmake")
|
|||
find_package(Qt5 REQUIRED
|
||||
COMPONENTS
|
||||
Widgets
|
||||
Network
|
||||
WinExtras
|
||||
)
|
||||
|
||||
# Target: zydis_wrapper
|
||||
set(zydis_wrapper_SOURCES
|
||||
cmake.toml
|
||||
"src/zydis_wrapper/Zydis/Zydis.h"
|
||||
"src/zydis_wrapper/zydis/Zydis.c"
|
||||
"src/zydis_wrapper/zydis_wrapper.cpp"
|
||||
"src/zydis_wrapper/zydis_wrapper.h"
|
||||
)
|
||||
# Subdirectory: src/zydis_wrapper
|
||||
set(CMKR_CMAKE_FOLDER ${CMAKE_FOLDER})
|
||||
if(CMAKE_FOLDER)
|
||||
set(CMAKE_FOLDER "${CMAKE_FOLDER}/src/zydis_wrapper")
|
||||
else()
|
||||
set(CMAKE_FOLDER "src/zydis_wrapper")
|
||||
endif()
|
||||
add_subdirectory("src/zydis_wrapper")
|
||||
set(CMAKE_FOLDER ${CMKR_CMAKE_FOLDER})
|
||||
|
||||
add_library(zydis_wrapper STATIC)
|
||||
|
||||
target_sources(zydis_wrapper PRIVATE ${zydis_wrapper_SOURCES})
|
||||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${zydis_wrapper_SOURCES})
|
||||
|
||||
target_compile_definitions(zydis_wrapper PUBLIC
|
||||
ZYCORE_STATIC_BUILD
|
||||
ZYDIS_STATIC_BUILD
|
||||
)
|
||||
|
||||
target_include_directories(zydis_wrapper PUBLIC
|
||||
"src/zydis_wrapper"
|
||||
)
|
||||
|
||||
target_include_directories(zydis_wrapper PRIVATE
|
||||
"src/zydis_wrapper/Zydis"
|
||||
)
|
||||
# Subdirectory: src/gui/Src/ThirdPartyLibs/md4c
|
||||
set(CMKR_CMAKE_FOLDER ${CMAKE_FOLDER})
|
||||
if(CMAKE_FOLDER)
|
||||
set(CMAKE_FOLDER "${CMAKE_FOLDER}/src/gui/Src/ThirdPartyLibs/md4c")
|
||||
else()
|
||||
set(CMAKE_FOLDER "src/gui/Src/ThirdPartyLibs/md4c")
|
||||
endif()
|
||||
add_subdirectory("src/gui/Src/ThirdPartyLibs/md4c")
|
||||
set(CMAKE_FOLDER ${CMKR_CMAKE_FOLDER})
|
||||
|
||||
# Target: bridge
|
||||
set(bridge_SOURCES
|
||||
|
@ -209,6 +215,7 @@ set(dbg_SOURCES
|
|||
"src/dbg/analysis/xrefsanalysis.h"
|
||||
"src/dbg/animate.cpp"
|
||||
"src/dbg/animate.h"
|
||||
"src/dbg/args.h"
|
||||
"src/dbg/argument.cpp"
|
||||
"src/dbg/argument.h"
|
||||
"src/dbg/assemble.cpp"
|
||||
|
@ -311,6 +318,7 @@ set(dbg_SOURCES
|
|||
"src/dbg/jansson/jansson_x64dbg.h"
|
||||
"src/dbg/jit.cpp"
|
||||
"src/dbg/jit.h"
|
||||
"src/dbg/jobqueue.h"
|
||||
"src/dbg/label.cpp"
|
||||
"src/dbg/label.h"
|
||||
"src/dbg/loop.cpp"
|
||||
|
@ -372,6 +380,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"
|
||||
|
@ -391,6 +401,7 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${dbg_SOURCES})
|
|||
|
||||
target_compile_definitions(dbg PRIVATE
|
||||
BUILD_DBG
|
||||
NOMINMAX
|
||||
)
|
||||
|
||||
target_include_directories(dbg PRIVATE
|
||||
|
@ -399,6 +410,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
|
||||
|
@ -407,6 +436,7 @@ target_link_libraries(dbg PRIVATE
|
|||
Shlwapi
|
||||
Ws2_32
|
||||
Wininet
|
||||
Iphlpapi
|
||||
)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
||||
|
@ -435,6 +465,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 +596,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"
|
||||
|
@ -584,6 +623,8 @@ set(gui_SOURCES
|
|||
"src/gui/Src/Gui/HexLineEdit.cpp"
|
||||
"src/gui/Src/Gui/HexLineEdit.h"
|
||||
"src/gui/Src/Gui/HexLineEdit.ui"
|
||||
"src/gui/Src/Gui/ImageTextBrowser.cpp"
|
||||
"src/gui/Src/Gui/ImageTextBrowser.h"
|
||||
"src/gui/Src/Gui/LineEditDialog.cpp"
|
||||
"src/gui/Src/Gui/LineEditDialog.h"
|
||||
"src/gui/Src/Gui/LineEditDialog.ui"
|
||||
|
@ -620,6 +661,9 @@ set(gui_SOURCES
|
|||
"src/gui/Src/Gui/ReferenceManager.h"
|
||||
"src/gui/Src/Gui/RegistersView.cpp"
|
||||
"src/gui/Src/Gui/RegistersView.h"
|
||||
"src/gui/Src/Gui/ReleaseNotesDialog.cpp"
|
||||
"src/gui/Src/Gui/ReleaseNotesDialog.h"
|
||||
"src/gui/Src/Gui/ReleaseNotesDialog.ui"
|
||||
"src/gui/Src/Gui/RichTextItemDelegate.cpp"
|
||||
"src/gui/Src/Gui/RichTextItemDelegate.h"
|
||||
"src/gui/Src/Gui/SEHChainView.cpp"
|
||||
|
@ -644,7 +688,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 +702,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"
|
||||
|
@ -685,6 +730,9 @@ set(gui_SOURCES
|
|||
"src/gui/Src/QHexEdit/XByteArray.cpp"
|
||||
"src/gui/Src/QHexEdit/XByteArray.h"
|
||||
"src/gui/Src/ThirdPartyLibs/ldconvert/ldconvert.h"
|
||||
"src/gui/Src/ThirdPartyLibs/md4c/md4c-entity.h"
|
||||
"src/gui/Src/ThirdPartyLibs/md4c/md4c-html.h"
|
||||
"src/gui/Src/ThirdPartyLibs/md4c/md4c.h"
|
||||
"src/gui/Src/Tracer/TraceBrowser.cpp"
|
||||
"src/gui/Src/Tracer/TraceBrowser.h"
|
||||
"src/gui/Src/Tracer/TraceDump.cpp"
|
||||
|
@ -760,9 +808,16 @@ add_library(gui SHARED)
|
|||
target_sources(gui PRIVATE ${gui_SOURCES})
|
||||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${gui_SOURCES})
|
||||
|
||||
if(X64DBG_RELEASE) # X64DBG_RELEASE
|
||||
target_compile_definitions(gui PUBLIC
|
||||
X64DBG_RELEASE
|
||||
)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(gui PRIVATE
|
||||
BUILD_LIB
|
||||
NOMINMAX
|
||||
X64DBG
|
||||
)
|
||||
|
||||
target_include_directories(gui PRIVATE
|
||||
|
@ -778,13 +833,26 @@ 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()
|
||||
|
||||
if(NOT TARGET md4c-html)
|
||||
message(FATAL_ERROR "Target \"md4c-html\" referenced by \"gui\" does not exist!")
|
||||
endif()
|
||||
|
||||
target_link_libraries(gui PRIVATE
|
||||
Qt5::Widgets
|
||||
Qt5::Network
|
||||
Qt5::WinExtras
|
||||
zydis_wrapper
|
||||
bridge
|
||||
md4c-html
|
||||
winmm
|
||||
wininet
|
||||
)
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4) # x86
|
||||
|
@ -848,7 +916,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 +953,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 +974,39 @@ 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>"
|
||||
"/NOIMPLIB"
|
||||
"/NOEXP"
|
||||
)
|
||||
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 +1025,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 +1032,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 +1077,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 +1092,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)!
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
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 ..\..
|
97
cmake.toml
97
cmake.toml
|
@ -2,9 +2,17 @@
|
|||
version = "3.15"
|
||||
cmkr-include = "cmake/cmkr.cmake"
|
||||
|
||||
[options]
|
||||
X64DBG_BUILD_IN_TREE = true
|
||||
X64DBG_RELEASE = false
|
||||
|
||||
[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,26 +25,10 @@ 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"
|
||||
sources = [
|
||||
"src/zydis_wrapper/*.cpp",
|
||||
"src/zydis_wrapper/*.h",
|
||||
"src/zydis_wrapper/Zydis/Zydis.h",
|
||||
"src/zydis_wrapper/zydis/Zydis.c",
|
||||
]
|
||||
include-directories = [
|
||||
"src/zydis_wrapper",
|
||||
]
|
||||
private-include-directories = [
|
||||
"src/zydis_wrapper/Zydis",
|
||||
]
|
||||
compile-definitions = [
|
||||
"ZYCORE_STATIC_BUILD",
|
||||
"ZYDIS_STATIC_BUILD",
|
||||
]
|
||||
[subdir."src/zydis_wrapper"]
|
||||
[subdir."src/gui/Src/ThirdPartyLibs/md4c"]
|
||||
|
||||
[target.bridge]
|
||||
type = "shared"
|
||||
|
@ -91,13 +83,14 @@ sources = [
|
|||
"src/dbg/XEDParse/*.h",
|
||||
]
|
||||
private-link-libraries = [
|
||||
"zydis_wrapper",
|
||||
"bridge",
|
||||
"btparser",
|
||||
"::zydis_wrapper",
|
||||
"::bridge",
|
||||
"::btparser",
|
||||
"Psapi",
|
||||
"Shlwapi",
|
||||
"Ws2_32",
|
||||
"Wininet",
|
||||
"Iphlpapi",
|
||||
]
|
||||
x86.private-link-libraries = [
|
||||
"src/dbg/dbghelp/dbghelp_x86.lib",
|
||||
|
@ -121,12 +114,19 @@ x64.private-link-libraries = [
|
|||
]
|
||||
private-compile-definitions = [
|
||||
"BUILD_DBG",
|
||||
"NOMINMAX",
|
||||
]
|
||||
private-include-directories = [
|
||||
"src/dbg",
|
||||
"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 +142,12 @@ sources = [
|
|||
]
|
||||
private-link-libraries = [
|
||||
"Qt5::Widgets",
|
||||
"Qt5::Network",
|
||||
"Qt5::WinExtras",
|
||||
"zydis_wrapper",
|
||||
"bridge",
|
||||
"::zydis_wrapper",
|
||||
"::bridge",
|
||||
"::md4c-html",
|
||||
"winmm",
|
||||
"wininet",
|
||||
]
|
||||
x86.private-link-libraries = [
|
||||
"src/gui/Src/ThirdPartyLibs/ldconvert/ldconvert_x86.lib",
|
||||
|
@ -169,7 +170,9 @@ private-include-directories = [
|
|||
private-compile-definitions = [
|
||||
"BUILD_LIB",
|
||||
"NOMINMAX",
|
||||
"X64DBG",
|
||||
]
|
||||
X64DBG_RELEASE.compile-definitions = ["X64DBG_RELEASE"]
|
||||
include-after = ["cmake/deps.cmake"]
|
||||
|
||||
[target.gui.properties]
|
||||
|
@ -181,6 +184,7 @@ AUTOUIC = true
|
|||
|
||||
[target.loaddll]
|
||||
type = "executable"
|
||||
msvc-runtime = "static"
|
||||
sources = [
|
||||
"src/loaddll/loaddll.cpp",
|
||||
]
|
||||
|
@ -190,32 +194,46 @@ 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>",
|
||||
"/NOIMPLIB",
|
||||
"/NOEXP",
|
||||
]
|
||||
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 +243,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"
|
||||
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()
|
|
@ -1,3 +1,48 @@
|
|||
option(ENABLE_SANITIZERS "Enable sanitizers" OFF)
|
||||
if(ENABLE_SANITIZERS)
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT MATCHES "^MSVC$")
|
||||
# NOTE: There is bug in Clang-CL that makes address sanitizers not work for all projects.
|
||||
# The main issue is the 'world' project, which has WINDOWS_EXPORT_ALL_SYMBOLS.
|
||||
# This issue will likely be fixed in a later version of Clang-CL, but for now you should
|
||||
# configure with -DCMAKE_C_COMPILER=clang.exe -DCMAKE_CXX_COMPILER=clang++.exe to enable
|
||||
# UB sanitizers.
|
||||
message(WARNING "Enabling Clang-CL sanitizers (Clang works better)...")
|
||||
add_compile_options(-fsanitize=address,undefined)
|
||||
|
||||
# Reference: https://devblogs.microsoft.com/cppblog/addresssanitizer-asan-for-windows-with-msvc/
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(ASAN_LIB_SUFFIX "x86_64")
|
||||
else()
|
||||
set(ASAN_LIB_SUFFIX "i386")
|
||||
endif()
|
||||
set(ASAN_LINKER_FLAGS "/wholearchive:clang_rt.asan-${ASAN_LIB_SUFFIX}.lib /wholearchive:clang_rt.asan_cxx-${ASAN_LIB_SUFFIX}.lib")
|
||||
else()
|
||||
message(STATUS "Enabling Clang sanitizers...")
|
||||
add_compile_options(-fsanitize=address,undefined -fno-omit-frame-pointer)
|
||||
set(ASAN_LINKER_FLAGS "-fsanitize=address,undefined")
|
||||
endif()
|
||||
|
||||
# NOTE: Only set linker flags for executables and shared libraries
|
||||
# the add_link_options command would add flags to static libraries as well
|
||||
# which causes issues with symbols being defined in multiple places.
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${ASAN_LINKER_FLAGS}")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${ASAN_LINKER_FLAGS}")
|
||||
|
||||
if(WIN32)
|
||||
# NOTE: The sanitizer library only supports the static release runtime
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded")
|
||||
endif()
|
||||
elseif(MSVC)
|
||||
# Reference: https://learn.microsoft.com/en-us/cpp/build/reference/fsanitize
|
||||
message(WARNING "Enabling MSVC sanitizers (Clang has better support)...")
|
||||
add_compile_options(/fsanitize=address)
|
||||
add_link_options(/INCREMENTAL:NO)
|
||||
else()
|
||||
message (FATAL_ERROR "Unsupported compiler for sanitizers: ${CMAKE_CXX_COMPILER_ID}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Visual Studio generator specific flags
|
||||
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
# HACK: DO NOT this to add compiler flags/definitions, use target_compile_options on a
|
||||
|
@ -7,10 +52,17 @@ 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>
|
||||
)
|
||||
# Enable big objects (unity build)
|
||||
add_compile_options(/bigobj)
|
||||
endif()
|
||||
|
||||
# Make the project look nicer in IDEs
|
||||
|
@ -20,3 +72,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)
|
||||
|
|
168
cmake/deps.cmake
168
cmake/deps.cmake
|
@ -1,77 +1,91 @@
|
|||
if(CMAKE_SCRIPT_MODE_FILE)
|
||||
set(GUI_DLL ${CMAKE_ARGV3})
|
||||
set(DEPS_DIR ${CMAKE_ARGV4})
|
||||
set(WINDEPLOYQT ${CMAKE_ARGV5})
|
||||
get_filename_component(GUI_DIR ${GUI_DLL} DIRECTORY)
|
||||
|
||||
# Check if we already copied the dependencies
|
||||
if(EXISTS "${GUI_DIR}/.deps_copied")
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Copying dependencies from ${DEPS_DIR} to ${GUI_DIR}")
|
||||
|
||||
execute_process(COMMAND ${WINDEPLOYQT} --no-compiler-runtime --force ${GUI_DLL})
|
||||
|
||||
function(copy_dep relfile)
|
||||
if(EXISTS ${relfile})
|
||||
message(STATUS "Skipping ${relfile}")
|
||||
return()
|
||||
endif()
|
||||
message(STATUS "Copying ${relfile}")
|
||||
get_filename_component(reldir ${relfile} DIRECTORY)
|
||||
get_filename_component(relfile ${relfile} NAME)
|
||||
file(COPY ${DEPS_DIR}/${relfile} DESTINATION ${GUI_DIR}/${reldir})
|
||||
endfunction()
|
||||
|
||||
file(GLOB DEPS RELATIVE ${DEPS_DIR} "${DEPS_DIR}/*.dll")
|
||||
foreach(DEP ${DEPS})
|
||||
if(NOT DEP MATCHES "^(Qt5|msvc)")
|
||||
copy_dep(${DEP})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
copy_dep(GleeBug/TitanEngine.dll)
|
||||
copy_dep(StaticEngine/TitanEngine.dll)
|
||||
|
||||
file(TOUCH "${GUI_DIR}/.deps_copied")
|
||||
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT WIN32)
|
||||
message(STATUS "copy_dependencies is only supported on Windows")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT TARGET Qt5::windeployqt AND Qt5_FOUND AND TARGET Qt5::qmake)
|
||||
get_target_property(_qt5_qmake_location Qt5::qmake IMPORTED_LOCATION)
|
||||
|
||||
execute_process(
|
||||
COMMAND "${_qt5_qmake_location}" -query QT_INSTALL_PREFIX
|
||||
RESULT_VARIABLE return_code
|
||||
OUTPUT_VARIABLE qt5_install_prefix
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
set(imported_location "${qt5_install_prefix}/bin/windeployqt.exe")
|
||||
if(NOT EXISTS ${imported_location})
|
||||
message(FATAL_ERROR "Qt5 tool not found: ${imported_location}")
|
||||
endif()
|
||||
|
||||
add_executable(Qt5::windeployqt IMPORTED)
|
||||
|
||||
set_target_properties(Qt5::windeployqt PROPERTIES
|
||||
IMPORTED_LOCATION ${imported_location}
|
||||
)
|
||||
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>
|
||||
)
|
||||
if(CMAKE_SCRIPT_MODE_FILE)
|
||||
set(GUI_DLL ${CMAKE_ARGV3})
|
||||
set(DEPS_DIR ${CMAKE_ARGV4})
|
||||
set(WINDEPLOYQT ${CMAKE_ARGV5})
|
||||
get_filename_component(GUI_DIR ${GUI_DLL} DIRECTORY)
|
||||
|
||||
# Check if we already copied the dependencies
|
||||
if(EXISTS "${GUI_DIR}/.deps_copied")
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Copying dependencies from ${DEPS_DIR} to ${GUI_DIR}")
|
||||
|
||||
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)
|
||||
file(COPY ${DEPS_DIR}/${relfile} DESTINATION ${GUI_DIR}/${reldir})
|
||||
endfunction()
|
||||
|
||||
file(GLOB DEPS RELATIVE ${DEPS_DIR} "${DEPS_DIR}/*.dll")
|
||||
foreach(DEP ${DEPS})
|
||||
copy_dep(${DEP})
|
||||
endforeach()
|
||||
|
||||
copy_dep(GleeBug/TitanEngine.dll)
|
||||
copy_dep(StaticEngine/TitanEngine.dll)
|
||||
|
||||
list(JOIN DEPS_COPIED "\n" DEPS_COPIED)
|
||||
file(WRITE "${GUI_DIR}/.deps_copied" "${DEPS_COPIED}")
|
||||
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT WIN32)
|
||||
message(STATUS "copy_dependencies is only supported on Windows")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT TARGET Qt5::windeployqt AND Qt5_FOUND AND TARGET Qt5::qmake)
|
||||
get_target_property(_qt5_qmake_location Qt5::qmake IMPORTED_LOCATION)
|
||||
|
||||
execute_process(
|
||||
COMMAND "${_qt5_qmake_location}" -query QT_INSTALL_PREFIX
|
||||
RESULT_VARIABLE return_code
|
||||
OUTPUT_VARIABLE qt5_install_prefix
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
set(imported_location "${qt5_install_prefix}/bin/windeployqt.exe")
|
||||
if(NOT EXISTS ${imported_location})
|
||||
message(FATAL_ERROR "Qt5 tool not found: ${imported_location}")
|
||||
endif()
|
||||
|
||||
add_executable(Qt5::windeployqt IMPORTED)
|
||||
|
||||
set_target_properties(Qt5::windeployqt PROPERTIES
|
||||
IMPORTED_LOCATION ${imported_location}
|
||||
)
|
||||
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
|
||||
)
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
function(init_submodule folder)
|
||||
set(full_path "${CMAKE_CURRENT_LIST_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_LIST_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,9 @@
|
|||
set(CMAKE_SYSTEM_NAME Windows)
|
||||
|
||||
set(MSVC_BIN_DIR $ENV{MSVC_BIN_DIR})
|
||||
set(CMAKE_C_COMPILER ${MSVC_BIN_DIR}/cl)
|
||||
set(CMAKE_CXX_COMPILER ${MSVC_BIN_DIR}/cl)
|
||||
set(CMAKE_RC_COMPILER ${MSVC_BIN_DIR}/rc)
|
||||
|
||||
set(CMAKE_PROJECT_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/qt-wine.cmake)
|
||||
|
|
@ -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,29 @@
|
|||
include_guard()
|
||||
|
||||
message(STATUS "Configuring Qt for Wine cross-compilation...")
|
||||
|
||||
set(QT_HOST_BIN_DIR ${CMAKE_CURRENT_LIST_DIR}/wine)
|
||||
|
||||
function(qt5_host_tool name)
|
||||
if (NOT TARGET Qt5::${name})
|
||||
add_executable(Qt5::${name} IMPORTED)
|
||||
|
||||
set(imported_location ${QT_HOST_BIN_DIR}/${name})
|
||||
|
||||
# FIXME run after deps.cmake to enable next
|
||||
#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(windeployqt)
|
||||
qt5_host_tool(qmake)
|
||||
qt5_host_tool(moc)
|
||||
qt5_host_tool(rcc)
|
||||
qt5_host_tool(uic)
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
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}/jansson")
|
||||
file(MAKE_DIRECTORY "${PLUGINSDK_DIR}/lz4")
|
||||
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/jansson/" DESTINATION "${PLUGINSDK_DIR}/jansson")
|
||||
file(COPY "${ROOT_DIR}/src/dbg/lz4/" DESTINATION "${PLUGINSDK_DIR}/lz4")
|
||||
file(COPY "${ROOT_DIR}/src/dbg/XEDParse/" DESTINATION "${PLUGINSDK_DIR}/XEDParse")
|
||||
|
||||
# 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")
|
|
@ -0,0 +1 @@
|
|||
run
|
|
@ -0,0 +1 @@
|
|||
run
|
|
@ -0,0 +1 @@
|
|||
run
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (c) 2018 Martin Storsjo
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
#. msvcenv.sh
|
||||
|
||||
# /showIncludes
|
||||
unixify_path='/^Note: including file: /{ s/z:([\\/])/\1/i; s,\\,/,g; }'
|
||||
# /E
|
||||
unixify_line='/^[[:blank:]]*#[[:blank:]]*line[[:blank:]]/{ s/z:([\\/])/\1/i; s,\\\\,/,g; }'
|
||||
# Warnings and Errors
|
||||
unixify_note='/^[zZ]:.*\([[:digit:]]+\): (note|error C[[:digit:]]{4}|warning C[[:digit:]]{4}): /{ s/z:([\\/])/\1/ig; s,\\,/,g; }'
|
||||
|
||||
export WINE_MSVC_STDOUT_SED="$unixify_path;$unixify_line;$unixify_note"
|
||||
export WINE_MSVC_STDERR_SED="$unixify_path"
|
||||
|
||||
"$MSVC_BIN_DIR"/wine-msvc.sh "$QT_BIN_DIR"/$(basename $0).exe "$@"
|
||||
|
||||
ec=$?
|
||||
[ $ec -ne 0 ] && exit $ec
|
||||
|
||||
# Postprocess
|
||||
for a in "$@"; do
|
||||
case $a in
|
||||
[-/]P) arg_P=$a ;;
|
||||
[-/]Fi*) arg_Fi=${a:3} ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Unixify paths for /P
|
||||
if [ -n "$arg_P" ] && [ -f "$arg_Fi" ]; then
|
||||
if sed --help 2>&1 | grep '\-i extension' >/dev/null; then
|
||||
inplace=(-i '') # BSD sed
|
||||
else
|
||||
inplace=(-i) # GNU sed
|
||||
fi
|
||||
sed "${inplace[@]}" -E 's/\r//;'"$unixify_line" "$arg_Fi"
|
||||
fi
|
||||
|
||||
exit $ec
|
|
@ -0,0 +1 @@
|
|||
run
|
|
@ -0,0 +1 @@
|
|||
run
|
2
deps
2
deps
|
@ -1 +1 @@
|
|||
Subproject commit fdef4703ba4045204d36f6f5c1734749a8b7204a
|
||||
Subproject commit 31f6cc57999d78dd5f99f59ab56e8465fbb9256f
|
|
@ -0,0 +1,7 @@
|
|||
|
||||
; Top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
; Windows-style newlines
|
||||
[*]
|
||||
end_of_line = CRLF
|
|
@ -0,0 +1,7 @@
|
|||
_build*/
|
||||
*.chm
|
||||
python-2.7.18.amd64.portable/
|
||||
hha.dll
|
||||
hhc.exe
|
||||
itcc.dll
|
||||
*.7z
|
|
@ -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,37 @@
|
|||
## Prerequisites
|
||||
```sh
|
||||
sudo apt update
|
||||
sudo apt install cmake ninja-build wine
|
||||
```
|
||||
|
||||
## Install MSVC
|
||||
Download https://github.com/mstorsjo/msvc-wine
|
||||
```sh
|
||||
cd msvc-wine
|
||||
./vsdownload.py --accept-license --dest ~/opt/msvc Microsoft.VisualStudio.Workload.VCTools Microsoft.VisualStudio.Component.VC.ATL
|
||||
./install.sh ~/opt/msvc
|
||||
```
|
||||
|
||||
## Build
|
||||
x86
|
||||
```sh
|
||||
cd x64dbg
|
||||
export MSVC_BIN_DIR=~/opt/msvc/bin/x86
|
||||
export QT_BIN_DIR=~/src/x64dbg/build32/_deps/qt5-src/bin
|
||||
cmake -B build32 -DCMAKE_TOOLCHAIN_FILE=cmake/msvc-wine.cmake -G Ninja
|
||||
cmake --build build32 -j4
|
||||
```
|
||||
|
||||
x64
|
||||
```sh
|
||||
cd x64dbg
|
||||
export MSVC_BIN_DIR=~/opt/msvc/bin/x64
|
||||
export QT_BIN_DIR=~/src/x64dbg/build64/_deps/qt5-src/bin
|
||||
cmake -B build64 -DCMAKE_TOOLCHAIN_FILE=cmake/msvc-wine.cmake -G Ninja
|
||||
cmake --build build64 -j4
|
||||
```
|
||||
|
||||
## Issues
|
||||
- ```LINK : fatal error LNK1158: cannot run 'rc.exe'```
|
||||
> Fix: winecfg -> Drives -> Remove drives with alternative path to x64dbg src (like: E: -> ~/src)
|
||||
|
|
@ -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.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue