1 | ;
|
---|
2 | ; Copyright (c) 2011, Hewlett-Packard Company. All rights reserved.<BR>
|
---|
3 | ;
|
---|
4 | ; SPDX-License-Identifier: BSD-2-Clause-Patent
|
---|
5 | ;
|
---|
6 |
|
---|
7 | LOCAL &imgstart &strippedsize &debugdirentryrva &debugtype &debugrva &dwarfsig &elfbase &elfpath &pathoffset
|
---|
8 | ENTRY &imgstart
|
---|
9 |
|
---|
10 | &imgstart=&imgstart
|
---|
11 | print "TE image found at &imgstart"
|
---|
12 |
|
---|
13 | ; determine pe header bytes removed to account for in rva references
|
---|
14 | &strippedsize=(Data.Long(a:&imgstart+0x4)&0xffff0000)>>16.
|
---|
15 | &strippedsize=&strippedsize-0x28
|
---|
16 |
|
---|
17 | &debugdirentryrva=Data.Long(a:&imgstart+0x20)
|
---|
18 | if &debugdirentryrva==0
|
---|
19 | (
|
---|
20 | print "no debug dir for image at &imgstart"
|
---|
21 | enddo
|
---|
22 | )
|
---|
23 | &debugdirentryrva=&debugdirentryrva-&strippedsize
|
---|
24 |
|
---|
25 | &debugtype=Data.Long(a:&imgstart+&debugdirentryrva+0xc)
|
---|
26 | if (&debugtype!=0xdf)&&(&debugtype!=0x02)
|
---|
27 | (
|
---|
28 | print "debug type is not dwarf for image at &imgstart, it's &debugtype"
|
---|
29 | enddo
|
---|
30 | )
|
---|
31 |
|
---|
32 | &debugrva=Data.Long(a:&imgstart+&debugdirentryrva+0x14)
|
---|
33 | &debugrva=&debugrva-&strippedsize;
|
---|
34 | &dwarfsig=Data.Long(a:&imgstart+&debugrva);
|
---|
35 | if &dwarfsig==0x66727764
|
---|
36 | (
|
---|
37 | &pathoffset=0xc
|
---|
38 | )
|
---|
39 | else
|
---|
40 | (
|
---|
41 | if &dwarfsig==0x3031424E
|
---|
42 | (
|
---|
43 | &pathoffset=0x10
|
---|
44 | )
|
---|
45 | else
|
---|
46 | (
|
---|
47 | print "debug signature not found for image at &imgstart, its &dwarfsig"
|
---|
48 | enddo
|
---|
49 | )
|
---|
50 | )
|
---|
51 |
|
---|
52 | &elfpath=Data.String(c:&imgstart+&debugrva+&pathoffset)
|
---|
53 |
|
---|
54 | ; elf base is baseofcode (we hope that for TE images it's not baseofdata)
|
---|
55 | &elfbase=&imgstart+Data.Long(a:&imgstart+0xc)-&strippedsize
|
---|
56 |
|
---|
57 | print "found path &elfpath"
|
---|
58 | ; $fprintf 50, "load /ni /np /a %s &0x%x\n",elfpath,elfbase$;
|
---|
59 | ON ERROR GOSUB
|
---|
60 | return
|
---|
61 | data.load.elf &elfpath &elfbase /NOCODE /NOCLEAR
|
---|
62 | ON error
|
---|
63 |
|
---|
64 | enddo
|
---|