Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Action name: Shell
Action name: SaveBaseSnap
Action name: MakeData
db -> dw -> dd -> float -> dq -> double -> dt -> packreal -> octa \;
^ |;
\---------<----------------<--------------<-----------------------/; Action name: OpSegment
mov ax, seg dseg "Export data" dialog can export binary data into different formats. Action name: OpEnum
Action name: SaveBase
Action name: Quit
Action name: Execute
Action name: ChangeSign
Action name: ExecuteLine
Action name: OpChar
Action name: DisableUndo
Action name: HideAll
Action name: OpenBookmarks
Action name: ProcessTerminate
Action name: ProcessStart
Action name: ShowSnapMan
Action name: SetupHidden
This option hides the functions recognized by FLIRT.
If will have an effect only from the time when the option is set. If this option is set, IDA will display all the instructions
as unhidden even if they were hidden. Action name: DelHiddenRange
Action name: ProcessPause
Action name: MakeAnyName
Action name: MakeCode
Action name: ManualOperand
Action name: ShowFlags
Action name: ShowRegisters
Action name: CenterInWindow
Action name: ThreadStepOver
Action name: ThreadRunUntilReturn
Action name: MakeUnknown
Action name: BitwiseNegate
offset target + delta - offset base - type (OFF16, OFF32, LOW16, etc.)
- base
- optional target
- optional delta from target operand_value = target + delta - base
or (the same relationship in a different form):
target = operand_value - delta + base Action name: ThreadRunToCursor
Action name: UnhideAll
- Assembler level types
- C level types In the struct/enum view:
Assembler level types are displayed using regular colors.
C level types are displayed in gray, as if they are disabled (but they are not).
In the local types view:
C level types are displayed using regular colors.
Assembler level types are displayed in gray, as if they are disabled (but they are not). Action name: Debugger
- the first box (on the left) indicates the current value of the register.
Blue indicates that the value has changed since the last debugging event.
Purple indicates that the value has been modified by the user.
A popup menu is available on this control, offering different commands.
- the second box (on the right) shows the current value of the register,
interpreted like an address (if possible). Action name: SetOpType
int (*func)(int param1, char param2); Action name: Unhide
set IDALOG=logfile Action name: ThreadSetCurrentIp
Action name: ShowUserScreen
ALL OPERANDS
----------- OPERAND VALUE RANGE
------------------- ... OPERANDS
------------ Action name: MakeStrlit
If this options is set, IDA will display all the functions
as unhidden even if they were hidden. If this options is set, IDA will display all the segments
as unhidden even if they were hidden. 8-bit full offset :
16-bit full offset :
32-bit full offset :
The full offsets are regular offset expressions like
offset label
They can occupy 8, 16, or 32 bits.
You have to specify the offset base for these offsets.
low 8 bits of 16-bit offset :
Only the low 8 bits of the offset. IDA will represent them as
(offset label) & 0xFF
low 16 bits of 32-bit offset :
Only the low 16 bits of the offset. IDA will represent them as
(offset label) & 0xFFFF
high 8 bits of 16-bit offset :
Only the high 8 bits of the offset. IDA will represent them as
offset label >> 8
high 16 bits of 32-bit offset:
Only the high 17 bits of the offset. IDA will represent them as
offset label >> 16 NOT ... OPERANDS
--------------- NOT TYPED OPERANDS
----------------- APPLY ONLY IF POSSIBLE
--------------------- Action name: OpStackVariable
Action name: Hide
Action name: ResetUndo
Action name: ProcessDetach
Action name: Undo
UNDO_MAXSIZE max size of undo buffers; default: 128MB
once this limit is reached, the undo info about the oldest
user action will be forgotten.
UNDO_DEPTH max number of user actions to remember; default: 1000000
if set to 0, the undo feature will be unavailable. Sets host and port to the default public server hosted by Hex-Rays.
No username or password is required. Action name: SetupProcess
Host application to launch.
When the debugging target (== 'input file') is an executable file, this field is equal to the 'input file'.
If this field is wrong, IDA will not be able to launch the program.
For remoting debugging, this field denotes a remote file. - red: means that the arrow source and destination do not
belong to the same function. Usually, the branches are
within functions and the red color will conspicuously
represent branches from or to different functions.
- black: the currently selected arrow. The selection
is made by moving to the beginning or the end of the
arrow using the Up or Down keys or left-clicking on the arrow
start or the arrow end. The selection is
not changed by pressing the PageUp, PageDown, Home, End keys or using
the scrollbar. This allows to trace the selected arrow far away.
- grey: all other arrows - thick: a backward arrow. Backward arrows usually represent
loops. Thick arrows represent the loops in a clear and
notable manner.
- thin: forward arrows. Action name: ProcessAttach
Action name: Redo
Action name: ThreadStepInto
Action name: MakeArray
Specifies how tall the hint window will be initially.
IDA may decide to display less lines than specified if the hint is
small. The user can resize the hint window using the mouse wheel. Milliseconds that pass before the hint appears when the user
hovers the mouse pointer over an identifier Permit to resize the hint window by using the mouse wheel.
Can be turned off if the user does not want to resize the hints. class A { virtual int f(); int data; };
class B : public A { virtual int g(); }; struct __cppobj A {A_vtbl *__vftable;int data;}
struct A_vtbl {int (*f)(A *__hidden this);}
struct __cppobj B : A {}
struct B_vtbl {int (*f)(A *__hidden this);
int (*g)(B *__hidden this);} Allows for setting the name/address and port of a private server.
If username and password credentials are needed, they can be specified here. Instructs IDA to fetch function metadata from the current Lumina server,
after the initial auto-analysis is complete. This helps with the recognition
of known functions stored in the database of the Lumina server. host: lumina server host
port: lumina server port
user: username for authentification on private lumina
pass: password for authentification on private lumina
proxy_host: proxy host
proxy_port: proxy port
proxy_user: username for authentification on proxy
proxy_pass: password for authentification on proxy -Osecondary_lumina:host=lumina.hex-rays.com:port=443Action name: MakeAlignment
Action name: ManualInstruction
Action name: ColorInstruction
Action name: ToggleBorder
The input file used to create the database.
For remoting debugging, this field denotes a remote file. Directory to start the application. If empty, then the current directory
will be used.
For remoting debugging, this field denotes a remote directory. Optional parameters to pass to the debugged application (or the host application)
when it starts. This field may be empty.
The standard input/output/error channels can be redirected using
the bash shell notations. for example: >output 2>&1 The port number of the remote server Optional password to protect your server from strangers connecting to
it and running arbitrary commands. The same password switch must be
specified on the remote server.Action name: GraphFunc
Action name: CallFlow
Action name: ChartXrefsTo
Action name: ChartXrefsFrom
Action name: ChartXrefsUser
- the address of the next item with a cross reference
- the address of the next user-defined name 0 place maximal number of items on a line
other value number of items on a line -1 do not align items
0 align automatically
other value width of each item
Signed elements: if checked, IDA treats all elements as signed numbers.
only meaningful for numbers (not for offsets and
segments and strings)
Display indexes: if checked, IDA will display the indexes of array
elements in the form of comments (0,1,2...)
Create as array: if not checked, IDA will create a separate item for
each array element. Useful for creating huge arrays.
If the box is unchecked when this command is
applied to string literals, IDA will create many
string literals instead of one big string. Hints will be disabled when the debugger is active. This may be
useful to speed of debugging: calculating hints for zero filled
ranges can be very expensive Highlight the current identifier everywhere on the screen.
IDA tries to determine if the current identifier denotes a register.
In this case it will highlight references to other parts of the
register. For example, if "AL" is highlighted, IDA will also highlight
"AH", "AX", and "EAX" (if the current processor is x86). If this option is set on, IDA will automatically
uncollapse hidden functions if the user decides to jump
to them. As soon as the user quits the function by pressing
Esc, the function is automatically collapsed again. If this option is set on, IDA will not redraw the
disassembly window if the jump target is already on the screen.
In this case, it will just move the cursor to the specified
address. This option leads to less screen redraws and
less jumpy behaviour. Specifies the number of entries in the drop-down menu for the 'Jump'
toolbar Specifies how many lines force automatic scrolling of the
disassembly view Specifies how fast the input caret blinks (in milleseconds).
Must be greater than or equal to 500, or zero.
Zero means to disable blinking class base1 { virtual int b1(); int data; };
class base2 { virtual int b2(); int data; };
class der2 : public base2 { virtual int b2(); int data; };
class derived : public base1, public der2 { virtual int d(); }; class derived size(20):
+---
0 | +--- (base class base1)
0 | | {vfptr}
4 | | data
| +---
8 | +--- (base class der2)
8 | | +--- (base class base2)
8 | | | {vfptr}
12 | | | data
| | +---
16 | | data
| +---
+--- struct __cppobj base1 {base1_vtbl *__vftable /*VFT*/;int data;};
struct /*VFT*/ base1_vtbl {int (*b1)(base1 *__hidden this);};
struct __cppobj base2 {base2_vtbl *__vftable /*VFT*/;int data;};
struct /*VFT*/ base2_vtbl {int (*b2)(base2 *__hidden this);};
struct __cppobj der2 : base2 {int data;};
struct /*VFT*/ der2_vtbl {int (*b2)(der2 *__hidden this);};
struct __cppobj derived : base1, der2 {};
struct /*VFT*/ derived_vtbl {int (*b1)(base1 *__hidden this);
int (*d)(derived *__hidden this);}; offset 0: derived_vtbl
offset 8: der2_vtbl - VFT pointer must have the "__vftable" name
- VFT type must follow the "CLASSNAME_vtbl" pattern virtual int derived::b2(); Action name: MakeName
Action name: MakeComment
Action name: MakeRptCmt
Action Name
------ ----
edit anterior lines MakeExtraLineA
edit posterior lines MakeExtraLineB Action name: MakeStructVar
Action name: ZeroStructOffset
xxx struc
a db ?
b db ?
c db ?
xxx ends
dloc xxx ?
Normally IDA displays references to it like this:
mov eax, offset dloc
mov eax, offset dloc.b
If you force IDA, then it displays member 'a':
mov eax, offset dloc.a
mov eax, offset dloc.b Action name: SelectUnionMember
xxx union
a db ?
b dw ?
c dd ?
ends xxx
dloc xxx ?
Normally, IDA displays references to "dloc" like this:
mov al, byte ptr dloc
mov eax, word ptr dloc
After using this command, IDA can display the union members:
mov al, dloc.b
mov eax, dloc.dAction name: CreateStructFromData
Action name: CopyFieldsToPointers
- change a byte
- change a word
- enter an assembler instruction (only for IBM PC)Action name: PatchByte, PatchWord
Action name: ApplyPatches
It is possible to enter a sequence of the following items:
- a number in the selected radix (hexadecimal, decimal or octal)
- a string constant: "string"
- a Unicode string constant: L"unicode string"
- a question mark '?' to ignore variable bytes CD 21 - bytes 0xCD, 0x21
21CD - bytes 0xCD, 0x21 (the order depends on the endiannes)
"Hello", 0 - the null terminated string "Hello"
L"Hello" - 'H', 0, 'e', 0, 'l', 0, 'l', 0, 'o', 0
B8 ? ? ? ? 90 - byte 0xB8, 4 bytes with any value, byte 0x90Action name: Assemble
mov ax, [counter] mov eax, offset name mov eax, name Action name: OpNumber
Action name: OpHex
Action name: OpDecimal
Action name: OpOctal
Action name: OpBinary
Action name: OpFloat
Action name: ToggleLeadingZeroes
and ecx, 40h and ecx, 00000040h The name is considered to be defined only in the current function.
Please note that IDA does not check the uniqueness of the local names
in the whole program. However, it does verify that the name is unique for the
function. You can declare a name as a public (global) name. If the current
assembler supports the "public" directive, IDA will use it.
Otherwise, the publicness of the name will be displayed as a comment. An autogenerated name will appear in a different color.
if the item is indefined, it will disappear automatically . You can declare a name as a weak name. If the current
assembler supports the "weak" directive, IDA will use it.
Otherwise, the weakness of the name will be displayed as a comment. If this flag is on, and if the specified name already exists,
IDA will try to variate the specified name by appending a suffix to it.Action name: WatchList
Action name: AddWatch
Action name: DelWatch








