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