IDA SDK
|
Used by switch_info_t::flags.
Macros | |
#define | SWI_SPARSE 0x00000001 |
sparse switch (value table present) More... | |
#define | SWI_V32 0x00000002 |
32-bit values in table | |
#define | SWI_J32 0x00000004 |
32-bit jump offsets | |
#define | SWI_VSPLIT 0x00000008 |
value table is split (only for 32-bit values) | |
#define | SWI_RESERVED 0x00000010 |
was: SWI_DEFAULT | |
#define | SWI_DEF_IN_TBL 0x00000020 |
default case is an entry in the jump table. More... | |
#define | SWI_JMP_INV 0x00000040 |
jumptable is inversed. More... | |
#define | SWI_SHIFT_MASK 0x00000180 |
use formula (element<<shift) + elbase to find jump targets | |
#define | SWI_ELBASE 0x00000200 |
elbase is present (otherwise the base of the switch More... | |
#define | SWI_JSIZE 0x00000400 |
jump offset expansion bit | |
#define | SWI_VSIZE 0x00000800 |
value table element size expansion bit | |
#define | SWI_SEPARATE 0x00001000 |
create an array of individual elements (otherwise separate items) | |
#define | SWI_SIGNED 0x00002000 |
jump table entries are signed | |
#define | SWI_CUSTOM 0x00004000 |
custom jump table. More... | |
#define | SWI_INDIRECT 0x00010000 |
value table elements are used as indexes into the jump table More... | |
#define | SWI_SUBTRACT 0x00020000 |
table values are subtracted from the elbase instead of being added | |
#define | SWI_HXNOLOWCASE 0x00040000 |
lowcase value should not be used by the decompiler (internal flag) | |
#define | SWI_STDTBL 0x00080000 |
custom jump table with standard table formatting. More... | |
#define | SWI_DEFRET 0x00100000 |
return in the default case (defjump==BADADDR) | |
#define | SWI_SELFREL 0x00200000 |
jump address is relative to the element not to ELBASE | |
#define | SWI_JMPINSN 0x00400000 |
jump table entries are insns. More... | |
#define | SWI_VERSION 0x00800000 |
the structure contains the VERSION member | |
#define SWI_SPARSE 0x00000001 |
sparse switch (value table present)
otherwise lowcase present
#define SWI_DEF_IN_TBL 0x00000020 |
default case is an entry in the jump table.
This flag is applicable in 2 cases: 1. The sparse indirect switch (i.e. a switch with a values table) <jump table="" size>=""> ==
+ 1. The default case entry is the last one in the table (or the first one in the case of an inversed jump table). 2. The switch with insns in the jump table. The default case entry is before the first entry of the table. See also the find_defjump_from_table() helper function.
#define SWI_JMP_INV 0x00000040 |
jumptable is inversed.
(last entry is for first entry in values table)
#define SWI_ELBASE 0x00000200 |
elbase is present (otherwise the base of the switch
segment will be used)
#define SWI_CUSTOM 0x00004000 |
custom jump table.
processor_t::create_switch_xrefs will be called to create code xrefs for the table. Custom jump table must be created by the module (see also SWI_STDTBL)
#define SWI_INDIRECT 0x00010000 |
value table elements are used as indexes into the jump table
(for sparse switches)
#define SWI_STDTBL 0x00080000 |
custom jump table with standard table formatting.
ATM IDA doesn't use SWI_CUSTOM for switches with standard table formatting. So this flag can be considered as obsolete.
#define SWI_JMPINSN 0x00400000 |
jump table entries are insns.
For such entries SHIFT has a different meaning. It denotes the number of insns in the entry. For example, 0 - the entry contains the jump to the case, 1 - the entry contains one insn like a 'mov' and jump to the end of case, and so on.