bios_extract: Add AMI AFUDOS decompression

This commit is contained in:
RichardG867
2022-03-03 16:10:11 -03:00
parent 133dd177c9
commit e6d9cb325a
3 changed files with 35 additions and 0 deletions

View File

@@ -619,3 +619,34 @@ NotCompressed:
return TRUE;
}
/*
*
*/
Bool
AFUDOSExtract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
uint32_t AFUDOSOffset, uint32_t ROMOffset)
{
struct hdr {
uint32_t ROMSize;
uint32_t ExpSize;
unsigned char Data[];
} *hdr = (struct hdr *) (BIOSImage + ROMOffset + 16);
unsigned char *Buffer = MMapOutputFile("afudos.bin", hdr->ExpSize);
if (!Buffer)
return FALSE;
if (LH5Decode(hdr->Data, hdr->ROMSize, Buffer, hdr->ExpSize) == -1) {
munmap(Buffer, hdr->ExpSize);
return FALSE;
}
munmap(Buffer, hdr->ExpSize);
char *argv[] = {"", "afudos.bin"};
int ret = main(2, argv);
unlink("afudos.bin");
return !ret;
}

View File

@@ -113,6 +113,7 @@ static struct {
"AMIBIOSC07", NULL, AMI95Extract}, {
"AMIBIOSC08", NULL, AMI95Extract}, {
"AMIBIOSC09", NULL, AMI95Extract}, { /* Hyper-V legacy BIOS */
"AMI Flash Utility for DOS Command mode.", "@ROM", AFUDOSExtract}, {
"= Award Decompression Bios =", NULL, AwardExtract}, {
"awardext.rom", NULL, AwardExtract}, {
"Phoenix Technologies", "BCPSEGMENT", PhoenixExtract}, {

View File

@@ -36,6 +36,7 @@
/* bios_extract.c */
unsigned char *MMapOutputFile(char *filename, int size);
int main(int argc, char *argv[]);
/* ami.c */
Bool AMI940725Extract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
@@ -44,6 +45,8 @@ Bool AMI941010Extract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
uint32_t Offset1, uint32_t Offset2);
Bool AMI95Extract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
uint32_t Offset1, uint32_t Offset2);
Bool AFUDOSExtract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,
uint32_t Offset1, uint32_t Offset2);
/* phoenix.c */
Bool PhoenixExtract(unsigned char *BIOSImage, int BIOSLength, int BIOSOffset,