IDAPython 8.4
Loading...
Searching...
No Matches
ida_segregs Namespace Reference

Detailed Description

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
 

Function Documentation

◆ copy_sreg_ranges()

"void" copy_sreg_ranges ( * args)
Parameters
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()

◆ del_sreg_range()

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

Parameters
ea(C++: ea_t) start_ea of the deleted range
rg(C++: int) the segment register number
Returns
: success

◆ get_prev_sreg_range()

"bool" get_prev_sreg_range ( * args)
Note
: more efficient then get_sreg_range(reg, ea-1)
Parameters
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
Returns
: success

◆ get_sreg()

"sel_t" get_sreg ( * args)

This function uses segment register range and default segment register values stored in the segment structure.

Parameters
ea(C++: ea_t) linear address in the program
rg(C++: int) number of the segment register
Returns
: value of the segment register, BADSEL if value is unknown.

◆ get_sreg_range()

"bool" get_sreg_range ( * args)
Parameters
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
Returns
: success

◆ get_sreg_range_num()

"int" get_sreg_range_num ( * args)
Parameters
ea(C++: ea_t) any address in the range
rg(C++: int) the segment register number
Returns
: -1 if no range occupies the specified address. otherwise returns number of the specified range (0..get_srranges_qty()-1)

◆ get_sreg_ranges_qty()

"size_t" get_sreg_ranges_qty ( * args)
Parameters
rg(C++: int) the segment register number

◆ getn_sreg_range()

"bool" getn_sreg_range ( * args)
Parameters
out(C++: sreg_range_t *) segment register range
rg(C++: int) the segment register number
n(C++: int) number of range (0..qty()-1)
Returns
: success

◆ set_default_dataseg()

"void" set_default_dataseg ( * args)
Parameters
ds_sel(C++: sel_t)

◆ set_default_sreg_value()

"bool" set_default_sreg_value ( * args)
Parameters
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.
Returns
: success

◆ set_sreg_at_next_code()

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

Parameters
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

◆ split_sreg_range()

"bool" split_sreg_range ( * args)

This function is used when the IDP emulator detects that a segment register changes its value.

Parameters
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
Returns
: success

Variable Documentation

◆ R_cs

R_cs = _ida_segregs.R_cs

◆ R_ds

R_ds = _ida_segregs.R_ds

◆ R_es

R_es = _ida_segregs.R_es

◆ R_fs

R_fs = _ida_segregs.R_fs

◆ R_gs

R_gs = _ida_segregs.R_gs

◆ R_ss

R_ss = _ida_segregs.R_ss

◆ SR_auto

SR_auto = _ida_segregs.SR_auto

◆ SR_autostart

SR_autostart = _ida_segregs.SR_autostart

◆ SR_inherit

SR_inherit = _ida_segregs.SR_inherit

◆ SR_user

SR_user = _ida_segregs.SR_user