IDAPython 9.0
|
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 ("ea_t" ea, "int" rg) |
get_sreg(ea, rg) -> sel_t Get value of a segment register. | |
"bool" | split_sreg_range ("ea_t" ea, "int" rg, "sel_t" v, "uchar" tag, "bool" silent=False) |
split_sreg_range(ea, rg, v, tag, silent=False) -> bool Create a new segment register range. | |
"bool" | set_default_sreg_value ("segment_t *" sg, "int" rg, "sel_t" value) |
set_default_sreg_value(sg, rg, value) -> bool Set default value of a segment register for a segment. | |
"void" | set_sreg_at_next_code ("ea_t" ea1, "ea_t" ea2, "int" rg, "sel_t" value) |
set_sreg_at_next_code(ea1, ea2, rg, value) Set the segment register value at the next instruction. | |
"bool" | get_sreg_range ("sreg_range_t" out, "ea_t" ea, "int" rg) |
get_sreg_range(out, ea, rg) -> bool Get segment register range by linear address. | |
"bool" | get_prev_sreg_range ("sreg_range_t" out, "ea_t" ea, "int" rg) |
get_prev_sreg_range(out, ea, rg) -> bool Get segment register range previous to one with address. | |
"void" | set_default_dataseg ("sel_t" ds_sel) |
set_default_dataseg(ds_sel) Set default value of DS register for all segments. | |
"size_t" | get_sreg_ranges_qty ("int" rg) |
get_sreg_ranges_qty(rg) -> size_t Get number of segment register ranges. | |
"bool" | getn_sreg_range ("sreg_range_t" out, "int" rg, "int" n) |
getn_sreg_range(out, rg, n) -> bool Get segment register range by its number. | |
"int" | get_sreg_range_num ("ea_t" ea, "int" rg) |
get_sreg_range_num(ea, rg) -> int Get number of segment register range by address. | |
"bool" | del_sreg_range ("ea_t" ea, "int" rg) |
del_sreg_range(ea, rg) -> bool Delete segment register range started at ea. | |
"void" | copy_sreg_ranges ("int" dst_rg, "int" src_rg, "bool" map_selector=False) |
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 | ( | "int" | dst_rg, |
"int" | src_rg, | ||
"bool" | map_selector = False ) |
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 | ( | "ea_t" | ea, |
"int" | rg ) |
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 | ( | "sreg_range_t" | out, |
"ea_t" | ea, | ||
"int" | rg ) |
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 | ( | "ea_t" | ea, |
"int" | rg ) |
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 | ( | "sreg_range_t" | out, |
"ea_t" | ea, | ||
"int" | rg ) |
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 | ( | "ea_t" | ea, |
"int" | rg ) |
ea | (C++: ea_t) any address in the range |
rg | (C++: int) the segment register number |
"size_t" get_sreg_ranges_qty | ( | "int" | rg | ) |
rg | (C++: int) the segment register number |
"bool" getn_sreg_range | ( | "sreg_range_t" | out, |
"int" | rg, | ||
"int" | n ) |
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 | ( | "sel_t" | ds_sel | ) |
ds_sel | (C++: sel_t) |
"bool" set_default_sreg_value | ( | "segment_t *" | sg, |
"int" | rg, | ||
"sel_t" | value ) |
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 | ( | "ea_t" | ea1, |
"ea_t" | ea2, | ||
"int" | rg, | ||
"sel_t" | value ) |
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 | ( | "ea_t" | ea, |
"int" | rg, | ||
"sel_t" | v, | ||
"uchar" | tag, | ||
"bool" | silent = False ) |
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 |