]> gitweb.factorcode.org Git - factor.git/blob - extra/tools/image-analyzer/image-analyzer.factor
tools.image-analyzer: now relocation pointers are decoded too -> nicer graphs
[factor.git] / extra / tools / image-analyzer / image-analyzer.factor
1 USING: accessors classes.struct fry io io.encodings.binary io.files
2 io.streams.byte-array kernel math sequences
3 tools.image-analyzer.code-heap-reader
4 tools.image-analyzer.data-heap-reader tools.image-analyzer.utils
5 tools.image-analyzer.vm ;
6 IN: tools.image-analyzer
7
8 TUPLE: image header heap ;
9
10 : code-heap>code-blocks ( code-heap -- code-blocks )
11     binary [ [ read-code-block ] consume-stream>sequence ] with-byte-reader ;
12
13 : data-heap>objects ( data-relocation-base data-heap -- seq )
14     binary [ '[ _ read-object ] consume-stream>sequence ] with-byte-reader ;
15
16 : (adjust-addresses) ( nodes base -- )
17     '[ [ _ + ] change-address drop ] each ;
18
19 : adjust-addresses ( header data-nodes code-nodes -- )
20     pick code-relocation-base>> (adjust-addresses)
21     swap data-relocation-base>> (adjust-addresses) ;
22
23 : load-image ( image-file -- image )
24     binary [
25         image-header read-struct dup [
26             [ data-relocation-base>> ] [ data-size>> read ] bi
27             data-heap>objects
28         ]
29         [ code-size>> read code-heap>code-blocks ] bi
30     ] with-file-reader 3dup adjust-addresses append image boa ;