Skip to content

Commit 25cee01

Browse files
committed
MZ/PE: Extract SBAT from EFI files
1 parent 71fec66 commit 25cee01

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

Source/MediaInfo/Archive/File_Mz.cpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,19 @@ bool File_Mz::FileHeader_Begin()
184184
void File_Mz::Read_Buffer_Continue()
185185
{
186186
if (rsrc_offset) {
187-
Parse_Resources();
187+
Parse_Resources();
188+
rsrc_offset = 0;
189+
190+
if (sbat_offset)
191+
GoTo(sbat_offset);
192+
else
193+
Finish("MZ");
194+
195+
return;
196+
}
197+
if (sbat_offset) {
198+
Parse_SBAT();
199+
sbat_offset = 0;
188200

189201
Finish("MZ");
190202
return;
@@ -333,6 +345,10 @@ void File_Mz::Read_Buffer_Continue()
333345
rsrc_virtual_addr = VirtualAddress;
334346
rsrc_offset = PointerToRawData;
335347
}
348+
if (Name == 0x2E73626174000000) { // .sbat
349+
sbat_offset = PointerToRawData;
350+
sbat_size = VirtualSize;
351+
}
336352
Element_End0();
337353
}
338354
}
@@ -368,7 +384,9 @@ void File_Mz::Read_Buffer_Continue()
368384
if (rsrc_offset) {
369385
GoTo(rsrc_offset);
370386
}
371-
else {
387+
else if (sbat_offset) {
388+
GoTo(sbat_offset);
389+
} else {
372390
//No more need data
373391
Finish("MZ");
374392
}
@@ -551,6 +569,13 @@ bool File_Mz::Parse_StringFileInfo(int8u level) {
551569
return true;
552570
}
553571

572+
//---------------------------------------------------------------------------
573+
void File_Mz::Parse_SBAT() {
574+
Ztring sbat;
575+
Get_UTF8(sbat_size, sbat, "SBAT");
576+
Fill(Stream_General, 0, "SBAT", sbat);
577+
}
578+
554579
} //NameSpace
555580

556581
#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)