IDAPython 8.4
|
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).
Classes | |
class | sreg_range_t |
Proxy of C++ sreg_range_t class. More... | |
Functions | |
"sel_t" | get_sreg (*args) |
get_sreg(ea, rg) -> sel_t Get value of a segment register. | |
"bool" | split_sreg_range (*args) |
split_sreg_range(ea, rg, v, tag, silent=False) -> bool Create a new segment register range. | |
"bool" | set_default_sreg_value (*args) |
set_default_sreg_value(sg, rg, value) -> bool Set default value of a segment register for a segment. | |
"void" | set_sreg_at_next_code (*args) |
set_sreg_at_next_code(ea1, ea2, rg, value) Set the segment register value at the next instruction. | |
"bool" | get_sreg_range (*args) |
get_sreg_range(out, ea, rg) -> bool Get segment register range by linear address. | |
"bool" | get_prev_sreg_range (*args) |
get_prev_sreg_range(out, ea, rg) -> bool Get segment register range previous to one with address. | |
"void" | set_default_dataseg (*args) |
set_default_dataseg(ds_sel) Set default value of DS register for all segments. | |
"size_t" | get_sreg_ranges_qty (*args) |
get_sreg_ranges_qty(rg) -> size_t Get number of segment register ranges. | |
"bool" | getn_sreg_range (*args) |
getn_sreg_range(out, rg, n) -> bool Get segment register range by its number. | |
"int" | get_sreg_range_num (*args) |
get_sreg_range_num(ea, rg) -> int Get number of segment register range by address. | |
"bool" | del_sreg_range (*args) |
del_sreg_range(ea, rg) -> bool Delete segment register range started at ea. | |
"void" | copy_sreg_ranges (*args) |
copy_sreg_ranges(dst_rg, src_rg, map_selector=False) Duplicate segment register ranges. | |
Variables | |
R_es = _ida_segregs.R_es | |
R_cs = _ida_segregs.R_cs | |
R_ss = _ida_segregs.R_ss | |
R_ds = _ida_segregs.R_ds | |
R_fs = _ida_segregs.R_fs | |
R_gs = _ida_segregs.R_gs | |
SR_inherit = _ida_segregs.SR_inherit | |
SR_user = _ida_segregs.SR_user | |
SR_auto = _ida_segregs.SR_auto | |
SR_autostart = _ida_segregs.SR_autostart | |
"void" copy_sreg_ranges | ( | * | args | ) |
dst_rg | (C++: int) number of destination segment register |
src_rg | (C++: int) copy ranges from |
map_selector | (C++: bool) map selectors to linear addresses using sel2ea() |
"bool" del_sreg_range | ( | * | args | ) |
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 range |
rg | (C++: int) the segment register number |
"bool" get_prev_sreg_range | ( | * | args | ) |
out | (C++: sreg_range_t *) segment register range |
ea | (C++: ea_t) any linear address in the program |
rg | (C++: int) the segment register number |
"sel_t" get_sreg | ( | * | args | ) |
This function uses segment register range and default segment register values stored in the segment structure.
ea | (C++: ea_t) linear address in the program |
rg | (C++: int) number of the segment register |
"bool" get_sreg_range | ( | * | args | ) |
out | (C++: sreg_range_t *) segment register range |
ea | (C++: ea_t) any linear address in the program |
rg | (C++: int) the segment register number |
"int" get_sreg_range_num | ( | * | args | ) |
ea | (C++: ea_t) any address in the range |
rg | (C++: int) the segment register number |
"size_t" get_sreg_ranges_qty | ( | * | args | ) |
rg | (C++: int) the segment register number |
"bool" getn_sreg_range | ( | * | args | ) |
out | (C++: sreg_range_t *) segment register range |
rg | (C++: int) the segment register number |
n | (C++: int) number of range (0..qty()-1) |
"void" set_default_dataseg | ( | * | args | ) |
ds_sel | (C++: sel_t) |
"bool" set_default_sreg_value | ( | * | args | ) |
sg | (C++: segment_t *) pointer to segment structure if nullptr, then set the register for all segments |
rg | (C++: int) number of segment register |
value | (C++: sel_t) its default value. this value will be used by get_sreg() if value of the register is unknown at the specified address. |
"void" set_sreg_at_next_code | ( | * | args | ) |
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 instruction |
ea2 | (C++: ea_t) the maximal address |
rg | (C++: int) the segment register number |
value | (C++: sel_t) the segment register value |
"bool" split_sreg_range | ( | * | args | ) |
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. if ea==BADADDR, nothing to do. |
rg | (C++: int) the number of the segment register |
v | (C++: sel_t) the new value of the segment register. If the value is unknown, you should specify BADSEL. |
tag | (C++: uchar) the register info tag. see Segment register range tags |
silent | (C++: bool) if false, display a warning() in the case of failure |
R_cs = _ida_segregs.R_cs |
R_ds = _ida_segregs.R_ds |
R_es = _ida_segregs.R_es |
R_fs = _ida_segregs.R_fs |
R_gs = _ida_segregs.R_gs |
R_ss = _ida_segregs.R_ss |
SR_auto = _ida_segregs.SR_auto |
SR_autostart = _ida_segregs.SR_autostart |
SR_inherit = _ida_segregs.SR_inherit |
SR_user = _ida_segregs.SR_user |