Skip to content

Commit a5f7850

Browse files
committed
MZ/PE: Extract SBAT from EFI files
1 parent 34db9ec commit a5f7850

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

Source/MediaInfo/Archive/File_Mz.cpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,13 @@ bool File_Mz::FileHeader_Begin()
184184
void File_Mz::Read_Buffer_Continue()
185185
{
186186
if (rsrc_offset) {
187-
Parse_Resources();
187+
Parse_Resources();
188+
189+
Finish("MZ");
190+
return;
191+
}
192+
if (sbat_offset) {
193+
Parse_SBAT();
188194

189195
Finish("MZ");
190196
return;
@@ -333,6 +339,10 @@ void File_Mz::Read_Buffer_Continue()
333339
rsrc_virtual_addr = VirtualAddress;
334340
rsrc_offset = PointerToRawData;
335341
}
342+
if (Name == 0x2E73626174000000) { // .sbat
343+
sbat_offset = PointerToRawData;
344+
sbat_size = VirtualSize;
345+
}
336346
Element_End0();
337347
}
338348
}
@@ -368,7 +378,9 @@ void File_Mz::Read_Buffer_Continue()
368378
if (rsrc_offset) {
369379
GoTo(rsrc_offset);
370380
}
371-
else {
381+
else if (sbat_offset) {
382+
GoTo(sbat_offset);
383+
} else {
372384
//No more need data
373385
Finish("MZ");
374386
}
@@ -551,6 +563,13 @@ bool File_Mz::Parse_StringFileInfo(int8u level) {
551563
return true;
552564
}
553565

566+
//---------------------------------------------------------------------------
567+
void File_Mz::Parse_SBAT() {
568+
Ztring sbat;
569+
Get_UTF8(sbat_size, sbat, "SBAT");
570+
Fill(Stream_General, 0, "SBAT", sbat);
571+
}
572+
554573
} //NameSpace
555574

556575
#endif //MEDIAINFO_MZ_YES

Source/MediaInfo/Archive/File_Mz.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,14 @@ protected :
3737

3838
void Parse_Resources();
3939
bool Parse_StringFileInfo(int8u level = 0);
40+
void Parse_SBAT();
4041

4142
//Temp
4243
int32u rsrc_size{};
4344
int32u rsrc_virtual_addr{};
4445
int32u rsrc_offset{};
46+
int32u sbat_offset{};
47+
int32u sbat_size{};
4548
map<int32u, Ztring> Named_Resource;
4649
map<int32u, int32u> Resource;
4750
};

0 commit comments

Comments
 (0)