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

Detailed Description

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
 

Function Documentation

◆ copy_sreg_ranges()

"void" copy_sreg_ranges ( "int" dst_rg,
"int" src_rg,
"bool" map_selector = False )
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 ( "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.

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 ( "sreg_range_t" out,
"ea_t" ea,
"int" rg )
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 ( "ea_t" ea,
"int" rg )

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 or rg is not a segment register.

◆ get_sreg_range()

"bool" get_sreg_range ( "sreg_range_t" out,
"ea_t" ea,
"int" rg )
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 ( "ea_t" ea,
"int" rg )
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 ( "int" rg)
Parameters
rg(C++: int) the segment register number

◆ getn_sreg_range()

"bool" getn_sreg_range ( "sreg_range_t" out,
"int" rg,
"int" n )
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 ( "sel_t" ds_sel)
Parameters
ds_sel(C++: sel_t)

◆ set_default_sreg_value()

"bool" set_default_sreg_value ( "segment_t *" sg,
"int" rg,
"sel_t" value )
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 ( "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.

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

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