mirror of
https://github.com/x64dbg/docs.git
synced 2026-11-09 04:49:33 -10:00
Compare commits
60
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cb62e2be70 | ||
|
|
c001166788 | ||
|
|
9706dea1b3 | ||
|
|
980700de51 | ||
|
|
1c04f5a3d8 | ||
|
|
820de7621a | ||
|
|
69fb3b08a2 | ||
|
|
2a59c0953b | ||
|
|
bc28ed07f8 | ||
|
|
c09a67996c | ||
|
|
2f698682d9 | ||
|
|
6b8468f54b | ||
|
|
f224394fd6 | ||
|
|
7f37ab1f0b | ||
|
|
ebe36dca55 | ||
|
|
6720611815 | ||
|
|
8bbb404a7b | ||
|
|
86408054f1 | ||
|
|
21e4e1de92 | ||
|
|
f2a0cd7106 | ||
|
|
092fd587e7 | ||
|
|
9b3495a39a | ||
|
|
89d4c63b07 | ||
|
|
55062b38ae | ||
|
|
4990e3b382 | ||
|
|
bd07369a73 | ||
|
|
8fb54a2a57 | ||
|
|
2ea86a4d54 | ||
|
|
84c7ea5b95 | ||
|
|
2cb98ee59a | ||
|
|
1df823adac | ||
|
|
4646da61f7 | ||
|
|
86ec68869b | ||
|
|
72552b99af | ||
|
|
120986fbde | ||
|
|
0d5f16b209 | ||
|
|
fc6be1ac5d | ||
|
|
1bb28db0c4 | ||
|
|
551788b3fa | ||
|
|
f77e6ff7ae | ||
|
|
dfd59984dc | ||
|
|
d38ca414a9 | ||
|
|
c752433847 | ||
|
|
890f54d1fb | ||
|
|
e52bc7dcc8 | ||
|
|
f602bef96d | ||
|
|
eef4421502 | ||
|
|
e584695235 | ||
|
|
dd0612e115 | ||
|
|
51572d6bae | ||
|
|
bd80c73609 | ||
|
|
63b560aeb3 | ||
|
|
1275246e7c | ||
|
|
1067a6b55e | ||
|
|
4a2e49a249 | ||
|
|
e7b999421c | ||
|
|
e7c83ae302 | ||
|
|
d033f2927d | ||
|
|
1b33189d9e | ||
|
|
6741ed32a8 |
No files matched your search
+2
-1
@@ -1,2 +1,3 @@
|
||||
_build*/
|
||||
*.chm
|
||||
*.chm
|
||||
python-2.7.18.amd64.portable/
|
||||
@@ -0,0 +1,23 @@
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
# Set the version of Python and other tools you might need
|
||||
build:
|
||||
os: ubuntu-22.04
|
||||
tools:
|
||||
python: "2.7"
|
||||
|
||||
# Build documentation in the docs/ directory with Sphinx
|
||||
sphinx:
|
||||
builder: html
|
||||
configuration: 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: requirements.txt
|
||||
@@ -1,9 +1,15 @@
|
||||
# This repository was moved to https://github.com/x64dbg/x64dbg/tree/development/docs
|
||||
|
||||
# docs
|
||||
|
||||
Documentation repository for [x64dbg](http://x64dbg.com) at [Read the Docs](https://readthedocs.org/projects/x64dbg).
|
||||
|
||||
## Building
|
||||
|
||||
1. `pip install sphinx recommonmark==0.4.0 sphinx_rtd_theme==0.2.5b2`
|
||||
2. Add `relpath = relpath.replace(os.path.sep, '/')` to `C:\Python27\Lib\site-packages\recommonmark\transform.py` line `63`
|
||||
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`
|
||||
@@ -6,7 +6,7 @@ Set a memory breakpoint (GUARD_PAGE) on the whole memory region the provided add
|
||||
|
||||
`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 '3', it's assumed to be arg3. This means "bpm eax,r" would be the same command as: "bpm eax,0,r".
|
||||
`[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)
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -17,6 +17,7 @@ This section contains breakpoint control (set/delete/enable/disable) commands.
|
||||
EnableHardwareBreakpoint
|
||||
DisableHardwareBreakpoint
|
||||
SetMemoryBPX
|
||||
SetMemoryRangeBPX
|
||||
DeleteMemoryBPX
|
||||
EnableMemoryBreakpoint
|
||||
DisableMemoryBreakpoint
|
||||
|
||||
@@ -8,7 +8,7 @@ Initializes the debugger. This command will load the executable (do some basic c
|
||||
|
||||
`[arg2]` Commandline to create the process with.
|
||||
|
||||
`[arg3]` Current folder (passed to the `CreateProcess` API).
|
||||
`[arg3]` Current folder (passed to the `CreateProcess` API) (this is also sometimes called 'working directory' or 'current directory')
|
||||
|
||||
## result
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# StepSystem/StepSystemInto
|
||||
|
||||
Step into until reaching a system module.
|
||||
|
||||
## arguments
|
||||
|
||||
This command has no arguments.
|
||||
|
||||
## results
|
||||
|
||||
This command does not set any result variables.
|
||||
@@ -0,0 +1,11 @@
|
||||
# StepUser/StepUserInto
|
||||
|
||||
Step into until reaching a user module.
|
||||
|
||||
## arguments
|
||||
|
||||
This command has no arguments.
|
||||
|
||||
## results
|
||||
|
||||
This command does not set any result variables.
|
||||
@@ -24,4 +24,6 @@ Debug Control
|
||||
StepOut
|
||||
eStepOut
|
||||
skip
|
||||
InstrUndo
|
||||
InstrUndo
|
||||
StepUser
|
||||
StepSystem
|
||||
@@ -1,6 +1,6 @@
|
||||
# bswap
|
||||
|
||||
Perform a `bswap` operation.
|
||||
Perform a `bswap` operation: The byte order of the destination is inverted, so the last byte becomes the first.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# dec
|
||||
# dec
|
||||
|
||||
Decrease a value.
|
||||
|
||||
@@ -8,4 +8,4 @@ Decrease a value.
|
||||
|
||||
## result
|
||||
|
||||
This command does not set any result variables.
|
||||
This command does not set any result variables.
|
||||
@@ -12,6 +12,7 @@ This section contains various commands that are used for calculations etc.
|
||||
add
|
||||
sub
|
||||
mul
|
||||
mulhi
|
||||
div
|
||||
and
|
||||
or
|
||||
@@ -24,8 +25,13 @@ This section contains various commands that are used for calculations etc.
|
||||
shl
|
||||
shr
|
||||
sar
|
||||
popcnt
|
||||
lzcnt
|
||||
push
|
||||
pop
|
||||
test
|
||||
cmp
|
||||
mov
|
||||
movdqu
|
||||
vmovdqu
|
||||
kmovd
|
||||
@@ -0,0 +1,20 @@
|
||||
# kmovd/kmovq
|
||||
|
||||
The `kmovd`/`kmovq` commands are used to access AVX-512 opmask registers `K0`-`K7`. These commands are only available when the computer and x64dbg version supports AVX-512.
|
||||
|
||||
The `kmovd` command copies a 32-bit value from an expression to an AVX-512 opmask register, or from an AVX-512 opmask register to a memory location, a general purpose register, or an opmask register.
|
||||
If the destination is a 64-bit register, for example, an opmask register, then the 32-bit value is zero-extended to 64 bits.
|
||||
|
||||
The `kmovq` command copies a 64-bit value from an expression to an AVX-512 opmask register, or from an AVX-512 opmask register to a memory location, a general purpose register, or an opmask register.
|
||||
If executed in 32-bit environment, then only memory locations in the form of `[address]` or opmask registers are supported as operands.
|
||||
In 64-bit environment, all valid expressions can be used to calculate the value to be copied into the destination opmask register.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` The destination operand.
|
||||
|
||||
`arg2` The source operand.
|
||||
|
||||
## result
|
||||
|
||||
This command does not set any result variables.
|
||||
@@ -0,0 +1,11 @@
|
||||
# lzcnt
|
||||
|
||||
Count the number of leading zeros of a value. If the value is 0, then the result is 64 on 64-bit platform and 32 on 32-bit platform.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` Value.
|
||||
|
||||
## result
|
||||
|
||||
`arg1` is set to the number of leading zeros. Additionaly, the internal variable `$_EZ_FLAG` is set to 1 if `arg1` is 0, and set to 0 otherwise. The internal variable `$_BS_FLAG` is set to 0.
|
||||
@@ -4,7 +4,7 @@ Set a variable.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` Variable name (optionally prefixed with a $) to set. When the variable does not exist, it will be created.
|
||||
`arg1` Variable name (optionally prefixed with a $) to set. When the variable does not exist, it will be created. Note that SSE registers are not supported (Instead use [movdqu](movdqu.md) for SSE registers).
|
||||
|
||||
`arg2` Value to store in the variable. If you use `#11 22 33#` it will write the bytes `11 22 33` in the process memory at `arg1`.
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# movdqu/movups/movupd
|
||||
|
||||
Read/write an XMM register. The source and destination operands can be either an XMM register, or a memory location. The value of destination operand will be set to source operand. When using a memory location, only the syntax `[addr]` is supported, where `addr` is an expression of the memory address. Unlike other commands, the size of operands are 16 bytes. MM/YMM/ZMM registers are not supported by this command, to access YMM/ZMM registers, use [`vmovdqu`](vmovdqu.md) command.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` The destination operand.
|
||||
|
||||
`arg2` The source operand.
|
||||
|
||||
## result
|
||||
|
||||
This command does not set any result variables.
|
||||
@@ -1,6 +1,6 @@
|
||||
# mul
|
||||
|
||||
Multiply two values.
|
||||
Multiply two values and store the lower part of result into `arg1`.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# mulhi
|
||||
|
||||
Multiply two unsigned values and store the upper part of result into `arg1`.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` Destination.
|
||||
|
||||
`arg2` Source.
|
||||
|
||||
## result
|
||||
|
||||
This command does not set any result variables.
|
||||
@@ -0,0 +1,11 @@
|
||||
# popcnt
|
||||
|
||||
Evaluate the population count of a value, that is, number of bits set to 1.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` Value.
|
||||
|
||||
## result
|
||||
|
||||
`arg1` is set to the population count. Additionaly, the internal variable `$_EZ_FLAG` is set to 1 if `arg1` is 0, and set to 0 otherwise. The internal variable `$_BS_FLAG` is set to 0.
|
||||
@@ -1,6 +1,6 @@
|
||||
# rol
|
||||
|
||||
Binary ROL a value.
|
||||
Binary ROL (rotate left) a value.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# ror
|
||||
|
||||
Binary ROR a value.
|
||||
Binary ROR (rotate right) a value.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# vmovdqu/vmovups/vmovupd
|
||||
|
||||
Read/write a YMM/ZMM register. The source and destination operands can be either an YMM/ZMM register, or a memory location. The value of destination operand will be set to source operand. When using a memory location, only the syntax `[addr]` is supported, where `addr` is an expression of the memory address. Unlike other commands, the size of operands are 32 bytes for YMM registers and 64 bytes for ZMM registers. To access ZMM registers, the computer and x64dbg version must support AVX-512. To access XMM registers, use [`movdqu`](movdqu.md) command.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` The destination operand.
|
||||
|
||||
`arg2` The source operand.
|
||||
|
||||
## result
|
||||
|
||||
This command does not set any result variables.
|
||||
@@ -6,7 +6,7 @@ Add an entry to the reference view. You need to call 'refinit' before using refa
|
||||
|
||||
`arg1` Address to put in the reference view.
|
||||
|
||||
`arg2` Text to put after the address. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg2` Text to put after the address. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
## result
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# reget
|
||||
# refget
|
||||
|
||||
Retrieve the address of a reference.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Initialize reference view for command usage.
|
||||
|
||||
## arguments
|
||||
|
||||
`[arg1]` The title of the new reference view. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`[arg1]` The title of the new reference view. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
## result
|
||||
|
||||
|
||||
+3
-1
@@ -1,7 +1,9 @@
|
||||
Commands
|
||||
========
|
||||
|
||||
This is the documentation of x64dbg commands.
|
||||
Commands have the following format (notice the arguments are **comma separated**):
|
||||
|
||||
``command arg1, arg2, argN``
|
||||
|
||||
FAQ:
|
||||
|
||||
|
||||
@@ -13,4 +13,5 @@ This section contains commands to manipulate memory inside the debuggee.
|
||||
free
|
||||
getpagerights
|
||||
setpagerights
|
||||
savedata
|
||||
savedata
|
||||
minidump
|
||||
@@ -0,0 +1,11 @@
|
||||
# minidump
|
||||
|
||||
Create a [minidump](https://learn.microsoft.com/en-us/windows/win32/debug/minidump-files) with full memory and handle information from the debuggee.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` The filename of the `.dmp`.
|
||||
|
||||
## results
|
||||
|
||||
This command does not set any result variables.
|
||||
@@ -4,7 +4,7 @@ Save a memory region to disk.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` The filename. If you use `:memdump:` as name it will save a file as `memdump_pid_addr_size.bin` in the x64dbg directory. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg1` The filename. If you use `:memdump:` as name it will save a file as `memdump_pid_addr_size.bin` in the x64dbg directory. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
`arg2` The address of the memory region.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Assemble an instruction.
|
||||
|
||||
`arg1` Address to place the assembled instruction at.
|
||||
|
||||
`arg2` Instruction text. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg2` Instruction text. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
`[arg3]` When specified the remainder of the previous instruction will be filled with NOPs.
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ There are various branches that can react on the flags set by the `cmp` (and may
|
||||
* branch if equal - `je`/`ife(q)`/`jz`/`ifz`
|
||||
* branch if smaller - `jb`/`ifb`/`jl`/`ifl`
|
||||
* branch if bigger - `ja`/`ifa`/`jg`/`ifg`
|
||||
* branch if bigger/equal - `jbe`/`ifbe(q)`/`jle`/`ifle(q)`
|
||||
* branch if smaller/equal - `jae`/`ifae(q)`/`jge`/`ifge(q)`
|
||||
* branch if smaller/equal - `jbe`/`ifbe(q)`/`jle`/`ifle(q)`
|
||||
* branch if bigger/equal - `jae`/`ifae(q)`/`jge`/`ifge(q)`
|
||||
|
||||
arguments
|
||||
---------
|
||||
|
||||
@@ -6,7 +6,7 @@ Put information in the log.
|
||||
arguments
|
||||
---------
|
||||
|
||||
``[arg1]`` Format string (see :doc:`../../introduction/Formatting`). When not specified, a newline will be logged. When using a format string it is recommended to use quotes to avoid ambiguity with the ``;`` (command separator): ````log "{mem;8@rax}"````.
|
||||
``[arg1]`` Format string (see :doc:`../../introduction/Formatting`). When not specified, a newline will be logged. When using a format string it is recommended to use quotes to avoid ambiguity with the ``;`` (command separator): ``log "{mem;8@rax}"``.
|
||||
|
||||
result
|
||||
------
|
||||
|
||||
@@ -4,7 +4,7 @@ Display a message box.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` Message box text. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg1` Message box text. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
## result
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ Display a message box, asking the user to answer yes or no.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` Message box text. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg1` Message box text. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
## result
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Find a pattern in a memory page. If you want to find all occurrences of a patter
|
||||
|
||||
`arg1` The address to start searching from. Notice that the searching will stop when the end of the memory page this address resides in has been reached. This means you cannot search the complete process memory without enumerating the memory pages first. If you want to find all occurrences of a pattern in the entire memory map use [findallmem](./findallmem.md).
|
||||
|
||||
`arg2` The byte pattern to search for. This byte pattern can contain wildcards (?) for example: `EB0?90??8D`. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg2` The byte pattern to search for. This byte pattern can contain wildcards (?) for example: `EB0?90??8D`. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
`[arg3]` The size of the data to search in. Default is the size of the memory region.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Find all occurrences of a pattern in a memory page.
|
||||
|
||||
`arg1` The address to start searching from. Notice that the searching will stop when the end of the memory page this address resides in has been reached. This means you cannot search the complete process memory without enumerating the memory pages first. You can use [findallmem](./findallmem.md) to search for a pattern in the whole memory.
|
||||
|
||||
`arg2` The byte pattern to search for. This byte pattern can contain wildcards (?) for example: `EB0?90??8D`. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg2` The byte pattern to search for. This byte pattern can contain wildcards (?) for example: `EB0?90??8D`. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
`[arg3]` The size of the data to search in. Default is the size of the memory region.
|
||||
|
||||
@@ -27,3 +27,17 @@ Search for all occurences of the value of cax in the stack memory page:
|
||||
```
|
||||
findall mem.base(csp), "{bswap@cax}"
|
||||
```
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -6,10 +6,26 @@ Find all occurrences of a pattern in the entire memory map.
|
||||
|
||||
`arg1` The address to start searching from.
|
||||
|
||||
`arg2` The byte pattern to search for. This byte pattern can contain wildcards (?) for example: `EB0?90??8D`. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg2` The byte pattern to search for. This byte pattern can contain wildcards (?) for example: `EB0?90??8D`. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
`[arg3]` The size of the data to search in. Default is the entire memory map.
|
||||
`[arg3]` The size of the data to search in. Default is the entire memory map (`-1`).
|
||||
|
||||
`[arg4]` Set to `user`/`system`/`module` to only include (user/system) modules in the search.
|
||||
|
||||
## result
|
||||
|
||||
`$result` is set to the number of occurrences.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -4,7 +4,7 @@ Find assembled instruction.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` Instruction to look for (make sure to use quoted "mov eax, ebx" to ensure you actually search for that instruction). You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg1` Instruction to look for (make sure to use quoted "mov eax, ebx" to ensure you actually search for that instruction). You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
`[arg2]` Address of/inside a memory page to look in. When not specified CIP will be used.
|
||||
|
||||
@@ -12,4 +12,18 @@ Find assembled instruction.
|
||||
|
||||
## result
|
||||
|
||||
The $result variable is set to the number of references found.
|
||||
The `$result` variable is set to the number of references found.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -12,4 +12,18 @@ Find references to GUID. The referenced GUID must be registered in the system, o
|
||||
|
||||
## results
|
||||
|
||||
Set `$result` to `1` if any GUID is found, `0` otherwise.
|
||||
Set `$result` to `1` if any GUID is found, `0` otherwise.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -11,3 +11,17 @@ Find all inter-modular calls.
|
||||
## result
|
||||
|
||||
The `$result` variable is set to the number of inter-modular calls found.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -12,4 +12,18 @@ Find references to a certain value.
|
||||
|
||||
## result
|
||||
|
||||
The $result variable is set to the number of references found.
|
||||
The `$result` variable is set to the number of references found.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -15,3 +15,17 @@ Find references to a certain range of values.
|
||||
## result
|
||||
|
||||
The `$result` variable is set to the number of references found.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -10,4 +10,18 @@ Find referenced text strings.
|
||||
|
||||
## result
|
||||
|
||||
The $result variable is set to the number of string references found.
|
||||
The `$result` variable is set to the number of string references found.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
Run until user code is reached. It is equivallent to `RunToParty 0`.
|
||||
|
||||
This command sets temporary memory breakpoints on all user code pages, rather than single stepping. It fails when another RunToUserCode command is already executing, because the temporary memory breakpoints are already set.
|
||||
|
||||
## arguments
|
||||
|
||||
This command has no arguments.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# StartRunTrace/opentrace
|
||||
# StartTraceRecording/StartRunTrace/opentrace
|
||||
|
||||
Start recording a run trace with a specified file. The file will also be opened in the trace view. Note you need to use [TraceIntoConditional](./TraceIntoConditional.md) or other command to actually trace the program.
|
||||
Start recording a trace to the specified file. The file will also be opened in the trace view. Note you need to use [TraceIntoConditional](./TraceIntoConditional.md) or other command to actually trace the program and record instructions.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# StopRunTrace/tc
|
||||
# StopTraceRecording/StopRunTrace/tc
|
||||
|
||||
Stops recording a run trace and closes file.
|
||||
Stops trace recording and closes the file.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# TraceIntoBeyondTraceRecord/tibt
|
||||
# TraceIntoBeyondTraceCoverage/TraceIntoBeyondTraceRecord/tibt
|
||||
|
||||
Perform [StepInto](StepInto.md) until the program reaches somewhere outside the trace record. This is similar to `ticnd tr.hitcount(cip)==0&&arg1, arg2` except that it achieves higher performance by avoiding the expression function invocation.
|
||||
Perform [StepInto](StepInto.md) until the program reaches somewhere outside the trace coverage. This is similar to `ticnd tr.hitcount(cip)==0&&arg1, arg2` except that it achieves higher performance by avoiding the expression function invocation.
|
||||
|
||||
Usage example: If you want to find out the forking point of the program when different inputs are provided, first enable or re-enable trace record to clean trace record data.
|
||||
Usage example: If you want to find out the forking point of the program when different inputs are provided, first enable or re-enable trace coverage to clean trace coverage data.
|
||||
Then you trace while input A is provided. Finally you provide input B and execute `TraceIntoBeyondTraceRecord` command. The program will be paused where the instruction is never executed before.
|
||||
|
||||
## arguments
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# TraceIntoIntoTraceRecord/tiit
|
||||
# TraceIntoIntoTraceCoverage/TraceIntoIntoTraceRecord/tiit
|
||||
|
||||
Perform StepInto until the program reaches somewhere inside the trace record.
|
||||
Perform StepInto until the program reaches somewhere inside the trace coverage.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# TraceOverBeyondTraceRecord/tobt
|
||||
# TraceOverBeyondTraceCoverage,TraceOverBeyondTraceRecord/tobt
|
||||
|
||||
Perform StepOver until the program reaches somewhere outside the trace record.
|
||||
Perform StepOver until the program reaches somewhere outside the trace coverage.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# TraceOverIntoTraceRecord/toit
|
||||
# TraceOverIntoTraceCoverage/TraceOverIntoTraceRecord/toit
|
||||
|
||||
Perform StepOver until the program reaches somewhere inside the trace record.
|
||||
Perform StepOver until the program reaches somewhere inside the trace coverage.
|
||||
|
||||
## arguments
|
||||
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
# VisitType
|
||||
# VisitType/DisplayType/dt
|
||||
|
||||
Visit a type and print its members.
|
||||
Display a type and print its members in the struct view.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` The type to visit.
|
||||
`arg1` The type to display.
|
||||
|
||||
`[arg2]` Address to print from. If not specified (or zero) the type will be printed without values.
|
||||
|
||||
`[arg3]` Maximum pointer resolution depth (default is 0). This can be used to also display structures (and values) pointed to by members of the type you are visiting.
|
||||
`[arg3]` Maximum pointer resolution depth. This can be used to also display structures (and values) pointed to by members of the type you are visiting. If not specified or negative, it will default to 2 (configurable with `[Engine].DefaultTypePtrDepth`).
|
||||
|
||||
`[arg4]` Name of the variable. If not specified it will default to an empty string.
|
||||
|
||||
## result
|
||||
|
||||
|
||||
@@ -8,4 +8,18 @@ This command has no arguments.
|
||||
|
||||
## result
|
||||
|
||||
$resultwill be set to the number of user-defined arguments.
|
||||
`$result` will be set to the number of user-defined arguments.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -8,4 +8,18 @@ This command has no arguments.
|
||||
|
||||
## result
|
||||
|
||||
$resultwill be set to the number of user-defined bookmarks.
|
||||
`$result` will be set to the number of user-defined bookmarks.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -8,4 +8,18 @@ This command has no arguments.
|
||||
|
||||
## result
|
||||
|
||||
$resultwill be set to the number of user-defined comments.
|
||||
`$result` will be set to the number of user-defined comments.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -8,4 +8,18 @@ This command has no arguments.
|
||||
|
||||
## result
|
||||
|
||||
$resultwill be set to the number of user-defined functions.
|
||||
`$result` will be set to the number of user-defined functions.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -8,4 +8,18 @@ This command has no arguments.
|
||||
|
||||
## result
|
||||
|
||||
$resultwill be set to the number of user-defined labels.
|
||||
`$result` will be set to the number of user-defined labels.
|
||||
|
||||
## remarks
|
||||
|
||||
The contents of the reference view can be iterated in a script with the `ref.addr` [expression function](../../introduction/Expression-functions.md):
|
||||
|
||||
```
|
||||
i = 0
|
||||
loop:
|
||||
addr = ref.addr(i)
|
||||
log "reference {d:i} = {p:addr}"
|
||||
i++
|
||||
cmp i, ref.count()
|
||||
jne loop
|
||||
```
|
||||
@@ -6,7 +6,7 @@ Set a label.
|
||||
|
||||
`arg1` Address to set the label at (preferably inside a module).
|
||||
|
||||
`arg2` Label text. You can use [String Formatting](../../introduction/Formatting.rst) here.
|
||||
`arg2` Label text. You can use [String Formatting](../../introduction/Formatting.md) here.
|
||||
|
||||
## result
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
Declare a new variable.
|
||||
|
||||
**Note**: You should not use this command under normal circumstances. If you want to create a variable you can do so with `myvar = 42`.
|
||||
|
||||
## arguments
|
||||
|
||||
`arg1` Variable name (will be prefixed with '$' if not done).
|
||||
|
||||
@@ -89,7 +89,7 @@ language = None
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This patterns also effect to html_static_path and html_extra_path
|
||||
exclude_patterns = ['_build*', 'Thumbs.db', '.DS_Store', 'README.md', '.git']
|
||||
exclude_patterns = ['_build*', 'Thumbs.db', '.DS_Store', 'README.md', '.git', 'python-2.7.18.amd64.portable']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
# DbgMemGetPageSize
|
||||
|
||||
Function description.
|
||||
|
||||
```c++
|
||||
Function definition.
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`param1` Parameter description.
|
||||
|
||||
## Return Value
|
||||
|
||||
Return value description.
|
||||
|
||||
## Example
|
||||
|
||||
Get page base and size of selected instruction.
|
||||
```c++
|
||||
SELECTIONDATA sel; // Define Address the slected line in the Disassembly window ( begin , End )
|
||||
GuiSelectionGet(GUI_DISASSEMBLY, &sel); // Get the value of sel(begin addr , End addr )
|
||||
duint pagesize = DbgMemGetPageSize(sel.start); // get the page size of the section from the selected memory addr
|
||||
//Or use the following statement to get page base and size in one call.
|
||||
duint sctionbase = DbgMemFindBaseAddr(sel.start, &pagesize); // get the base of this section ( begin addr of the section )
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- List of related functions
|
||||
# DbgMemGetPageSize
|
||||
|
||||
Function description.
|
||||
|
||||
```c++
|
||||
Function definition.
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`param1` Parameter description.
|
||||
|
||||
## Return Value
|
||||
|
||||
Return value description.
|
||||
|
||||
## Example
|
||||
|
||||
Get page base and size of selected instruction.
|
||||
```c++
|
||||
SELECTIONDATA sel; // Define Address the slected line in the Disassembly window ( begin , End )
|
||||
GuiSelectionGet(GUI_DISASSEMBLY, &sel); // Get the value of sel(begin addr , End addr )
|
||||
duint pagesize = DbgMemGetPageSize(sel.start); // get the page size of the section from the selected memory addr
|
||||
//Or use the following statement to get page base and size in one call.
|
||||
duint sctionbase = DbgMemFindBaseAddr(sel.start, &pagesize); // get the base of this section ( begin addr of the section )
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- List of related functions
|
||||
@@ -8,7 +8,7 @@ duint DbgValFromString(const char* string);
|
||||
|
||||
## Parameters
|
||||
|
||||
`string` The [expression](../../../introduction/Expressions.rst) to evaluate in UTF-8 encoding.
|
||||
`string` The [expression](../../../introduction/Expressions.md) to evaluate in UTF-8 encoding.
|
||||
|
||||
## Return Value
|
||||
|
||||
|
||||
@@ -1,32 +1,33 @@
|
||||
# GuiGetDebuggeeNotes
|
||||
|
||||
Returns into a variable a pointer to a string containing notes and information that a user has made relating to the target being debugged (the debuggee). The function GuiGetGlobalNotes can be used to get the global notes stored by a user.
|
||||
|
||||
```c++
|
||||
void GuiGetDebuggeeNotes(char** text)
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`text` A variable that will contain a pointer to a buffer on return. The pointer returned points to a string that will contain the notes for the debuggee.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value. The string containing the notes is returned via the pointer supplied via the `text` parameter.
|
||||
|
||||
## Example
|
||||
|
||||
```c++
|
||||
char* text = nullptr;
|
||||
GuiGetDebuggeeNotes(&text);
|
||||
if(text)
|
||||
{
|
||||
// do something with text
|
||||
}
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- [GuiSetDebuggeeNotes](./GuiSetDebuggeeNotes.md)
|
||||
- [GuiGetGlobalNotes](./GuiGetGlobalNotes.md)
|
||||
- [GuiSetGlobalNotes](./GuiSetGlobalNotes.md)
|
||||
# GuiGetDebuggeeNotes
|
||||
|
||||
Returns into a variable a pointer to a string containing notes and information that a user has made relating to the target being debugged (the debuggee). The function GuiGetGlobalNotes can be used to get the global notes stored by a user.
|
||||
|
||||
```c++
|
||||
void GuiGetDebuggeeNotes(char** text)
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`text` A variable that will contain a pointer to a buffer on return. The pointer returned points to a string that will contain the notes for the debuggee.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value. The string containing the notes is returned via the pointer supplied via the `text` parameter.
|
||||
|
||||
## Example
|
||||
|
||||
```c++
|
||||
char* text = nullptr;
|
||||
GuiGetDebuggeeNotes(&text);
|
||||
if(text)
|
||||
{
|
||||
// do something with text
|
||||
BridgeFree(text);
|
||||
}
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- [GuiSetDebuggeeNotes](./GuiSetDebuggeeNotes.md)
|
||||
- [GuiGetGlobalNotes](./GuiGetGlobalNotes.md)
|
||||
- [GuiSetGlobalNotes](./GuiSetGlobalNotes.md)
|
||||
@@ -1,32 +1,33 @@
|
||||
# GuiGetGlobalNotes
|
||||
|
||||
Returns into a variable a pointer to a string containing global notes and information that a user has made. The function GuiGetDebuggeeNotes can be used to get the local notes stored by a user for the target being debugged (the debuggee).
|
||||
|
||||
```c++
|
||||
void GuiGetGlobalNotes(char** text)
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`text` A variable that will contain a pointer to a buffer on return. The pointer returned points to a string that will contain the global notes.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value. The string containing the notes is returned via the pointer supplied via the `text` parameter.
|
||||
|
||||
## Example
|
||||
|
||||
```c++
|
||||
char* text = nullptr;
|
||||
GuiGetGlobalNotes(&text);
|
||||
if(text)
|
||||
{
|
||||
// do something with text
|
||||
}
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- [GuiSetGlobalNotes](./GuiSetGlobalNotes.md)
|
||||
- [GuiGetDebuggeeNotes](./GuiGetDebuggeeNotes.md)
|
||||
- [GuiSetDebuggeeNotes](./GuiSetDebuggeeNotes.md)
|
||||
# GuiGetGlobalNotes
|
||||
|
||||
Returns into a variable a pointer to a string containing global notes and information that a user has made. The function GuiGetDebuggeeNotes can be used to get the local notes stored by a user for the target being debugged (the debuggee).
|
||||
|
||||
```c++
|
||||
void GuiGetGlobalNotes(char** text)
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`text` A variable that will contain a pointer to a buffer on return. The pointer returned points to a string that will contain the global notes.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value. The string containing the notes is returned via the pointer supplied via the `text` parameter.
|
||||
|
||||
## Example
|
||||
|
||||
```c++
|
||||
char* text = nullptr;
|
||||
GuiGetGlobalNotes(&text);
|
||||
if(text)
|
||||
{
|
||||
// do something with text
|
||||
BridgeFree(text);
|
||||
}
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- [GuiSetGlobalNotes](./GuiSetGlobalNotes.md)
|
||||
- [GuiGetDebuggeeNotes](./GuiGetDebuggeeNotes.md)
|
||||
- [GuiSetDebuggeeNotes](./GuiSetDebuggeeNotes.md)
|
||||
@@ -0,0 +1,16 @@
|
||||
# GuiOpenTraceFile
|
||||
|
||||
Open a run trace file (*.trace32 or *.trace64 file) in the trace view.
|
||||
|
||||
```c++
|
||||
void GuiOpenTraceFile(const char* fileName);
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`fileName` Path to the run trace file.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value.
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
# GuiSetGlobalNotes
|
||||
|
||||
Sets the global notes, based on the text variable passed to the function. The text variable is a pointer to a string containing the information to set as the global notes.
|
||||
|
||||
```c++
|
||||
void GuiSetGlobalNotes(char** text)
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`text` A variable that contains a pointer to a string that contains the text to set as the global notes.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value.
|
||||
|
||||
## Example
|
||||
|
||||
```c++
|
||||
notesFile = String(szProgramDir) + "\\notes.txt";
|
||||
String text;
|
||||
if(!FileExists(notesFile.c_str()) || FileHelper::ReadAllText(notesFile, text))
|
||||
GuiSetGlobalNotes(text.c_str());
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- [GuiGetGlobalNotes](./GuiGetGlobalNotes.md)
|
||||
- [GuiGetDebuggeeNotes](./GuiGetDebuggeeNotes.md)
|
||||
- [GuiSetDebuggeeNotes](./GuiSetDebuggeeNotes.md)
|
||||
|
||||
# GuiSetGlobalNotes
|
||||
|
||||
Sets the global notes, based on the text variable passed to the function. The text variable is a pointer to a string containing the information to set as the global notes.
|
||||
|
||||
```c++
|
||||
void GuiSetGlobalNotes(char** text)
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`text` A variable that contains a pointer to a string that contains the text to set as the global notes.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value.
|
||||
|
||||
## Example
|
||||
|
||||
```c++
|
||||
notesFile = String(szProgramDir) + "\\notes.txt";
|
||||
String text;
|
||||
if(!FileExists(notesFile.c_str()) || FileHelper::ReadAllText(notesFile, text))
|
||||
GuiSetGlobalNotes(text.c_str());
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- [GuiGetGlobalNotes](./GuiGetGlobalNotes.md)
|
||||
- [GuiGetDebuggeeNotes](./GuiGetDebuggeeNotes.md)
|
||||
- [GuiSetDebuggeeNotes](./GuiSetDebuggeeNotes.md)
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
# GuiSymbolUpdateModuleList
|
||||
|
||||
Refreshes the symbol view modules list.
|
||||
|
||||
```c++
|
||||
void GuiSymbolUpdateModuleList(int count, SYMBOLMODULEINFO* modules)
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`count` An integer representing the number of symbol module's to update.
|
||||
|
||||
`modules` A SYMBOLMODULEINFO variable that will hold the symbol module information.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value.
|
||||
|
||||
## Example
|
||||
|
||||
```c++
|
||||
// Build the vector of modules
|
||||
std::vector<SYMBOLMODULEINFO> modList;
|
||||
|
||||
if(!SymGetModuleList(&modList))
|
||||
{
|
||||
GuiSymbolUpdateModuleList(0, nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a new array to be sent to the GUI thread
|
||||
size_t moduleCount = modList.size();
|
||||
SYMBOLMODULEINFO* data = (SYMBOLMODULEINFO*)BridgeAlloc(moduleCount * sizeof(SYMBOLMODULEINFO));
|
||||
|
||||
// Direct copy from std::vector data
|
||||
memcpy(data, modList.data(), moduleCount * sizeof(SYMBOLMODULEINFO));
|
||||
|
||||
// Send the module data to the GUI for updating
|
||||
GuiSymbolUpdateModuleList((int)moduleCount, data);
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- [GuiSymbolLogAdd](./GuiSymbolLogAdd.md)
|
||||
- [GuiSymbolLogClear](./GuiSymbolLogClear.md)
|
||||
- [GuiSymbolRefreshCurrent](./GuiSymbolRefreshCurrent.md)
|
||||
- [GuiSymbolSetProgress](./GuiSymbolSetProgress.md)
|
||||
# GuiSymbolUpdateModuleList
|
||||
|
||||
Refreshes the symbol view modules list.
|
||||
|
||||
```c++
|
||||
void GuiSymbolUpdateModuleList(int count, SYMBOLMODULEINFO* modules)
|
||||
```
|
||||
|
||||
## Parameters
|
||||
|
||||
`count` An integer representing the number of symbol module's to update.
|
||||
|
||||
`modules` A SYMBOLMODULEINFO variable that will hold the symbol module information.
|
||||
|
||||
## Return Value
|
||||
|
||||
This function does not return a value.
|
||||
|
||||
## Example
|
||||
|
||||
```c++
|
||||
// Build the vector of modules
|
||||
std::vector<SYMBOLMODULEINFO> modList;
|
||||
|
||||
if(!SymGetModuleList(&modList))
|
||||
{
|
||||
GuiSymbolUpdateModuleList(0, nullptr);
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a new array to be sent to the GUI thread
|
||||
size_t moduleCount = modList.size();
|
||||
SYMBOLMODULEINFO* data = (SYMBOLMODULEINFO*)BridgeAlloc(moduleCount * sizeof(SYMBOLMODULEINFO));
|
||||
|
||||
// Direct copy from std::vector data
|
||||
memcpy(data, modList.data(), moduleCount * sizeof(SYMBOLMODULEINFO));
|
||||
|
||||
// Send the module data to the GUI for updating
|
||||
GuiSymbolUpdateModuleList((int)moduleCount, data);
|
||||
```
|
||||
|
||||
## Related functions
|
||||
|
||||
- [GuiSymbolLogAdd](./GuiSymbolLogAdd.md)
|
||||
- [GuiSymbolLogClear](./GuiSymbolLogClear.md)
|
||||
- [GuiSymbolRefreshCurrent](./GuiSymbolRefreshCurrent.md)
|
||||
- [GuiSymbolSetProgress](./GuiSymbolSetProgress.md)
|
||||
@@ -37,6 +37,7 @@ This section contains information about the Graphical User Interface GUI functio
|
||||
GuiMenuClear
|
||||
GuiMenuSetEntryIcon
|
||||
GuiMenuSetIcon
|
||||
GuiOpenTraceFile
|
||||
GuiReferenceAddColumn
|
||||
GuiReferenceDeleteAllColumns
|
||||
GuiReferenceGetCellContent
|
||||
|
||||
@@ -4,6 +4,8 @@ The x64dbg can be automated and extended in various ways: by the use of x64dbg s
|
||||
|
||||
This section contains documentation intended to help developers to write code related to this program.
|
||||
|
||||
**Notice:** It is easy to compile x64dbg. If you find it is more interesting in working directly on x64dbg source code to add your new features, don't forget to share it with us on Github, as required by GPLv3 licence of x64dbg, so that everyone can benefit from a better x64dbg. It will also ensure your code won't suddenly break due to incompatible changes made by x64dbg team who don't know your work.
|
||||
|
||||
**Contents:**
|
||||
|
||||
.. toctree::
|
||||
@@ -12,4 +14,3 @@ This section contains documentation intended to help developers to write code re
|
||||
plugins/index
|
||||
functions/index
|
||||
tracefile
|
||||
|
||||
@@ -3,7 +3,9 @@ _plugin_debugpause
|
||||
==================
|
||||
This function returns debugger control to the user. You would use this function when you write an unpacker that needs support from x64dbg (for example in development). Calling this function will set the debug state to 'paused' and it will not return until the user runs the debuggee using the `run` command .
|
||||
|
||||
`void _plugin_debugpause();`
|
||||
::
|
||||
|
||||
void _plugin_debugpause();
|
||||
|
||||
----------
|
||||
Parameters
|
||||
|
||||
@@ -6,7 +6,7 @@ This function returns sets if the debugger should skip first-chance exceptions.
|
||||
::
|
||||
|
||||
void _plugin_debugskipexceptions(
|
||||
bool skip //skip flag
|
||||
bool skip //skip flag
|
||||
);
|
||||
|
||||
----------
|
||||
|
||||
@@ -5,9 +5,9 @@ This function allows you to hash some data. It is used by x64dbg in various plac
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_hash(
|
||||
const void* data, //data to hash
|
||||
duint size //size (in bytes) of the data to hash
|
||||
duint _plugin_hash(
|
||||
const void* data, //data to hash
|
||||
duint size //size (in bytes) of the data to hash
|
||||
);
|
||||
|
||||
----------
|
||||
|
||||
@@ -9,18 +9,24 @@ This section contains information about the `_plugin_` prefixed functions export
|
||||
|
||||
debugpause
|
||||
debugskipexceptions
|
||||
hash
|
||||
logprintf
|
||||
logputs
|
||||
menuadd
|
||||
menuaddentry
|
||||
menuaddseparator
|
||||
menuclear
|
||||
menuentryseticon
|
||||
menuentrysetchecked
|
||||
menuentryseticon
|
||||
menuseticon
|
||||
registercallback
|
||||
registercommand
|
||||
registerexprfunction
|
||||
registerexprfunctionex
|
||||
registerformatfunction
|
||||
startscript
|
||||
unregistercallback
|
||||
unregistercommand
|
||||
waituntilpaused
|
||||
hash
|
||||
unregisterexprfunction
|
||||
unregisterformatfunction
|
||||
waituntilpaused
|
||||
@@ -7,8 +7,8 @@ This function prints a message to the log window.
|
||||
::
|
||||
|
||||
void _plugin_logprintf(
|
||||
const char* format, //format string
|
||||
... //additional arguments
|
||||
const char* format, //format string
|
||||
... //additional arguments
|
||||
);
|
||||
|
||||
----------
|
||||
|
||||
@@ -6,7 +6,7 @@ This function prints a single line to the log window.
|
||||
::
|
||||
|
||||
void _plugin_logputs(
|
||||
const char* text //text to print
|
||||
const char* text //text to print
|
||||
);
|
||||
|
||||
----------
|
||||
|
||||
@@ -6,8 +6,8 @@ This function adds a new child menu to a menu.
|
||||
::
|
||||
|
||||
int _plugin_menuadd(
|
||||
int hMenu, //menu handle to add the new child menu to
|
||||
const char* title //child menu title
|
||||
int hMenu, //menu handle to add the new child menu to
|
||||
const char* title //child menu title
|
||||
);
|
||||
|
||||
----------
|
||||
|
||||
@@ -6,9 +6,9 @@ This function adds a menu entry to a menu.
|
||||
::
|
||||
|
||||
bool _plugin_menuaddentry(
|
||||
int hMenu, //menu handle to add the new child menu to
|
||||
int hEntry, //plugin-wide identifier for the menu entry
|
||||
const char* title //menu entry title
|
||||
int hMenu, //menu handle to add the new child menu to
|
||||
int hEntry, //plugin-wide identifier for the menu entry
|
||||
const char* title //menu entry title
|
||||
);
|
||||
|
||||
Parameters
|
||||
|
||||
@@ -6,7 +6,7 @@ This function adds a new child menu to a menu.
|
||||
::
|
||||
|
||||
bool _plugin_menuaddseparator(
|
||||
int hMenu //menu handle to add the separator to
|
||||
int hMenu //menu handle to add the separator to
|
||||
);
|
||||
|
||||
Parameters
|
||||
|
||||
@@ -4,8 +4,8 @@ This function removes all entries and child menus from a menu. It will not remov
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_menuclear (
|
||||
int hMenu //menu handle of the menu to clear
|
||||
bool _plugin_menuclear(
|
||||
int hMenu //menu handle of the menu to clear
|
||||
);
|
||||
|
||||
Parameters
|
||||
|
||||
@@ -4,10 +4,10 @@ This function sets the checked state of a menu entry. Notice that this function
|
||||
|
||||
::
|
||||
|
||||
void _plugin_menuentrysetchecked (
|
||||
int pluginHandle, //plugin handle
|
||||
int hEntry, //handle of the menu entry
|
||||
bool checked //new checked state
|
||||
void _plugin_menuentrysetchecked(
|
||||
int pluginHandle, //plugin handle
|
||||
int hEntry, //handle of the menu entry
|
||||
bool checked //new checked state
|
||||
);
|
||||
|
||||
Parameters
|
||||
|
||||
@@ -4,10 +4,10 @@ This function sets an icon to a menu entry.
|
||||
|
||||
::
|
||||
|
||||
void _plugin_menuentryseticon (
|
||||
int pluginHandle, //plugin handle
|
||||
int hEntry, //handle of the menu entry
|
||||
const ICONDATA* icon //icon data
|
||||
void _plugin_menuentryseticon(
|
||||
int pluginHandle, //plugin handle
|
||||
int hEntry, //handle of the menu entry
|
||||
const ICONDATA* icon //icon data
|
||||
);
|
||||
|
||||
Parameters
|
||||
|
||||
@@ -4,9 +4,9 @@ This function sets an icon to a menu.
|
||||
|
||||
::
|
||||
|
||||
void _plugin_menuseticon (
|
||||
int hMenu, //handle of the menu
|
||||
const ICONDATA* icon //icon data
|
||||
void _plugin_menuseticon(
|
||||
int hMenu, //handle of the menu
|
||||
const ICONDATA* icon //icon data
|
||||
);
|
||||
|
||||
Parameters
|
||||
|
||||
@@ -6,9 +6,9 @@ This function registers an event callback for a plugin. Every plugin can have it
|
||||
::
|
||||
|
||||
void _plugin_registercallback(
|
||||
int pluginHandle, //plugin handle
|
||||
CBTYPE cbType, //event type
|
||||
CBPLUGIN cbPlugin //callback function
|
||||
int pluginHandle, //plugin handle
|
||||
CBTYPE cbType, //event type
|
||||
CBPLUGIN cbPlugin //callback function
|
||||
);
|
||||
|
||||
----------
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
|
||||
=======================
|
||||
_plugin_registercommand
|
||||
=======================
|
||||
This function registers a command for usage inside scripts or the command bar.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_registercommand(
|
||||
int pluginHandle, //plugin handle
|
||||
const char* command, //command name
|
||||
CBPLUGINCOMMAND cbCommand, //function that is called when the command is executed
|
||||
bool debugonly //restrict the command to debug-only
|
||||
);
|
||||
|
||||
----------
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
|
||||
:command: Command name.
|
||||
|
||||
:cbCommand: Callback with the following typedef:
|
||||
|
||||
::
|
||||
|
||||
bool CBPLUGINCOMMAND(
|
||||
int argc //argument count (number of arguments + 1)
|
||||
char* argv[] //array of arguments (argv[0] is the full command, arguments start at argv[1])
|
||||
);
|
||||
|
||||
:debugonly: When set, the command will never be executed when there is no target is being debugged.
|
||||
|
||||
-------------
|
||||
Return Values
|
||||
-------------
|
||||
This function returns true when the command was successfully registered, make sure to check this, other plugins may have already registered the same command.
|
||||
|
||||
=======================
|
||||
_plugin_registercommand
|
||||
=======================
|
||||
This function registers a command for usage inside scripts or the command bar.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_registercommand(
|
||||
int pluginHandle, //plugin handle
|
||||
const char* command, //command name
|
||||
CBPLUGINCOMMAND cbCommand, //function that is called when the command is executed
|
||||
bool debugonly //restrict the command to debug-only
|
||||
);
|
||||
|
||||
----------
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
|
||||
:command: Command name.
|
||||
|
||||
:cbCommand: Callback with the following typedef:
|
||||
|
||||
::
|
||||
|
||||
bool CBPLUGINCOMMAND(
|
||||
int argc //argument count (number of arguments + 1)
|
||||
char* argv[] //array of arguments (argv[0] is the full command, arguments start at argv[1])
|
||||
);
|
||||
|
||||
:debugonly: When set, the command will never be executed when there is no target is being debugged.
|
||||
|
||||
-------------
|
||||
Return Values
|
||||
-------------
|
||||
This function returns true when the command was successfully registered, make sure to check this, other plugins may have already registered the same command.
|
||||
@@ -0,0 +1,34 @@
|
||||
============================
|
||||
_plugin_registerexprfunction
|
||||
============================
|
||||
This function registers an expression function defined by a plugin, so that users can use it in expressions. All arguments are integer type.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_registerexprfunction(
|
||||
int pluginHandle, //plugin handle
|
||||
const char* name, //name of expresison function
|
||||
int argc, //number of arguments
|
||||
CBPLUGINEXPRFUNCTION cbFunction, //callback function
|
||||
void* userdata //user data
|
||||
);
|
||||
|
||||
----------
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
:name: Name of expresison function.
|
||||
:argc: Number of arguments of expression function.
|
||||
:cbFunction: Callback with the following typdef:
|
||||
|
||||
::
|
||||
|
||||
typedef duint(*CBPLUGINEXPRFUNCTION)(int argc, const duint* argv, void* userdata);
|
||||
|
||||
:userdata: A pointer value passed to the callback, may be used by plugin to pass additional information.
|
||||
|
||||
-------------
|
||||
Return Values
|
||||
-------------
|
||||
Return true when the registration is successful, otherwise return false.
|
||||
@@ -0,0 +1,65 @@
|
||||
==============================
|
||||
_plugin_registerexprfunctionex
|
||||
==============================
|
||||
This function registers an expression function defined by a plugin, so that users can use it in expressions. Unlike :doc:`registerexprfunction`, this function can also register expression functions that process string argument types.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_registerexprfunctionex(
|
||||
int pluginHandle, //plugin handle
|
||||
const char* name, //name of expresison function
|
||||
const ValueType & returnType, //type of return value
|
||||
const ValueType* argTypes, //type of arguments
|
||||
size_t argc, //number of arguments
|
||||
CBPLUGINEXPRFUNCTIONEX cbFunction, //callback function
|
||||
void* userdata //user data
|
||||
);
|
||||
|
||||
----------
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
:name: Name of expresison function.
|
||||
:returnType: Type of return value. The definition of ValueType is:
|
||||
|
||||
::
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ValueTypeNumber,
|
||||
ValueTypeString,
|
||||
// Types below cannot be used for values, only for registration
|
||||
ValueTypeAny,
|
||||
ValueTypeOptionalNumber,
|
||||
ValueTypeOptionalString,
|
||||
ValueTypeOptionalAny,
|
||||
} ValueType;
|
||||
|
||||
:argTypes: Array of types of arguments
|
||||
:argc: Number of arguments of expression function.
|
||||
:cbFunction: Callback with the following typdef:
|
||||
|
||||
::
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char* ptr; // Should be allocated with BridgeAlloc
|
||||
bool isOwner; // When set to true BridgeFree will be called on ptr
|
||||
} StringValue;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ValueType type;
|
||||
duint number;
|
||||
StringValue string;
|
||||
} ExpressionValue;
|
||||
|
||||
typedef bool(*CBPLUGINEXPRFUNCTIONEX)(ExpressionValue* result, int argc, const ExpressionValue* argv, void* userdata);
|
||||
|
||||
:userdata: A pointer value passed to the callback, may be used by plugin to pass additional information.
|
||||
|
||||
-------------
|
||||
Return Values
|
||||
-------------
|
||||
Return true when the registration is successful, otherwise return false.
|
||||
@@ -0,0 +1,32 @@
|
||||
==============================
|
||||
_plugin_registerformatfunction
|
||||
==============================
|
||||
This function registers a format function defined by a plugin, so that users can use it in :doc:`../../../introduction/Formatting`.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_registerformatfunction(
|
||||
int pluginHandle, //plugin handle
|
||||
const char* type, //the name of format function
|
||||
CBPLUGINFORMATFUNCTION cbFunction, //callback function
|
||||
void* userdata //user data
|
||||
);
|
||||
|
||||
----------
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
:type: The name of format function. This is the part before `;` in a string format function. Valid names must begin with `_` or letters, followed by `_`, `.`, letters or digits.
|
||||
:cbFunction: Callback with the following typdef:
|
||||
|
||||
::
|
||||
|
||||
typedef FORMATRESULT(*CBPLUGINFORMATFUNCTION)(char* dest, size_t destCount, int argc, char* argv[], duint value, void* userdata);
|
||||
|
||||
:userdata: A pointer value passed to the callback, may be used by plugin to pass additional information.
|
||||
|
||||
-------------
|
||||
Return Values
|
||||
-------------
|
||||
Return `true` when the registration is successful, otherwise return `false`.
|
||||
@@ -0,0 +1,24 @@
|
||||
===================
|
||||
_plugin_startscript
|
||||
===================
|
||||
Creates a new thread to run the callback function asynchronously.
|
||||
|
||||
::
|
||||
|
||||
void _plugin_startscript(
|
||||
CBPLUGINSCRIPT cbScript //callback
|
||||
);
|
||||
|
||||
----------
|
||||
Parameters
|
||||
----------
|
||||
:cbScript: Callback with the following typedef:
|
||||
|
||||
::
|
||||
|
||||
typedef void (*CBPLUGINSCRIPT)();
|
||||
|
||||
-------------
|
||||
Return Values
|
||||
-------------
|
||||
This function does not return a value.
|
||||
@@ -1,43 +1,43 @@
|
||||
==========================
|
||||
_plugin_unregistercallback
|
||||
==========================
|
||||
This plugin unregisters a previously set callback. It is only possible to remove callbacks that were previously set using _plugin_registercallback.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_unregistercallback(
|
||||
int pluginHandle, //plugin handle
|
||||
CBTYPE cbType //callback type to remove
|
||||
);
|
||||
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
:cbType: The event type. This can be any of the following values:
|
||||
|
||||
* CB_INITDEBUG,
|
||||
* CB_STOPDEBUG,
|
||||
* CB_CREATEPROCESS,
|
||||
* CB_EXITPROCESS,
|
||||
* CB_CREATETHREAD,
|
||||
* CB_EXITTHREAD,
|
||||
* CB_SYSTEMBREAKPOINT,
|
||||
* CB_LOADDLL,
|
||||
* CB_UNLOADDLL,
|
||||
* CB_OUTPUTDEBUGSTRING,
|
||||
* CB_EXCEPTION,
|
||||
* CB_BREAKPOINT,
|
||||
* CB_PAUSEDEBUG,
|
||||
* CB_RESUMEDEBUG,
|
||||
* CB_STEPPED,
|
||||
* CB_ATTACH,
|
||||
* CB_DETACH,
|
||||
* CB_DEBUGEVENT,
|
||||
* CB_MENUENTRY,
|
||||
* CB_WINEVENT,
|
||||
* CB_WINEVENTGLOBAL
|
||||
|
||||
Return Values
|
||||
-------------
|
||||
This function returns true when the callback was removed without problems.
|
||||
==========================
|
||||
_plugin_unregistercallback
|
||||
==========================
|
||||
This plugin unregisters a previously set callback. It is only possible to remove callbacks that were previously set using _plugin_registercallback.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_unregistercallback(
|
||||
int pluginHandle, //plugin handle
|
||||
CBTYPE cbType //callback type to remove
|
||||
);
|
||||
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
:cbType: The event type. This can be any of the following values:
|
||||
|
||||
* CB_INITDEBUG,
|
||||
* CB_STOPDEBUG,
|
||||
* CB_CREATEPROCESS,
|
||||
* CB_EXITPROCESS,
|
||||
* CB_CREATETHREAD,
|
||||
* CB_EXITTHREAD,
|
||||
* CB_SYSTEMBREAKPOINT,
|
||||
* CB_LOADDLL,
|
||||
* CB_UNLOADDLL,
|
||||
* CB_OUTPUTDEBUGSTRING,
|
||||
* CB_EXCEPTION,
|
||||
* CB_BREAKPOINT,
|
||||
* CB_PAUSEDEBUG,
|
||||
* CB_RESUMEDEBUG,
|
||||
* CB_STEPPED,
|
||||
* CB_ATTACH,
|
||||
* CB_DETACH,
|
||||
* CB_DEBUGEVENT,
|
||||
* CB_MENUENTRY,
|
||||
* CB_WINEVENT,
|
||||
* CB_WINEVENTGLOBAL
|
||||
|
||||
Return Values
|
||||
-------------
|
||||
This function returns true when the callback was removed without problems.
|
||||
@@ -6,8 +6,8 @@ This function removes a command set by a plugin. It is only possible to remove c
|
||||
::
|
||||
|
||||
bool _plugin_unregistercommand(
|
||||
int pluginHandle, //plugin handle
|
||||
const char* command //command name
|
||||
int pluginHandle, //plugin handle
|
||||
const char* command //command name
|
||||
);
|
||||
|
||||
----------
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
==============================
|
||||
_plugin_unregisterexprfunction
|
||||
==============================
|
||||
This function removes an expression function registered by a plugin. It is only possible to remove commands that you previously registered using `_plugin_registerexprfunction` or `_plugin_registerexprfunctionex`.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_unregisterexprfunction(
|
||||
int pluginHandle, //plugin handle
|
||||
const char* name //expression function name
|
||||
);
|
||||
|
||||
----------
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
:name: Expression function name.
|
||||
|
||||
-------------
|
||||
Return Values
|
||||
-------------
|
||||
This function returns true when the callback was removed without problems.
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
================================
|
||||
_plugin_unregisterformatfunction
|
||||
================================
|
||||
This function removes a string format function registered by a plugin. It is only possible to remove commands that you previously registered using `_plugin_registerformatfunction`.
|
||||
|
||||
::
|
||||
|
||||
bool _plugin_unregisterformatfunction(
|
||||
int pluginHandle, //plugin handle
|
||||
const char* type //string format function name
|
||||
);
|
||||
|
||||
----------
|
||||
Parameters
|
||||
----------
|
||||
|
||||
:pluginHandle: Handle of the calling plugin.
|
||||
:type: String format function name.
|
||||
|
||||
-------------
|
||||
Return Values
|
||||
-------------
|
||||
This function returns `true` when the string format function was removed without problems.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# x64dbg trace file format specification
|
||||
x64dbg trace file is a binary file that contains all information about program execution. Each trace file is composed of 3 parts: **Magic word**, **JSON header** and **binary trace blocks**. x64dbg trace file is little-endian.
|
||||
x64dbg trace file is a binary file that contains all information about program execution. Each trace file is composed of 3 parts: **Magic word**, **JSON header** and **binary trace blocks**. x64dbg trace file is little-endian.
|
||||
## Magic word
|
||||
Every trace file will begin with 4 bytes, "TRAC" (encoded in ASCII).
|
||||
## Header
|
||||
@@ -54,14 +54,14 @@ typedef struct
|
||||
} REGDUMP;
|
||||
```
|
||||
|
||||
For example, `ccx` is the second member of regcontext. On x64 architecture, it is at byte offset 8 and on x86 architecture it is at byte offset 4. On both architecture, it is at index 1 and `cax` is at index 0. Therefore, when `RegisterChangePosition[0]` = 0, `RegisterChangeNewData[0]` contains the new value of `cax`. If `RegisterChangePosition[1]` = 0, `RegisterChangeNewData[1]` contains the new value of `ccx`, since the absolute index is computed by 0+0+1=1. The use of relative indexing helps achieve better data compression if a lossless compression is then applied to trace file, and also allow future expansion of `REGDUMP` structure without increasing size of `RegisterChanges` and `RegisterChangePosition` beyond a byte. Note: the file reader can locate the address of the instruction using `cip` register in this structure.
|
||||
For example, `ccx` is the second member of `regcontext`. On x64 architecture, it is at byte offset 8 and on x86 architecture it is at byte offset 4. On both architectures, it is at index 1 and `cax` is at index 0. Therefore, when `RegisterChangePosition[0]` = 0, `RegisterChangeNewData[0]` contains the new value of `cax`. If `RegisterChangePosition[1]` = 0, `RegisterChangeNewData[1]` contains the new value of `ccx`, since the absolute index is computed by 0+0+1=1. The use of relative indexing helps achieve better data compression if a lossless compression is then applied to trace file, and also allow future expansion of `REGDUMP` structure without increasing size of `RegisterChanges` and `RegisterChangePosition` beyond a byte. Note: the file reader can locate the address of the instruction using `cip` register in this structure.
|
||||
|
||||
x64dbg will save all registers at the start of trace, and every 512 instructions(this number might be changed in future versions to have different tradeoff between speed and space). A block with all registers saved will have `RegisterChanges`=172 on 64-bit platform and 216 on 32-bit platform. This allows x64dbg trace file to be randomly accessed. x64dbg might be unable to open a trace file that has a sequence of instruction longer than an implementation-defined limit without all registers saved.
|
||||
x64dbg will save all registers at the start of trace, and every 512 instructions (this number might be changed in future versions to have different tradeoff between speed and space). A block with all registers saved will have `RegisterChanges`=172 on 64-bit platform and 216 on 32-bit platform. This allows x64dbg trace file to be randomly accessed. x64dbg might be unable to open a trace file that has a sequence of instruction longer than an implementation-defined limit without all registers saved.
|
||||
|
||||
`MemoryAccessFlags` is an array of bytes that indicates properties of memory access. Currently, only bit 0 is defined and all other bits are reserved and set to 0. When bit 0 is set, it indicates the memory is not changed(This could mean it is read, or it is overwritten with identical value), so `MemoryAccessNewData` will not have an entry for this memory access. The file reader may use a disassembler to determine the true type of memory access.
|
||||
`MemoryAccessFlags` is an array of bytes that indicates properties of memory access. Currently, only bit 0 is defined and all other bits are reserved and set to 0. When bit 0 is set, it indicates the memory is not changed (This could mean it is read, or it is overwritten with identical value), so `MemoryAccessNewData` will not have an entry for this memory access. The file reader may use a disassembler to determine the true type of memory access.
|
||||
|
||||
`MemoryAccessAddress` is an array of pointers that indicates the address of memory access.
|
||||
|
||||
`MemoryAccessOldData` is an array of pointer-sized integers that stores the old content of memory.
|
||||
|
||||
`MemoryAccessNewData` is an array of pointer-sized integers that stores the new content of memory.
|
||||
`MemoryAccessNewData` is an array of pointer-sized integers that stores the new content of memory.
|
||||
+3
-3
@@ -164,9 +164,9 @@ Animate command
|
||||
|
||||
Pop up a dialog to enter a command, and execute that command at a steady frequency.
|
||||
|
||||
------------
|
||||
Trace Record
|
||||
------------
|
||||
--------------
|
||||
Trace Coverage
|
||||
--------------
|
||||
|
||||
---------------------
|
||||
Undo last instruction
|
||||
|
||||
+1
-1
@@ -5,6 +5,6 @@ Graph view contains the control flow graph. When you use :doc:`../../commands/gu
|
||||
|
||||
There are two modes to show the control flow graph: Normal mode and overview mode.
|
||||
|
||||
In overview mode, the program will draw all the control flow graph within the window area, but not output the disassembly. When the first instruction is traced when trace record is enabled on this memory page, the whole basic block will be shown in a different color (Default is green).
|
||||
In overview mode, the program will draw all the control flow graph within the window area, but not output the disassembly. When the first instruction is traced when trace coverage is enabled on this memory page, the whole basic block will be shown in a different color (Default is green).
|
||||
|
||||
The graph view is now part of CPU view.
|
||||
@@ -0,0 +1,5 @@
|
||||
# Source
|
||||
|
||||
If available, the source view displays the source file corresponding to a specific instruction. The debugger won't automatically do this; instead, the user must right-click the desired instruction in the disassembly view and select "Open Source File."
|
||||
|
||||
To successfully load the source file, both the debug symbols (typically the PDB file) and the source file must be accessible. Additionally, the debug symbols need to be loaded before the source file.
|
||||
+4
-4
@@ -9,13 +9,13 @@ You can double-click on columns to perform quick operation:
|
||||
* Disassembly: follow in disassembly.
|
||||
* Comments: set comments.
|
||||
|
||||
## Start Run Trace
|
||||
## Start trace recording
|
||||
|
||||
To enable trace logging into trace view, you first enable it via "**Start Run Trace**" menu. It will pop up a dialog allowing you to save the recorded instructions into a file. The default location of this file is in the database directory.
|
||||
To enable trace logging into trace view, you first enable it via "**Start trace recording**" menu item. It will pop up a dialog allowing you to save the recorded instructions to a file. The default location of this file is in the database directory.
|
||||
|
||||
Once started, every instruction you stepped or traced will appear immediately in Trace view. Instructions executed while the debuggee is running or stepping over will not appear here.
|
||||
Once started, every instruction you stepped or traced will appear immediately in Trace view. If you let the application run the executed instructions will not be recorded.
|
||||
|
||||
## Stop Run Trace
|
||||
## Stop trace recording
|
||||
|
||||
This menu can stop recording instructions.
|
||||
|
||||
|
||||
+2
-1
@@ -13,4 +13,5 @@ This section describes the usage of the views in the user interface.
|
||||
Log
|
||||
Notes
|
||||
CallStack
|
||||
Trace
|
||||
Trace
|
||||
Source
|
||||
@@ -5,14 +5,13 @@ Welcome to x64dbg's documentation!
|
||||
Suggested reads
|
||||
---------------
|
||||
|
||||
If you came here because someone told you to read the manual, start by reading **all sections** of the :doc:`introduction <introduction/index>`.
|
||||
If you came here because someone told you to read the manual, start by reading **all sections** of the :doc:`introduction <introduction/index>`. See :doc:`commands <commands/index>` for an overview of the available commands and how they work (the arguments are **comma separated**).
|
||||
|
||||
**Contents:**
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
what
|
||||
introduction/index
|
||||
gui/index
|
||||
commands/index
|
||||
|
||||
@@ -6,19 +6,19 @@ This section describes the conditional breakpoint capability in x64dbg.
|
||||
|
||||
When a breakpoint is hit, x64dbg will do the following things:
|
||||
|
||||
- If the breakpoint is an exception breakpoint, set the system variable `$breakpointexceptionaddress` to the exception address;
|
||||
- Set the system variable `$breakpointexceptionaddress` to the address that triggered the breakpoint (memory location);
|
||||
- Increment the *hit counter*;
|
||||
- Set the system variable `$breakpointcounter` to the value of *hit counter*;
|
||||
- If *break condition* is set, evaluate the [expression](./Expressions.rst) (defaults to `1`);
|
||||
- If *break condition* is set, evaluate the [expression](./Expressions.md) (defaults to `1`);
|
||||
- If *fast resume* is set and *break condition* evaluated to `0`:
|
||||
- Resume execution of the debuggee (skip the next steps). This will also skip executing plugin callbacks and GUI updates.
|
||||
- If *log condition* is set, evaluate the [expression](./Expressions.rst) (defaults to `1`);
|
||||
- If *command condition* is set, evaluate the [expression](./Expressions.rst) (defaults to *break condition*);
|
||||
- If *log condition* is set, evaluate the [expression](./Expressions.md) (defaults to `1`);
|
||||
- If *command condition* is set, evaluate the [expression](./Expressions.md) (defaults to `1`);
|
||||
- If *break condition* evaluated to `1` (or any value other than '0'):
|
||||
- Print the standard log message; (if [the breakpoint is set to be silent](../commands/conditional-breakpoint-control/SetBreakpointSilent.md), standard log message is supressed.)
|
||||
- Execute plugin callbacks.
|
||||
- If *log text* is set and *log condition* evaluated to `1` (or any value other than '0'):
|
||||
- Format and print the *log text* (see [String Formatting](./Formatting.rst)).
|
||||
- Format and print the *log text* (see [String Formatting](./Formatting.md)).
|
||||
- If *command text* is set and *command condition* evaluated to `1`:
|
||||
- Set the system variable `$breakpointcondition` to the *break condition*;
|
||||
- Set the system variable `$breakpointlogcondition` to the *log condition*;
|
||||
@@ -29,13 +29,15 @@ When a breakpoint is hit, x64dbg will do the following things:
|
||||
|
||||
If any expression is invalid, the condition will be triggered (That is, an invalid expression as condition will cause the breakpoint to always break, log and execute command).
|
||||
|
||||
**Warning: All numbers in expressions are interpreted as hex by default!** For decimal use `.123`.
|
||||
|
||||
## Hit counter
|
||||
|
||||
A hit counter records how many times a breakpoint has been reached. It will be incremented unconditionally, even if fast resume is enabled on this breakpoint. It may be viewed at breakpoint view and reset with [ResetBreakpointHitCount](../commands/conditional-breakpoint-control/ResetBreakpointHitCount.md).
|
||||
|
||||
## Logging
|
||||
|
||||
The log can be formatted by x64dbg to log the current state of the program. See [formatting](./Formatting.rst) on how to format the log string.
|
||||
The log can be formatted by x64dbg to log the current state of the program. See [formatting](./Formatting.md) on how to format the log string.
|
||||
|
||||
## Notes
|
||||
|
||||
@@ -69,6 +71,10 @@ You should not use commands that can change the running state of the debuggee (s
|
||||
|
||||
*break condition*: `tid()==1C0`
|
||||
|
||||
**A conditional breakpoint which breaks only if ECX points to a UTF-16 string containing "foo"**
|
||||
|
||||
*break condition*: `strstr(utf16(ECX), "foo")`
|
||||
|
||||
## Comparison with Conditional Tracing
|
||||
|
||||
A conditional breakpoint can only pause the debuggee when it is executed. It cannot pause the debuggee when the breakpoint is not hit even if the condition is satisfied. If you don't know where the condition will become true, try [conditional tracing](./ConditionalTracing.md) instead!
|
||||
@@ -76,6 +82,6 @@ A conditional breakpoint can only pause the debuggee when it is executed. It can
|
||||
## See also
|
||||
|
||||
- [Conditional Breakpoint Control](../commands/conditional-breakpoint-control/index.rst)
|
||||
- [Expressions](./Expressions.rst)
|
||||
- [Expressions](./Expressions.md)
|
||||
- [Expression Functions](./Expression-functions.md)
|
||||
- [String Formatting](./Formatting.rst)
|
||||
- [String Formatting](./Formatting.md)
|
||||
Loaded 100 of 119 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user