Action name: ProduceMap
- current segmentation
- list of names sorted by values Action name: ProduceAsm
Action name: ProduceInc
Action name: ProduceLst
Action name: ProduceExe
- MS DOS .exe
- MS DOS .com
- MS DOS .drv
- MS DOS .sys
- general binary
- Intel Hex Object Format
- MOS Technology Hex Object Format Action name: ProduceDiff
comment
filename
offset: oldval newval Action name: ProduceHtml
Action name: ProduceFuncGdl
Action name: ProduceCallGdl
Action name: DumpDatabase
- to protect your work from disasters
- to migrate information into new database formats of IDA. 1. to issue the 'Dump...' command for the old
database (using old version of IDA). You will
get an IDC file containing all information
from your old database.
2. to reload your database using new IDA with switch -x.
3. to compile and execute the IDC file with command
'Execute IDC file' (usually F2) Action name: ProduceHeader
Action name: DumpTypes
Action name: OpNumber
Action name: OpHex
Action name: OpDecimal
Action name: OpOctal
Action name: OpBinary
Action name: OpFloat
Action name: ToggleLeadingZeroes
and ecx, 40h and ecx, 00000040h
Action name: ReloadFile Action name: LoadFile
Action name: LoadIdsFile
- their names
- their ordinal number in the DLL
- an eventual informative comment
- the number of parameters passed on the stack
- the number of parameters purged when returning Action name: LoadDbgFile
- it works only under MS Windows
- it will load only PDBs compatible with the currently
installed IMAGEHLP.DLL Action name: LoadPdbFile
off : disable PDB
pdbida : uses Hex-rays in-house code to parse and load PDB files.
msdia : uses Microsoft DLLs to parse and load PDB files.
only available on Windows, for Linux/Macos you need to configure
win32_remote.exe or win64_remote64.exe server in cfg/pdb.cfg
fallback : fallback from pdbida to msdia for the old 2.0 format
nofallback : no fallback to msdia -Opdb:off Action name: LoadTdsFile
Action name: LoadSigFile
- open the signatures window
- press Ins to insert a signature file to the queue
- press Del to delete a signature file from the queue Action name: LoadHeaderFile
- only type declarations are allowed. The function definitions
in the input file are skipped
- not all C++ header files are not supported, only simple classes can
be parsed
- the compiler specific predefined macros are not defined,
you have to define them manually in the header fileAction name: JumpSuspicious
Action name: JumpCode
Action name: JumpData
Action name: JumpUnknown
Action name: JumpExplored
Action name: AskNextImmediate
mov al, -2 Action name: JumpImmediate
Action name: AskNextTextAction name: JumpText
Action name: AskBinaryText
"This is substring to search" 6A 10 35F2:106A db 'Hello',0Action name: JumpBinaryText
Action name: JumpNotFunction
Action name: SetDirection
Action name: FindAllSuspicious
Action name: JumpError
- reference to an unexisting address
- illegal offset base
- unprintable character constant
- invalid structure or enum reference
- and so on...Action name: FindAllErrors
Action name: OpOffset
Action name: OpOffsetCs
Action name: OpAnyOffset
Action name: OpUserOffset Treat the base address as a plain number
if checked, IDA will treat the base address as a number.
In this case, IDA will not create a cross-reference to it
and the base address will be printed as a number,
not as an offset expression.
Offset points past the main object
Offsets of this type point past an object end.
They do not cause an object created/deletion.
Use image base as offset base
These offsets are based on the image base.
There is no need to explicitly specify the offset base.
These offsets are displayed in a concise form:
rva func
instead of
offset func - imagebase
If you intend to reassemble the output file, execute the
following IDC statement:
set_inf_attr(INF_GENFLAGS, get_inf_attr(INF_GENFLAGS) & ~INFFL_ALLASM);
Subtract operand value
Use this option when the operand value should be substracted
from the base to get the target address. In this case the displayed
expression will be displayed as
offset base - target
instead of the usual
offset target - base
Signed operand
Use this option if the operand should be interpreted
as a signed value. This option is only available for OFF_REF8,
OFF_REF16, OFF_REF32 and OFF_REF64 offset types.
Operand value of 0 is invalid
If the operand value is 0, the value will be highlighted in red.
Operand value of NOT 0 is invalid
If the operand value is zero's complement (i.e. all bits are set),
the value will be highlighted in red.
For example a OFF_REF16 with an operand value of 0xFFFF would be invalid.
Use the current address as the offset base Action name: OpStructOffset
GUI version:
------------ Text version:
-------------Description:
The current item has an operand marked as an offset,
but IDA cannot find the offset base in the database.
Possible reason(s):
The database is probably corrupted.
This may occur if the database was corrupted and repaired. Description:
The current item has an operand marked as entered manually,
but IDA cannot find the manually entered string in the database.
Possible reason(s):
The database is corrupt.Should not happen!
Please inform the author if you encounter this problem.Description:
The current item is marked as referenced from other place(s) in the
program, but IDA cannot find any reference to it.
Possible reason(s):
The database is corrupt.Description:
Actually, this is not a problem. IDA warns you
that here it encountered an indirect jump and
couldn't follow the execution.
What to do:
Nothing, this entry is just for your informationDescription:
IDA cannot represent the specified bytes as an instruction. Description:
The current item (instruction or data) occupies more lines
on the screen than it is allowed by the current configuration.Description:
The value of the stack pointer at the end of the function is different
from its value at the start of the function. IDA checks for the
difference only if the function is ended by a "return" instruction.
The most probable cause is that stack tracing has failed.
This problem is displayed in the disassembly listing with
the "sp-analysis failed" comment.Description:
This is a generic problem message. IDA uses it when no more detailed
information is available or the problem is processor-specific. Description:
In fact, this is not exactly a problem: IDA collects all the locations
where it has decided to convert undefined bytes to
instructions or data even if they don't have
any references to them. We consider this decision as dangerous
and therefore we provide you with a way to examine all such places.
What to do:
Examine the result of conversion and modify the instructions
or data if IDA has made a wrong conversion.
Description:
This problem occurs when IDA has converted unexplored bytes to
instruction(s) and later found that the decision was wrong.
For example:
mov ax, bx
db 0FFh, 0FFh
0FFh, 0FFh cannot be converted to an instruction, therefore
the "mov" instruction cannot be here.
In this case, IDA automatically destroys the instruction(s)
and enlists the address as problematic.
What to do:
Examine the end result and modify it accordingly.Description:
It means that IDA recognized the function as coming
from a standard library but there already was another function
with the same name in the program.
What to do:
Examine the function and rename it as you wish. Description:
IDA matched code bytes against at least one
signature entry, but failed finding expected
cross-references at certain offsets in the code.
Consider the following .pat file contents:
5589E583EC18A1........890424E8........C9C3...................... 00 0000 0015 :0000 _test ^000F _my_fun0
5589E583EC18A1........890424E8........C9C3...................... 00 0000 0015 :0000 _smuk ^000F _my_fun1
Now, turn that .pat file into a signature (.sig) file, telling
sigmake to include function references into signature
(using the -r switch).
Then, apply that .sig file to a binary that you are
examining.
If IDA recognizes the 0x15-bytes long pattern in the binary, it
will check that, at offset 0xF from the start of the match,
a call to either "_my_fun0" or "_my_fun1" is performed.
If either one of the two is found, then that code will
be named "test", or "smuk", respectively.
Otherwise, a SIGFNREF problem will be signalled.
What to do:
Examine the code pointed to by the address at the given
offset (i.e., 0xF) and try and determine whether
that function could be "_my_fun0", or "_my_fun1".
If so, name it accordingly and re-apply the signature.
An alternative is to generate the signature (.sig)
file without the cross-references to functions
(i.e., dropping the '-r' switch).
But beware of collisions: a pattern like the
one above will inevitably create a collision, since the
pattern bytes are similar for the two entries.Action name: Breakpoints
Action name: BreakpointAdd
Action name: BreakpointEdit
The breakpoint location: either an absolute address, a symbol name,
a module+offset combination, or a source file name and a line number.
The exact location syntax depends on the breakpoint kind: absolute, module
relative, symbolic, or source code. Enabled:
If the breakpoint is enabled or disabled. Disabled breakpoints
are not written to the debugged process.
Hardware:
If enabled, IDA will use a hardware breakpoint. The breakpoint
mode and size must be specified for them (see below).
Module relative:
The breakpoint location is stored as a combination of a module
name and an offset. This kind of breakpoint is useful for
DLLs that are loaded to various addresses because their addresses
cannot be calculated in advance. Example: kernel32+0x1234
Symbolic:
The breakpoint location is stored as a combination of a symbol
name and a possible offset. This kind of breakpoint is useful for
symbols that can be imported from different DLLs because their addresses
cannot be calculated in advance. Example: myfunc+44
Source code:
The breakpoint location is stored as a combination of a source file
name and a line number. Can be used only if the source code of the
debugged application is available. Example: myfile.cpp:55 Break:
Suspend the debugged application
Trace:
Add a new entry to the trace log Enable tracing:
Enable tracing when the breakpoint hits. This is different from trace
breakpoints (where only a new entry is added to the trace log).
Disable tracing:
Disable tracing when the breakpoint fires. The access type the breakpoint will react: read/write, write, execute. - 2-byte breakpoints must be word-aligned.
- 4-byte breakpoints must be dword-aligned. - we want to be sure the memory is not modified by the debugger
(instruction breakpoints modify the debugged process memory).
- we want to detect accesses to data bytes.
- the specified address is write protected (really rare!).Action name: BreakpointDel
Page breakpoints are supported for both local and remote debugging
of 32 and 64bit applications. Page breakpoints are supported only for local debugging of 32-bit applications. Page breakpoints are supported for both of 32 and 64bit applications.
Page breakpoints in the bochs debugger are just like normal hardware
breakpoints but with no limit on the number of breakpoints or their size.
Please note that hardware breakpoints in the bochs debugger occur AFTER the
instruction is executed while regular page breakpoints occur BEFORE the
instruction is actually executed.Action name: BreakpointFind
If you enter an expression, the result will be used to determine whether
the selected actions are executed. Some examples of IDC expressions:
Check if EAX is equal to 5:
EAX==5
Check if the first argument to the function is 1:
get_wide_dword(ESP)==1
Interpret the second argument to the function as a pointer to Unicode string, print it,
and return 0 (so that the execution continues immediately):
msg("Filename: %s\n", get_strlit_contents(get_wide_dword(ESP+4), -1, STRTYPE_UNICODE)), 0
Set EAX to 0 and continue:
EAX=0,0 You can enter several statements in the multi-line editor. If the last one is a 'return' statement,
it is used as the result of the condition. Otherwise the condition is assumed to return 0. - in case of remote debugging, the condition is evaluated on the remote
computer. The following actions are bypassed:
- sending of the breakpoint event to the local computer
- switching from debthread to the main thread
- updating internal IDA structures and caches
- updating the screen
- in case of local debugging, the condition is evaluated at low level.
The following actions are bypassed:
- switching from debthread to the main thread
- updating internal IDA structures and caches
- updating the screen- read/write process registers
- read/write process memory
- file i/o
- auxiliary string and object functions
- msg() function (for debugging the breakpoint conditions) \x where x is non-alphanumeric is a literal x
\Q...\E treat enclosed characters as literal \a alarm, that is, the BEL character (hex 07)
\cx "control-x", where x is any ASCII printing character
\e escape (hex 1B)
\f form feed (hex 0C)
\n newline (hex 0A)
\r carriage return (hex 0D)
\t tab (hex 09)
\0dd character with octal code 0dd
\ddd character with octal code ddd, or backreference
\o{ddd..} character with octal code ddd..
\U "U" if PCRE2_ALT_BSUX is set (otherwise is an error)
\uhhhh character with hex code hhhh (if PCRE2_ALT_BSUX is set)
\xhh character with hex code hh
\x{hhh..} character with hex code hhh.. . any character except newline;
in dotall mode, any character whatsoever
\C one code unit, even in UTF mode (best avoided)
\d a decimal digit
\D a character that is not a decimal digit
\h a horizontal white space character
\H a character that is not a horizontal white space character
\N a character that is not a newline
\p{xx} a character with the xx property
\P{xx} a character without the xx property
\R a newline sequence
\s a white space character
\S a character that is not a white space character
\v a vertical white space character
\V a character that is not a vertical white space character
\w a "word" character
\W a "non-word" character
\X a Unicode extended grapheme cluster C Other
Cc Control
Cf Format
Cn Unassigned
Co Private use
Cs Surrogate
L Letter
Ll Lower case letter
Lm Modifier letter
Lo Other letter
Lt Title case letter
Lu Upper case letter
L& Ll, Lu, or Lt
M Mark
Mc Spacing mark
Me Enclosing mark
Mn Non-spacing mark
N Number
Nd Decimal number
Nl Letter number
No Other number
P Punctuation
Pc Connector punctuation
Pd Dash punctuation
Pe Close punctuation
Pf Final punctuation
Pi Initial punctuation
Po Other punctuation
Ps Open punctuation
S Symbol
Sc Currency symbol
Sk Modifier symbol
Sm Mathematical symbol
So Other symbol
Z Separator
Zl Line separator
Zp Paragraph separator
Zs Space separator Xan Alphanumeric: union of properties L and N
Xps POSIX space: property Z or tab, NL, VT, FF, CR
Xsp Perl space: property Z or tab, NL, VT, FF, CR
Xuc Univerally-named character: one that can be
represented by a Universal Character Name
Xwd Perl word: property Xan or underscore [...] positive character class
[^...] negative character class
[x-y] range (can be used for hex characters)
[[:xxx:]] positive POSIX named set
[[:^xxx:]] negative POSIX named set
alnum alphanumeric
alpha alphabetic
ascii 0-127
blank space or tab
cntrl control character
digit decimal digit
graph printing, excluding space
lower lower case letter
print printing, including space
punct printing, excluding alphanumeric
space white space
upper upper case letter
word same as \w
xdigit hexadecimal digit ? 0 or 1, greedy
?+ 0 or 1, possessive
?? 0 or 1, lazy
* 0 or more, greedy
*+ 0 or more, possessive
*? 0 or more, lazy
+ 1 or more, greedy
++ 1 or more, possessive
+? 1 or more, lazy
{n} exactly n
{n,m} at least n, no more than m, greedy
{n,m}+ at least n, no more than m, possessive
{n,m}? at least n, no more than m, lazy
{n,} n or more, greedy
{n,}+ n or more, possessive
{n,}? n or more, lazy \b word boundary
\B not a word boundary
^ start of subject
also after an internal newline in multiline mode
(after any newline if PCRE2_ALT_CIRCUMFLEX is set)
\A start of subject
$ end of subject
also before newline at end of subject
also before internal newline in multiline mode
\Z end of subject
also before newline at end of subject
\z end of subject
\G first matching position in subject \K reset start of match expr|expr|expr... (...) capturing group
(?<name>...) named capturing group (Perl)
(?'name'...) named capturing group (Perl)
(?P<name>...) named capturing group (Python)
(?:...) non-capturing group
(?|...) non-capturing group; reset group numbers for
capturing groups in each alternative (?>...) atomic, non-capturing group (?#....) comment (not nestable) (?i) caseless
(?J) allow duplicate names
(?m) multiline
(?s) single line (dotall)
(?U) default ungreedy (lazy)
(?x) extended (ignore white space)
(?-...) unset option(s) (*LIMIT_RECURSION=d) set the recursion limit to d (decimal number)
(*NOTEMPTY) set PCRE2_NOTEMPTY when matching
(*NOTEMPTY_ATSTART) set PCRE2_NOTEMPTY_ATSTART when matching
(*NO_AUTO_POSSESS) no auto-possessification (PCRE2_NO_AUTO_POSSESS)
(*NO_DOTSTAR_ANCHOR) no .* anchoring (PCRE2_NO_DOTSTAR_ANCHOR)
(*NO_JIT) disable JIT optimization
(*NO_START_OPT) no start-match optimization (PCRE2_NO_START_OPTIMIZE)
(*UTF) set appropriate UTF mode for the library in use
(*UCP) set PCRE2_UCP (use Unicode properties for \d etc) (*CR) carriage return only
(*LF) linefeed only
(*CRLF) carriage return followed by linefeed
(*ANYCRLF) all three of the above
(*ANY) any Unicode newline sequence (*BSR_ANYCRLF) CR, LF, or CRLF
(*BSR_UNICODE) any Unicode newline sequence (?=...) positive look ahead
(?!...) negative look ahead
(?<=...) positive look behind
(?<!...) negative look behind \n reference by number (can be ambiguous)
\gn reference by number
\g{n} reference by number
\g{-n} relative reference by number
\k<name> reference by name (Perl)
\k'name' reference by name (Perl)
\g{name} reference by name (Perl)
\k{name} reference by name (.NET)
(?P=name) reference by name (Python) (?R) recurse whole pattern
(?n) call subpattern by absolute number
(?+n) call subpattern by relative number
(?-n) call subpattern by relative number
(?&name) call subpattern by name (Perl)
(?P>name) call subpattern by name (Python)
\g<name> call subpattern by name (Oniguruma)
\g'name' call subpattern by name (Oniguruma)
\g<n> call subpattern by absolute number (Oniguruma)
\g'n' call subpattern by absolute number (Oniguruma)
\g<+n> call subpattern by relative number (PCRE2 extension)
\g'+n' call subpattern by relative number (PCRE2 extension)
\g<-n> call subpattern by relative number (PCRE2 extension)
\g'-n' call subpattern by relative number (PCRE2 extension) (?(condition)yes-pattern)
(?(condition)yes-pattern|no-pattern)
(?(n) absolute reference condition
(?(+n) relative reference condition
(?(-n) relative reference condition
(?(<name>) named reference condition (Perl)
(?('name') named reference condition (Perl)
(?(name) named reference condition (PCRE2)
(?(R) overall recursion condition
(?(Rn) specific group recursion condition
(?(R&name) specific recursion condition
(?(DEFINE) define subpattern for reference
(?(VERSION[>]=n.m) test PCRE2 version
(?(assert) assertion condition (*ACCEPT) force successful match
(*FAIL) force backtrack; synonym (*F)
(*MARK:NAME) set name to be passed back; synonym (*:NAME) (*PRUNE) advance to next starting character
(*PRUNE:NAME) equivalent to (*MARK:NAME)(*PRUNE)
(*SKIP) advance to current matching position
(*SKIP:NAME) advance to position corresponding to an earlier
(*MARK:NAME); if not found, the (*SKIP) is ignored
(*THEN) local failure, backtrack to next alternation
(*THEN:NAME) equivalent to (*MARK:NAME)(*THEN) (?C) callout (assumed number 0)
(?Cn) callout with numerical data n
(?C"text") callout with string data Action name: JumpEnter
Action name: Return
Action name: UndoReturn
Action name: EmptyStack
Action name: JumpAsk
Action name: JumpFileOffset
Action name: JumpName
Action name: JumpSegment
Action name: JumpSegmentRegister
Action name: JumpQ
Action name: MarkPosition
Action name: JumpPosition
The following types exist:
o - offset, the address of the item is taken
r - read access
w - write access
t - textual referenced (used for manually specified operands)
i - informational (e.g. a derived class refers to its base class)
J - far (intersegment) jump
j - near (intrasegment) jump
P - far (intersegment) call
p - near (intrasegment) call
^ - ordinary flow
s - xref from a structure
m - xref from a structure member
k - xref from a stack variable For 'xrefs to' dialogs: where the reference comes from (source)
For 'xrefs from' dialogs: where the reference goes to (destination) Additional info about the cross referenceAction name: JumpXrefFrom
Action name: JumpOpXref
Action name: JumpFunction
Action name: JumpNextFunc
Action name: JumpPrevFunc
Action name: JumpEntryPointAction name: TracingWindow
Action name: ClearTrace
Action name: ToggleTraceInstructions
Action name: ToggleTraceFunctions
Action name: ToggleTraceBasicBlocks
Action name: WriteTraceAdd
Action name: ReadWriteTraceAdd
Action name: StackTrace
Action name: SetupTracing This setting indicates how many tracing events can fit in the trace buffer.
If the debugger must insert a new event and the buffer is full,
the oldest tracing event will be removed.
However, if you specify a size of 0, the buffer size isn't limited.
Notice that, for example, in the case of an instructions trace,
all executed instructions could be logged, which would quickly fill
up the memory! If a filename is specified, all future traced events will be appended to it. The directory were trace files for the current database will be saved. If not
specified, the IDB directory will be used. - Trace over debugger segments
If selected, the debugger will not go step by step in debugger segments
(segments not available in the database).
- Trace over library functions
If selected, the debugger will not go step by step in library functions.- Do not log already logged IP
If selected, already executed instructions will not be logged if
they are executed again.
- Skip loops
If selected, tracing will be temporarily disabled for some loops
constructs. - Highlight instructions in IDA views
If selected, recorded instructions will be displayed in IDA views (disassembly
views) with a different background color.
- Main color
The main background color for traced instructions.
- Diff color
The background color for the instructions recorded and being diffed against the
currently loaded trace. - Log if same IP
If selected, the debugger will also log all register modifications occurring
during the execution of prefixed instructions like REP MOVSB, ... - Log return instructions
If selected, the debugger will also log function returns.
If disabled, only function calls are logged. - Log basic block instructions
If selected, all instructions from the current basic block will be logged
and displayed in the 'Tracing' window, instead of only the last instruction of
the basic block.F9










Action name: CreateSegment
- the segment start address
- the segment end address (excluded from the range)
- the segment base VirtualAddress = LinearAddress - (SegmentBase << 4); start = (0xF000 << 4) + 0x1000 = 0xF1000
end = (0xF000 << 4) + 0x2000 = 0xF2000 VirtualAddress = LinearAddress - (SegmentBase << 4);
0x1000 = 0xF1000 - (base << 4); segment start address: 0xF1000
segment end address: 0xF2000
segment base: 0xF000Z80 case
-------- start = 0x20000
end = start + 0x4000 = 0x24000 VirtualAddress = LinearAddress - (SegmentBase << 4);
0x8000 = 0x20000 - (base << 4);
base << 4 = 0x20000 - 0x8000
base << 4 = 0x18000
base = 0x1800 segment start address: 0x20000
segment end address: 0x24000
segment base: 0x1800 segment start address: 0x200000
segment end address: 0x200C00
segment base: 0x20000 - a new selector is defined (5 -> 0x20000)
- a new segment is created. Its attributes:
start = 0x200000
end = 0x200C00
base = 5 VirtualAddress = LinearAddress - (SelectorValue(SegmentBase) << 4)
= 0x200000 - (SelectorValue(5) << 4)
= 0x200000 - (0x20000 << 4)
= 0x200000 - 0x200000
= 0Action name: KillSegment
CODE - Pure code
DATA - Pure data
CONST - Pure data
BSS - Uninitialized data
STACK - Uninitialized data
XTRN - Extern definitions segment Private. Do not combine with any
other program segment.
Public. Combine by appending at
an offset that meets the
alignment requirement.
Stack. Combine as for Public.
This combine type forces
byte alignment.
Common. Combine by overlay using
maximum size.Action name: MoveSegment
Fix up relocations
This option allows IDA to modify the references
to/from the relocated segment(s). If it is turned
off, the references might be wrong after the move.Action name: Rebase program
Fix up relocations
This option allows IDA to modify the references
to/from the relocated segment(s). If it is turned
off, the references might be wrong after the move.
Rebase the whole image
This option is accessible only if the whole program
is selected. It allows IDA to adjust internal
variables on the whole program. call 1000 call 500 A B start end
A 0000 1000
B 1000 2000
C 1000 2000
D 3000 4000
E 3000 4000 B: A
C: A
D: A B
E: A CAction name: SetSegmentRegisterDefault
Action name: SetSegmentRegister
.got
....
; gp points here
label: TOC: .toc
....
sometc: .tc sometc[tc], datachunk a (auto) - Created by IDA. May be changed by IDA afterwards.
u (by user) - Created by user. IDA will not change it. Name Segment name
Start Virtual start address
End Virtual end address (address past the end of the segment)
R 'R': readable, '.': not readable, '?':unknown
W 'W': writable, '.': not writable, '?':unknown
X 'X': executable, '.': not executable, '?':unknown
D 'D': debugger only, '.': regular
L 'L': created by loader, '.': no
Align Segment alignment
Base Segment base selector or address
Type Segment type
Class Segment class
AD Segment addressing widthAction name: WindowOpen
Action name: OpenExports
Action name: OpenImports
Action name: OpenFunctions
- function name
- segment that contains the function
- offset of the function within the segment
- function length in bytes
- size (in bytes) of local variables + saved registers
- size (in bytes) of arguments passed to the function R - function returns to the caller
F - far function
L - library function
S - static function
B - BP based frame. IDA will automatically convert
all frame pointer [BP+xxx] operands to stack
variables.
T - function has type information
= - Frame pointer is equal to the initial stack pointer
In this case the frame pointer points to the bottom of the frame
M - reserved
S - reserved
I - reserved
C - reserved
D - reserved
V - reservedAction name: OpenNames
L (dark blue) - library function
F (dark blue) - regular function
C (light blue) - instruction
A (dark green) - string literal
D (light green) - data
I (purple) - imported name Action name: OpenSignatures
- name of file with the signature
- state of signature:
- Planned: the signature will be applied
- Current: the signature is being applied
- Applied: the signature has been applied
- number of functions found using the signature
- description of the signatureAction name: ShowSegments
Action name: ShowSegmentRegisters
Action name: ShowSelectors
- jump to the paragraph pointed by the selector
- add a new selector
- delete selector (if it is not used by any segment)
- change selector value (this leads to reanalysis of all program)Action name: OpenXrefs
Action name: OpenLocalTypes
Action name: AddStruct
Action name: CopyStruct
Action name: DelStruct
Action name: ExpandStruct
Action name: ShrinkStruct
Action name: EditStruct
Action name: AddEnum
Action name: EditEnum
- name of enum
- its serial number (1,2...)
- representation of enum members 1 - the current enum becomes the first enum
2 - the current enum becomes the second enum
... Action name: DelEnum
Action name: AddConst
Action name: EditConst
Action name: DelConst
Action name: OpenProblems
Action name: OpenTypeLibraries
Action name: OpenStrings
If checked, IDA will ignore instruction/data definitions
and will try to treat them as strings. If it can build a string
with the length greater than the minimal length, the string
will be displayed in the list.
This setting is ignored if 'only defined strings' is on. Allows the user to specify the string types included in the list.
This setting is ignored if 'only defined strings' is on. The minimal length the string must have to be added to the list.Action name: OpenCallers
Action name: OpenNotepad
Action name: ShowUndoHistory
Action name: MakeFunction
- function start point is equal to the current cursor position;
- function end point is calculated by IDA. Action name: EditFunction
+------------------------------+
| function arguments |
+------------------------------+
| return address |
+------------------------------+
| saved registers (SI,DI,etc) |
+------------------------------+ <- BP
| local variables |
+------------------------------+ <- SP push ebp
lea ebp, [esp-78h]
sub esp, 588h
push ebx
push esi
lea eax, [ebp+74h]
+------------------------------+
| function arguments |
+------------------------------+
| return address |
+------------------------------+
| saved registers (SI,DI,etc) |
+------------------------------+ <- typical BP
| |
| |
| | <- actual BP
| local variables |
| |
| |
| |
+------------------------------+ <- SP lea eax, [ebp+78h+var_4] Action name: AppendFunctionTail
Action name: RemoveFunctionTail
Action name: DelFunction
Action name: FunctionEnd
Action name: OpenStackVariables
Action name: ChangeStackPointer
Action name: RenameRegister
Action name: SetType
int main(int argc, const char *argv[]); int __usercall func@<ebx>(int x, int y@<esi>); int __usercall runtime_memhash@<^12.4>(void *p@<^0.4>, int q@<^4.4>, int r@<^8.4>) - the return value must be in a register.
Exception: stack locations are accepted for the __golang and __usercall calling conventions.
- if the return type is 'void', the return location must not be specified
- if the argument location is not specified, it is assumed to be
on the stack; consequent stack locations are allocated for such arguments
- it is allowed to declare nested declarations, for example:
int **__usercall func16@<eax>(int *(__usercall *x)@<ebx>
(int, long@<ecx>, int)@<esi>);
Here the pointer "x" is passed in the ESI register;
The pointed function is a usercall function and expects its second
argument in the ECX register, its return value is in the EBX register.
The rule of thumb to apply in such complex cases is to specify the
the registers just before the opening brace for the parameter list.
- registers used for the location names must be valid for the current
processor; some registers are unsupported (if the register name is
generated on the fly, it is unsupported; inform us about such cases;
we might improve the processor module if it is easy)
- register pairs can be specified with a colon like <edx:eax> __attribute__((format(printf,2,3)))
int myprnt(int id, const char *format, ...); packed pack structure/union fields tightly, without gaps
aligned specify the alignment
noreturn declare as not returning function
ms_struct use microsoft layout for the structure/union
format possible formats: printf, scanf, strftime, strfmon struct mystruct
{
char buf[16];
int dummy;
int value; // <- myptr points here
double fval;
};
int *__shifted(mystruct,20) myptr; ADJ(myptr)->fval 00000000 struc_1 struc ; (sizeof=0xC)
00000000 c1 db ?
00000001 db ? ; undefined
00000002 s2 dw ?
00000004 c3 db ?
00000005 db ? ; undefined
00000006 db ? ; undefined
00000007 db ? ; undefined
00000008 i4 dd ?
0000000C struc_1 ends void myfunc(struc_1 s); RDI: c1, s2, and c3
RSI: i4 void __usercall myfunc(struc_1 s@<0:rdi.1, 2:rdi^2.2, 4:rdi^4.1, 8:rsi.4>); 1 byte at offset 0 of the argument is passed in the byte 0 of RDI
2 bytes at offset 2 of the argument are passed in the byte 1,2 of RDI
1 byte at offset 4 of the argument is passed in the byte 3 of RDI
4 bytes at offset 8 of the argument are passed starting from the byte 0 of RSI argoff:register^regoff.size argoff - offset within the argument
register - register name used to pass part of the argument
regoff - offset within the register
size - number of bytes argoff:^stkoff.size argoff - offset within the argument
stkoff - offset in the stack frame (the first stack argument is at offset 0)
size - number of bytes __enum(enum_name) enum myenum { A=0, B=1, C=3 };
short var __enum(myenum);
If `var` is equal to 1, it will be represented as "B" enum mybits __bitmask { INITED=1, STARTED=2, DONE=4 };
short var __enum(mybits);
If `var` is equal to 3, it will be represented as "INITED|STARTED" myenum var; // is 4 bytes, not 2 as aboveSyntax: __offset(type, base, tdelta, target)
__offset(type, base, tdelta)
__offset(type, base)
__offset(type|AUTO, tdelta)
__offset(type)
__off OFF8 8-bit full offset
OFF16 16-bit full offset
OFF32 32-bit full offset
OFF64 64-bit full offset
LOW8 low 8 bits of 16-bit offset
LOW16 low 16 bits of 32-bit offset
HIGH8 high 8 bits of 16-bit offset
HIGH16 high 16 bits of 32-bit offset RVAOFF based reference (rva)
PASTEND reference past an item
it may point to an nonexistent address
NOBASE forbid the base xref creation
implies that the base can be any value
nb: base xrefs are created only if the offset base
points to the middle of a segment
SUBTRACT the reference value is subtracted from the base value instead of
(as usual) being added to it
SIGNEDOP the operand value is sign-extended (only supported for
REF_OFF8/16/32/64)
NO_ZEROS an opval of 0 will be considered invalid
NO_ONES an opval of ~0 will be considered invalid
SELFREF the self-based reference __offset(type|AUTO, tdelta) A 64-bit offset based on the image base:
int var __offset(OFF64|RVAOFF);
A 32-bit offset based on 0 that may point to an non-existing address:
int var __offset(OFF32|PASTEND|AUTO);
A 32-bit offset based on 0x400000:
int var __offset(OFF32, 0x400000);
A simple zero based offset that matches the current application bitness:
int var __off; type *var; __strlit(strtype, "encoding")
__strlit(strtype, char1, char2, "encoding")
__strlit(strtype) C Zero terminated string, 8 bits per symbol
C_16 Zero terminated string, 16 bits per symbol
C_32 Zero terminated string, 32 bits per symbol
PASCAL Pascal string: 1 byte length prefix, 8 bits per symbol
PASCAL_16 Pascal string: 1 byte length prefix, 16 bits per symbol
LEN2 Wide Pascal string: 2 byte length prefix, 8 bits per symbol
LEN2_16 Wide Pascal string: 2 byte length prefix, 16 bits per symbol
LEN4 Delphi string: 4 byte length prefix, 8 bits per symbol
LEN4_16 Delphi string: 4 byte length prefix, 16 bits per symbol A zero-terminated string in windows-1252 encoding:
char array[10] __strlit(C,"windows-1252");
A zero-terminated string in utf-8 encoding:
char array[10] __strlit(C,"UTF-8"); __stroff(structname)
__stroff(structname, delta) An integer variable named `var` that hold an offset from the beginning of
the `mystruct` structure:
int var __stroff(mystruct);
If mystruct is defined like this:
struct mystruct
{
char a;
char b;
char c;
char d;
}
The value 2 will be represented as `mystruct.c` A structure offset with a delta:
int var __stroff(mystruct, 1);
The value 2 will be represented as `mystruct.d-1` __custom(dtid, fid) __tabform(flags)
__tabform(flags,lineitems)
__tabform(flags,lineitems,alignment)
__tabform(,lineitems,alignment)
__tabform(,,alignment) NODUPS do not use the `dup` keyword
HEX use hexadecimal numbers to show array indexes
OCT use octal numbers to show array indexes
BIN use binary numbers to show array indexes
DEC use decimal numbers to show array indexes Display the array in tabular form, 4 decimal numbers on a line, each number
taking 8 positions. Display indexes as comments in hexadecimal:
char array[16] __tabform(HEX,4,8) __dec;
A possible array may look like:
dd 50462976, 117835012, 185207048, 252579084; 0
dd 319951120, 387323156, 454695192, 522067228; 4
dd 589439264, 656811300, 724183336, 791555372; 8
dd 858927408, 926299444, 993671480,1061043516; 0Ch