define /r GetWord(Addr)\r
{\r
unsigned long data;\r
- \r
+\r
if( (Addr & 0x2) == 0 )\r
{\r
data = dword(Addr);\r
$printf "debug type is %x",debugtype$;\r
return;\r
}\r
- \r
+\r
debugrva = dword(imgstart + debugdirentryrva + 0x14);\r
dwarfsig = dword(imgstart + debugrva);\r
if(dwarfsig != 0x66727764)\r
\r
baseofcode = imgstart + dword(filehdrstart + 0x28);\r
baseofdata = imgstart + dword(filehdrstart + 0x2c);\r
- \r
+\r
if( (baseofcode < baseofdata) && (baseofcode != 0) )\r
{\r
elfbase = baseofcode;\r
$printf "debug type is %x",debugtype$;\r
return;\r
}\r
- \r
+\r
debugrva = dword(imgstart + debugdirentryrva + 0x14);\r
debugrva = debugrva - strippedsize;\r
dwarfsig = dword(imgstart + debugrva);\r
$printf "found %x", dwarfsig$;\r
return;\r
}\r
- \r
+\r
if( dwarfsig == 0x66727764 )\r
{\r
elfpath = (char *)(imgstart + debugrva + 0xc);\r
- $printf "looking for elf path at 0x%x", elfpath$; \r
+ $printf "looking for elf path at 0x%x", elfpath$;\r
}\r
- else \r
+ else\r
{\r
elfpath = (char *)(imgstart + debugrva + 0x10);\r
- $printf "looking for elf path at 0x%x", elfpath$; \r
+ $printf "looking for elf path at 0x%x", elfpath$;\r
}\r
\r
// elf base is baseofcode (we hope that for TE images it's not baseofdata)\r
}\r
else if(sectiontype == 0x12) // TE\r
{\r
- ProcessTE(secstart+0x4); \r
+ ProcessTE(secstart+0x4);\r
}\r
}\r
.\r
$fopen 50, 'C:\loadfiles.inc'$;\r
\r
fvlen = dword(fvbase + 0x20);\r
- \r
+\r
// first ffs file is after fv header, use headerlength field\r
//ffsoffset = (dword(fvbase + 0x30) & 0xffff0000) >> 16;\r
ffsoffset = (dword(fvbase + 0x30) & 0xffff0000) / 0x10000;\r
while(ffsoffset < (fvbase+fvlen))\r
{\r
// process ffs file and increment by ffs file size field\r
- ProcessFfsFile(ffsoffset); \r
+ ProcessFfsFile(ffsoffset);\r
ffsfilesize = (dword(ffsoffset + 0x14) & 0x00ffffff);\r
if(ffsfilesize == 0)\r
{\r
break;\r
}\r
ffsoffset = ffsoffset + ffsfilesize;\r
- \r
+\r
\r
// align to next 8 byte boundary\r
if( (ffsoffset & 0x7) != 0 )\r
{\r
ffsoffset = ffsoffset + (0x8 - (ffsoffset & 0x7));\r
}\r
- \r
+\r
} // end fv ffs loop\r
\r
$vclose 50$;\r
unsigned long TopOfRam;\r
{\r
unsigned long offset;\r
- \r
+\r
$printf "FindSystemTable"$;\r
$printf "top of mem is %x",TopOfRam$;\r
- \r
+\r
offset = TopOfRam;\r
- \r
+\r
// align to highest 4MB boundary\r
offset = offset & 0xFFC00000;\r
- \r
+\r
// start at top and look on 4MB boundaries for system table ptr structure\r
while(offset > 0)\r
{\r
//$printf "checking %x",offset$;\r
//$printf "value is %x",dword(offset)$;\r
- \r
+\r
// low signature match\r
if(dword(offset) == 0x20494249)\r
{\r
}\r
}\r
}\r
- \r
+\r
}\r
- \r
+\r
if(offset < 0x400000) break;\r
- offset = offset - 0x400000; \r
+ offset = offset - 0x400000;\r
}\r
- \r
+\r
return 0;\r
}\r
.\r
unsigned long dbgptr;\r
unsigned long dbginfo;\r
unsigned long loadedimg;\r
- \r
+\r
$printf "FindDebugInfo"$;\r
- \r
+\r
dbgentries = 0;\r
CfgTableEntries = dword(SystemTable + 0x40);\r
ConfigTable = dword(SystemTable + 0x44);\r
- \r
+\r
$printf "config table is at %x (%d entries)", ConfigTable, CfgTableEntries$;\r
- \r
+\r
// now search for debug info entry with guid 49152E77-1ADA-4764-B7A2-7AFEFED95E8B\r
// 0x49152E77 0x47641ADA 0xFE7AA2B7 0x8B5ED9FE\r
for(i=0; i<CfgTableEntries; i++)\r
}\r
}\r
}\r
- \r
+\r
if(dbgentries == 0)\r
{\r
$printf "no debug entries found"$;\r
return;\r
}\r
- \r
+\r
$printf "debug table at %x (%d entries)", dbgptr, dbgentries$;\r
- \r
+\r
for(i=0; i<dbgentries; i++)\r
{\r
dbginfo = dword(dbgptr + (i*4));\r
{\r
unsigned long maxmem;\r
unsigned long systbl;\r
- \r
+\r
$printf "LoadDxe"$;\r
- \r
+\r
$fopen 50, 'C:\loadfiles.inc'$;\r
- \r
+\r
maxmem = GetMaxMem();\r
systbl = FindSystemTable(maxmem);\r
if(systbl != 0)\r
$printf "found system table at %x",systbl$;\r
FindDebugInfo(systbl);\r
}\r
- \r
+\r
$vclose 50$;\r
}\r
.\r
unsigned long RuntimeDebugInfo;\r
unsigned long DebugInfoOffset;\r
unsigned long imgbase;\r
- \r
+\r
$printf "LoadRuntimeDxe"$;\r
- \r
+\r
$fopen 50, 'C:\loadfiles.inc'$;\r
- \r
+\r
RuntimeDebugInfo = 0x80000010;\r
- \r
+\r
if(RuntimeDebugInfo != 0)\r
{\r
numentries = dword(RuntimeDebugInfo);\r
- \r
+\r
$printf "runtime debug info is at %x (%d entries)", RuntimeDebugInfo, numentries$;\r
- \r
+\r
DebugInfoOffset = RuntimeDebugInfo + 0x4;\r
for(i=0; i<numentries; i++)\r
{\r
DebugInfoOffset = DebugInfoOffset + 0x4;\r
}\r
}\r
- \r
+\r
$vclose 50$;\r
}\r
.\r