Module ida_segregs
Functions that deal with the segment registers.
If your processor doesn't use segment registers, then these functions are of no
use for you. However, you should define two virtual segment registers - CS and
DS (for code segment and data segment) and specify their internal numbers in the
LPH structure (processor_t::reg_code_sreg and processor_t::reg_data_sreg).
Global variables
var R_cs
-
R_cs = 30
var R_ds
-
R_ds = 32
var R_es
-
R_es = 29
var R_fs
-
R_fs = 33
var R_gs
-
R_gs = 34
var R_ss
-
R_ss = 31
var SR_auto
-
the value is determined by IDA
var SR_autostart
-
used as SR_auto for segment starting address
var SR_inherit
-
the value is inherited from the previous range
var SR_user
-
the value is specified by the user
Functions
def copy_sreg_ranges(*args) ‑> void
-
copy_sreg_ranges(dst_rg, src_rg, map_selector=False)Duplicate segment register ranges.dst_rg: (C++: int) number of destination segment registersrc_rg: (C++: int) copy ranges frommap_selector: (C++: bool) map selectors to linear addresses using sel2ea()
def del_sreg_range(*args) ‑> bool
-
del_sreg_range(ea, rg) -> boolDelete segment register range started at ea. When a segment register range is deleted, the previous range is extended to cover the empty space. The segment register range at the beginning of a segment cannot be deleted.ea: (C++: ea_t) start_ea of the deleted rangerg: (C++: int) the segment register numberreturn: success
def get_prev_sreg_range(*args) ‑> bool
-
get_prev_sreg_range(out, ea, rg) -> boolGet segment register range previous to one with address.note: more efficient then get_sreg_range(reg, ea-1)out: (C++: sreg_range_t *) segment register rangeea: (C++: ea_t) any linear address in the programrg: (C++: int) the segment register numberreturn: success
def get_sreg(*args) ‑> sel_t
-
get_sreg(ea, rg) -> sel_tGet value of a segment register. This function uses segment register range and default segment register values stored in the segment structure.ea: (C++: ea_t) linear address in the programrg: (C++: int) number of the segment registerreturn: value of the segment register, BADSEL if value is unknown.
def get_sreg_range(*args) ‑> bool
-
get_sreg_range(out, ea, rg) -> boolGet segment register range by linear address.out: (C++: sreg_range_t *) segment register rangeea: (C++: ea_t) any linear address in the programrg: (C++: int) the segment register numberreturn: success
def get_sreg_range_num(*args) ‑> int
-
get_sreg_range_num(ea, rg) -> intGet number of segment register range by address.ea: (C++: ea_t) any address in the rangerg: (C++: int) the segment register numberreturn: -1 if no range occupies the specified address. otherwise returns numberof the specified range (0..get_srranges_qty()-1)
def get_sreg_ranges_qty(*args) ‑> size_t
-
get_sreg_ranges_qty(rg) -> size_tGet number of segment register ranges.rg: (C++: int) the segment register number
def getn_sreg_range(*args) ‑> bool
-
getn_sreg_range(out, rg, n) -> boolGet segment register range by its number.out: (C++: sreg_range_t *) segment register rangerg: (C++: int) the segment register numbern: (C++: int) number of range (0..qty()-1)return: success
def set_default_dataseg(*args) ‑> void
-
set_default_dataseg(ds_sel)Set default value of DS register for all segments.ds_sel: (C++: sel_t)
def set_default_sreg_value(*args) ‑> bool
-
set_default_sreg_value(sg, rg, value) -> boolSet default value of a segment register for a segment.sg: (C++: segment_t *) pointer to segment structure if nullptr, then set the register forall segmentsrg: (C++: int) number of segment registervalue: (C++: sel_t) its default value. this value will be used by get_sreg() if valueof the register is unknown at the specified address.return: success
def set_sreg_at_next_code(*args) ‑> void
-
set_sreg_at_next_code(ea1, ea2, rg, value)Set the segment register value at the next instruction. This function is designed to be called from idb_event::sgr_changed handler in order to contain the effect of changing a segment register value only until the next instruction.It is useful, for example, in the ARM module: the modification of the T register does not affect existing instructions later in the code.ea1: (C++: ea_t) address to start to search for an instructionea2: (C++: ea_t) the maximal addressrg: (C++: int) the segment register numbervalue: (C++: sel_t) the segment register value
def split_sreg_range(*args) ‑> bool
-
split_sreg_range(ea, rg, v, tag, silent=False) -> boolCreate a new segment register range. This function is used when the IDP emulator detects that a segment register changes its value.ea: (C++: ea_t) linear address where the segment register will have a new value. ifea==BADADDR, nothing to do.rg: (C++: int) the number of the segment registerv: (C++: sel_t) the new value of the segment register. If the value is unknown, youshould specify BADSEL.tag: (C++: uchar) the register info tag. see Segment register range tagssilent: (C++: bool) if false, display a warning() in the case of failurereturn: success