|
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 |