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: MakeData
db -> dw -> dd -> float -> dq -> double -> dt -> packreal -> octa \;
^ |;
\---------<----------------<--------------<-----------------------/; Action name: Unhide
Action name: HideAll
Action name: ProcessPause
Action name: ThreadStepInto
Action name: ThreadRunToCursor
Action name: ThreadSetCurrentIp
Action name: ProcessStart
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. 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: ThreadStepOver
Action name: ProcessDetach
Action name: TakeSnapshot
Action name: Shell
Action name: SaveBaseSnap
Action name: Execute
"Export data" dialog can export binary data into different formats. Action name: SaveBase
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 width Action name: ExecuteLine
Action name: Quit
Action name: Abort
Action name: ResetUndo
Action name: Redo
Action name: MakeCode
Action name: MakeUnknown
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. Action name: DisableUndo
Action name: OpChar
Action name: OpSegment
mov ax, seg dseg Action name: ChangeSign
Action name: BitwiseNegate
Action name: SetOpType
int (*func)(int param1, char param2); Action name: MakeAnyName
Action name: CenterInWindow
set IDALOG=logfile Action name: ShowSnapMan
Action name: OpenBookmarks
Action name: ShowRegisters
Action name: ShowFlags
Action name: DelHiddenRange
Action name: UnhideAll
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: 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: ShowUserScreen
Action name: ManualRegions
Action name: RefreshMemcfg
Action name: Threads
- Running: the thread is running
- Ready: the thread is ready to run but the application has been suspended
- Suspended: the thread has been suspended by the user Action name: StackTrace
Action name: MakeArray
Action name: MakeName
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. - 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. 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: ManualOperand
Action name: Hide
Action name: ThreadRunUntilReturn
Action name: ProcessAttach
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: OpStackVariable
- 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. - 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). Specify whether the debugger will suspend when the exception occurs.
If 'Passed to' == application and the application handles
the exception successfully, the execution will not be suspended
regardless of the 'Suspend' value. Specify whether the exception will be passed to the application itself
or handled by the debugger. If the debugged program contains exception
handling code, it is better to select 'Application'. Warn
Show a warning message with the exception information.
Log
Instead of displaying a warning message, log to the output window the exception
information.
Silent
Do not show a warning message nor log to the output window. Action name: Modules
Action name: ProcessTerminate
ALL OPERANDS
----------- OPERAND VALUE RANGE
------------------- ... OPERANDS
------------ 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. Sets host and port to the default public server hosted by Hex-Rays.
No username or password is required. 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 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 NOT ... OPERANDS
--------------- NOT TYPED OPERANDS
----------------- APPLY ONLY IF POSSIBLE
---------------------Action name: MakeAlignment
Action name: ManualInstruction
Action name: ColorInstruction
Action name: ToggleBorder
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 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: WatchList
Action name: AddWatch
Action name: DelWatch
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);} 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 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: GraphFunc
Action name: CallFlow
Action name: ChartXrefsTo
Action name: ChartXrefsFrom
Action name: ChartXrefsUser
- VFT pointer must have the "__vftable" name
- VFT type must follow the "CLASSNAME_vtbl" pattern virtual int derived::b2();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 file 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
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: SetupDebugger
- Suspend on debugging start
If selected, the debugger will suspend directly once the debugging
starts.
- Evaluate event condition on exit
If selected, the debugger will evaluate the event condition immediately
before closing the debugging session (once we receive PROCESS_EXITED or
PROCESS_DETACHED event)
- Suspend on process entry point
If selected, the debugger will insert a temporary breakpoint
at the main entry point of the debugged application.
- Suspend on thread start/exit
If selected, the debugger will suspend if a new thread starts
or if an existing thread terminates.
- Suspend on library load/unload
If selected, the debugger will suspend if a new library is
loaded or if a previously loaded library is unloaded.
- Suspend on debugging message
If selected, the debugger will suspend if the debugged application
generates a message destined to the debugger. When one or more debug events (see above) are checked then this
option is used to specify a condition. In the following example,
the debugger will suspend the process whenever a module with the
name test.dll is loaded:
get_event_id() == LIB_LOADED && strstr(get_event_module_name(), "test.dll") != -1 - Segment modifications
If selected, the debugger will print information regarding
segment modifications (creation, deletion, or resizing of
segments) since the last event. Note that the debugger
doesn't continuously track segment modifications, but detects
those only if a debugging event occurs.
- Thread start/exit
If selected, the debugger will print a message if a new thread
starts or if an existing thread terminates.
- Library load/unload
if Selected, the debugger will print a message if a new library is
loaded or if a previously loaded library is unloaded.
- Breakpoint
If selected, the debugger will print a message if the debugged process
reaches a breakpoint.
- Debugging message
If selected, the debugger will print debugging messages from
the application. - Reconstruct the stack - Show debugger breakpoint instructions
If selected, the debugger will show breakpoint instructions inserted
by the debugger itself. This function is mainly useful if the user
wants to see the real content of the memory.
- Use hardware temporary breakpoints
If selected, IDA will try to use hardware breakpoints for the temporary
breakpoints used to implement the "step over" and "run to" functionality.
This feature is useful when debugging read-only or self-modifying code,
since it does not change the contents of the memory.
IDA will fall back to software breakpoints if the attempt to set a
hardware breakpoint fails.
- Autoload PDB files
If selected, IDA will invoke the PDB plugin to try to load PDB symbols
for every new module loaded into process.
- Set as just-in-time debugger
If changed from off to on, IDA will try to register itself as a
just-in-time debugger (invoked by the system in case of application
crashes) on dialog close. This button reloads the exception table from the exceptions.cfg
file.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: OpEnum
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:
-------------Action 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: 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)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.- 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.Action 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. - 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. \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.. 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: JumpEntryPoint . 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