2015-12-13 01:54:04 -05:00
|
|
|
USING: alien.c-types alien.data assocs combinators.smart
|
|
|
|
compiler.constants kernel layouts math sequences vm ;
|
2015-12-12 06:03:08 -05:00
|
|
|
IN: tools.image-analyzer.relocations
|
|
|
|
|
|
|
|
CONSTANT: rel-params {
|
|
|
|
{ 9 1 }
|
|
|
|
{ 0 2 } { 13 2 }
|
|
|
|
}
|
|
|
|
|
|
|
|
: rel-type ( uint -- type )
|
|
|
|
-28 shift 0xf bitand ;
|
|
|
|
|
|
|
|
: rel-class ( uint -- class )
|
|
|
|
-24 shift 0xf bitand ;
|
|
|
|
|
|
|
|
: rel-offset ( uint -- offset )
|
|
|
|
0xffffff bitand ;
|
|
|
|
|
|
|
|
: rel-nr-params ( uint -- n )
|
|
|
|
rel-params at 0 or ;
|
|
|
|
|
|
|
|
: uint>relocation ( uint -- relocation )
|
|
|
|
{ [ rel-type ] [ rel-class ] [ rel-offset ] [ rel-nr-params ] }
|
|
|
|
cleave>array ;
|
|
|
|
|
|
|
|
: byte-array>relocations ( byte-array -- relocations )
|
|
|
|
uint cast-array [ uint>relocation ] { } map-as ;
|
|
|
|
|
2015-12-13 01:54:04 -05:00
|
|
|
: decode-relative-relocation ( address byte-array relocation -- value )
|
|
|
|
third [ [ 4 - ] keep rot subseq int cast-array first ] keep + + ;
|
|
|
|
|
|
|
|
: decode-absolute-relocation ( byte-array relocation -- value )
|
|
|
|
third [ cell - ] keep rot subseq cell_t cast-array first ;
|
|
|
|
|
|
|
|
: interesting-relocation? ( relocation -- ? )
|
|
|
|
first { 1 2 3 6 } member? ;
|
|
|
|
|
|
|
|
: decode-relocation ( address byte-array relocation -- value )
|
|
|
|
dup second rc-relative = [ decode-relative-relocation ] [
|
|
|
|
decode-absolute-relocation nip
|
|
|
|
] if ;
|