diff --git a/AmiModulePkg/TCG2/Common/AmiTcgPlatformPei/AmiTcgPlatformPeiAfterMem/AmiTcgPlatformPeiAfterMem.c b/AmiModulePkg/TCG2/Common/AmiTcgPlatformPei/AmiTcgPlatformPeiAfterMem/AmiTcgPlatformPeiAfterMem.c index 7e72efe..592e10f 100644 --- a/AmiModulePkg/TCG2/Common/AmiTcgPlatformPei/AmiTcgPlatformPeiAfterMem/AmiTcgPlatformPeiAfterMem.c +++ b/AmiModulePkg/TCG2/Common/AmiTcgPlatformPei/AmiTcgPlatformPeiAfterMem/AmiTcgPlatformPeiAfterMem.c @@ -3,167 +3,2637 @@ // Source: IDA Pro MCP port 13379 // Functions: 80 // +EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) +{ + int PcdPtr; // eax -#include -#include + if ( *(char *)(PeiGetPcdPtr() + 1024068) >= 0 ) /*0xffe192f8*/ + { + PeiWriteIoPort(); /*0xffe192fa*/ + PcdPtr = PeiGetPcdPtr(); /*0xffe192ff*/ + *(_BYTE *)(PcdPtr + 1024068) |= 0x80u; /*0xffe1930a*/ + } + return (*(int ( **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 24))( /*0xffe1931e*/ + SystemTable, + &unk_FFE21718); +} -{"addr":"0xffe19188","code":"char *SetMem(char *dst, char *src, unsigned int count)\n{\n unsigned int count_1; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count_1 = count; /*0xffe19192*/\n if ( src < dst && &src[count - 1] >= dst ) /*0xffe191a0*/\n {\n src_1 = &src[count - 1]; /*0xffe191b4*/\n dst_1 = &dst[count - 1]; /*0xffe191b6*/\n }\n else\n {\n count_1 = count & 3; /*0xffe191a4*/\n qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe191ad*/\n src_1 = &src[4 * (count >> 2)]; /*0xffe191ad*/\n dst_1 = &dst[4 * (count >> 2)]; /*0xffe191ad*/\n }\n qmemcpy(dst_1, src_1, count_1); /*0xffe191bd*/\n return dst; /*0xffe191c4*/\n}"} +int TpmMeasureDigestIntoPCR(int TpmPpi, int *this, unsigned int a3, int a4) +{ + int result; // eax + int v7; // esi + int v8; // eax + int v9; // esi + int v10; // [esp+Ch] [ebp-8h] BYREF + int v11; // [esp+10h] [ebp-4h] BYREF -{"addr":"0xffe191c8","code":"int CompareMem(_BYTE *a1, _BYTE *a2, int a3)\n{\n bool v6; // zf\n\n do /*0xffe191d6*/\n {\n if ( !a3 ) /*0xffe191d6*/\n break; /*0xffe191d6*/\n v6 = *a1++ == *a2++; /*0xffe191d6*/\n --a3; /*0xffe191d6*/\n }\n while ( v6 ); /*0xffe191d6*/\n return (unsigned __int8)*(a1 - 1) - (unsigned __int8)*(a2 - 1); /*0xffe191e2*/\n}"} + result = (*(int ( **)(int *, int, int *))(*this + 76))(this, 34, &v10); /*0xffe19335*/ + if ( result >= 0 ) /*0xffe1933d*/ + { + result = (*(int ( **)(int *, int, int *))(*this + 76))(this, 34, &v11); /*0xffe1934c*/ + if ( result >= 0 ) /*0xffe19354*/ + { + (*(void ( **)(int, int, _DWORD))(*this + 84))(v10, 34, 0); /*0xffe19364*/ + v7 = v10; /*0xffe19367*/ + *(_WORD *)v10 = -16128; /*0xffe19372*/ + v7 += 10; /*0xffe19375*/ + *(_DWORD *)(v10 + 2) = 570425344; /*0xffe1937c*/ + *(_DWORD *)(v10 + 6) = 335544320; /*0xffe19387*/ + v8 = *this; /*0xffe193b9*/ + a3 = (((a3 << 16) | a3 & 0xFF00) << 8) | ((HIWORD(a3) | a3 & 0xFF0000) >> 8); /*0xffe193bd*/ + (*(void ( **)(int, unsigned int *, int))(v8 + 80))(v7, &a3, 4); /*0xffe193c1*/ + (*(void ( **)(int, int, int))(*this + 80))(v7 + 4, a4, 20); /*0xffe193d0*/ + v9 = (*(int ( **)(int, int *, int, int, int, int))(TpmPpi + 8))(TpmPpi, this, 34, v10, 34, v11); /*0xffe193e2*/ + DebugPrintWrapper(64, "Status = %r\n", v9); /*0xffe193ec*/ + return v9; /*0xffe193f4*/ + } + } + return result; /*0xffe193f7*/ +} -{"addr":"0xffe19268","code":"void *ZeroMem(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe19275*/\n return buf; /*0xffe1927b*/\n}"} +int MeasureLogDxeFwVol(int *this, int *a2, void ( **TcgPpi)(_DWORD, int), int TpmPpi) +{ + int Status; // eax + int *FwVolHobData; // esi + int FwVolHobCount; // ebx + unsigned int *FwVolHobEntry_1; // ecx + unsigned int *FwVolHobEntry_2; // ecx + int MeasureStatus; // ebp + int FinalStatus; // esi + int ParamArg; // ecx + unsigned int *FwVolHobEntry; // [esp+10h] [ebp-7Ch] BYREF + _BYTE MeasuredDigest[4]; // [esp+14h] [ebp-78h] BYREF + char DigestedData[20]; // [esp+18h] [ebp-74h] BYREF + char HashContext[96]; // [esp+2Ch] [ebp-60h] BYREF -{"addr":"0xffe192a8","code":"int CopyMemWrapper(int a1, int a2, int a3, int a4)\n{\n do /*0xffe192c1*/\n {\n *(_DWORD *)(a1 + 8 *a2 - 8) = a3; /*0xffe192b9*/\n *(_DWORD *)(a1 + 8 *a2-- - 4) = a4; /*0xffe192bd*/\n }\n while ( a2 ); /*0xffe192c1*/\n return a1; /*0xffe192c5*/\n}"} + FwVolHobEntry = 0; /*0xffe19400*/ + DebugPrintWrapper(64, "[%d] Enter MeasureLogDxeFwVol\n", 212); /*0xffe19418*/ + Status = (*(int ( **)(int *, int, unsigned int **))(*this + 76))(this, 48, &FwVolHobEntry); /*0xffe19427*/ + if ( Status >= 0 ) /*0xffe1942f*/ + { + FwVolHobData = a2 + 3; /*0xffe19439*/ + FwVolHobCount = *a2; /*0xffe1943c*/ + *FwVolHobEntry = 0; /*0xffe1943f*/ + FwVolHobEntry[1] = 1; /*0xffe19446*/ + FwVolHobEntry[7] = 16; /*0xffe19451*/ + FwVolHobEntry_1 = FwVolHobEntry; /*0xffe19458*/ + FwVolHobEntry[8] = a2[3]; /*0xffe1945e*/ + FwVolHobEntry_1[9] = a2[4]; /*0xffe19464*/ + FwVolHobEntry_2 = FwVolHobEntry; /*0xffe19467*/ + FwVolHobEntry[10] = a2[5]; /*0xffe1946e*/ + FwVolHobEntry_2[11] = 0; /*0xffe19471*/ + InitHashContext(HashContext); /*0xffe19479*/ + DebugPrintWrapper(64, "FwVolHobCount = %x \n", FwVolHobCount); /*0xffe19486*/ + for ( ; FwVolHobCount; --FwVolHobCount ) /*0xffe19490*/ + { + DebugPrintWrapper(64, "TpmFwVolHob[i].Size = %x \n", FwVolHobData[2]); /*0xffe1949c*/ + DebugPrintWrapper(64, "TpmFwVolHob[i].baseAddress = %lx \n", *FwVolHobData); /*0xffe194ad*/ + AllocateAndMeasureFwVol(HashContext, (char *)*FwVolHobData, FwVolHobData[2]); /*0xffe194bb*/ + FwVolHobData += 6; /*0xffe194c3*/ + } + HashFirmwareVolume((int)DigestedData, (int)HashContext); /*0xffe194d3*/ + (*(void ( **)(unsigned int *, char *, int))(*this + 80))(FwVolHobEntry + 2, DigestedData, 20); /*0xffe194e9*/ + (*TcgPpi)(TcgPpi, (int)this); /*0xffe194f5*/ + MeasureStatus = TpmMeasureDigestIntoPCR(TpmPpi, this, *FwVolHobEntry, (int)(FwVolHobEntry + 2)); /*0xffe19516*/ + TcgPpi[1](TcgPpi, (int)this); /*0xffe19518*/ + if ( MeasureStatus >= 0 ) /*0xffe19520*/ + { + FinalStatus = (*(int ( **)(int, int *, unsigned int *, _BYTE *))(TpmPpi + 4))( /*0xffe19534*/ + TpmPpi, + this, + FwVolHobEntry, + MeasuredDigest); + DebugPrintWrapper(64, "MeasureLogDxeFwVol - %r\n", FinalStatus); /*0xffe1953e*/ + if ( byte_FFE2177C ) /*0xffe19552*/ + PeiPcdSetSku(1, 50563599, ParamArg, (int)&unk_FFE216E8, 0); /*0xffe19561*/ + DelayMicroseconds(1, 50563599); /*0xffe1956e*/ + return FinalStatus; /*0xffe19573*/ + } + else + { + return MeasureStatus; /*0xffe19522*/ + } + } + return Status; /*0xffe19575*/ +} -{"addr":"0xffe192c8","code":"void *SetMemWrapper(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe192d5*/\n return buf; /*0xffe192db*/\n}"} +int PeiServicesGetBootMode(int p_FirmwareVolumeInfo, _DWORD *p_TpmStatus, char *FirmwareVolumeInfo) +{ + unsigned int BootGuardPolicy; // eax -{"addr":"0xffe192e8","code":"EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n int PcdPtr; // eax\n\n if ( *(char *)(PeiGetPcdPtr() + 1024068) >= 0 ) /*0xffe192f8*/\n {\n PeiWriteIoPort(); /*0xffe192fa*/\n PcdPtr = PeiGetPcdPtr(); /*0xffe192ff*/\n *(_BYTE *)(PcdPtr + 1024068) |= 0x80u; /*0xffe1930a*/\n }\n return (*(int ( **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 24))( /*0xffe1931e*/\n SystemTable,\n &unk_FFE21718);\n}","refs":[{"addr":"0xffe1fe30","name":"PeiWriteIoPort"},{"addr":"0xffe1fe24","name":"PeiGetPcdPtr"},{"addr":"0xffe21718","name":"unk_FFE21718"}]} + if ( !p_FirmwareVolumeInfo ) /*0xffe19585*/ + return -2147483646; /*0xffe19587*/ + if ( FirmwareVolumeInfo ) /*0xffe19594*/ + BootGuardPolicy = GetBootGuardPolicy(FirmwareVolumeInfo); /*0xffe195a8*/ + else + BootGuardPolicy = GetFirmwareVolumeInfo(); /*0xffe19596*/ + *(_DWORD *)p_FirmwareVolumeInfo = BootGuardPolicy; /*0xffe1959b*/ + if ( !BootGuardPolicy ) /*0xffe1959f*/ + return -2147483634; /*0xffe195a1*/ + *p_TpmStatus = *(_DWORD *)(*(_DWORD *)p_FirmwareVolumeInfo + 28); /*0xffe195b4*/ + return 0; /*0xffe195b8*/ +} -{"addr":"0xffe19320","code":"int TpmMeasureDigestIntoPCR(int TpmPpi, int *this, unsigned int a3, int a4)\n{\n int result; // eax\n int v7; // esi\n int v8; // eax\n int v9; // esi\n int v10; // [esp+Ch] [ebp-8h] BYREF\n int v11; // [esp+10h] [ebp-4h] BYREF\n\n result = (*(int ( **)(int *, int, int *))(*this + 76))(this, 34, &v10); /*0xffe19335*/\n if ( result >= 0 ) /*0xffe1933d*/\n {\n result = (*(int ( **)(int *, int, int *))(*this + 76))(this, 34, &v11); /*0xffe1934c*/\n if ( result >= 0 ) /*0xffe19354*/\n {\n (*(void ( **)(int, int, _DWORD))(*this + 84))(v10, 34, 0); /*0xffe19364*/\n v7 = v10; /*0xffe19367*/\n *(_WORD *)v10 = -16128; /*0xffe19372*/\n v7 += 10; /*0xffe19375*/\n *(_DWORD *)(v10 + 2) = 570425344; /*0xffe1937c*/\n *(_DWORD *)(v10 + 6) = 335544320; /*0xffe19387*/\n v8 = *this; /*0xffe193b9*/\n a3 = (((a3 << 16) | a3 & 0xFF00) << 8) | ((HIWORD(a3) | a3 & 0xFF0000) >> 8); /*0xffe193bd*/\n (*(void ( **)(int, unsigned int *, int))(v8 + 80))(v7, &a3, 4); /*0xffe193c1*/\n (*(void ( **)(int, int, int))(*this + 80))(v7 + 4, a4, 20); /*0xffe193d0*/\n v9 = (*(int ( **)(int, int *, int, int, int, int))(TpmPpi + 8))(TpmPpi, this, 34, v10, 34, v11); /*0xffe193e2*/\n DebugPrintWrapper(64, \"Status = %r\\n\", v9); /*0xffe193ec*/\n return v9; /*0xffe193f4*/\n }\n }\n return result; /*0xffe193f7*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20084","name":"aStatusR","string":"Status = %r\n"}]} +int __thiscall TcgPlatformAfterMemInit(int *this) +{ + unsigned int FvIndex; // edi + int *PeiServices; // ebx + unsigned int FvIndex_1; // ebp + int TpmStatus_1; // eax + unsigned int FirmwareVolumeInfo; // eax + int FirmwareVolumeInfo_1; // esi + _DWORD *RomAreaPtr; // edi + int FvSize; // ecx + int FvAddress; // eax + int HobStatus; // eax + int HobStatus_1; // esi + _DWORD *GuidDataPtr; // edi + int HobPtr; // edx + unsigned int *FwVolHobEntry; // esi + unsigned int FirstRomAreaValue; // ebx + unsigned int HobValue; // eax + int v17; // [esp-8h] [ebp-148h] + unsigned int v18; // [esp-4h] [ebp-144h] + int HobHandle; // [esp+14h] [ebp-12Ch] BYREF + int TpmStatus; // [esp+18h] [ebp-128h] BYREF + int p_FirmwareVolumeInfo; // [esp+1Ch] [ebp-124h] BYREF + int TcgProtocol; // [esp+20h] [ebp-120h] BYREF + int TpmPpi; // [esp+24h] [ebp-11Ch] BYREF + int TcgPpi; // [esp+28h] [ebp-118h] BYREF + int *PeiServicesCopy; // [esp+2Ch] [ebp-114h] + int HobFvBase; // [esp+3Ch] [ebp-104h] + unsigned int HobFvSize; // [esp+40h] [ebp-100h] + _QWORD RomAreaDescs[28]; // [esp+44h] [ebp-FCh] BYREF + char EventLogBuffer[28]; // [esp+124h] [ebp-1Ch] BYREF -{"addr":"0xffe193fd","code":"int MeasureLogDxeFwVol(int *this, int *a2, void ( **TcgPpi)(_DWORD, int), int TpmPpi)\n{\n int Status; // eax\n int *FwVolHobData; // esi\n int FwVolHobCount; // ebx\n unsigned int *FwVolHobEntry_1; // ecx\n unsigned int *FwVolHobEntry_2; // ecx\n int MeasureStatus; // ebp\n int FinalStatus; // esi\n int ParamArg; // ecx\n unsigned int *FwVolHobEntry; // [esp+10h] [ebp-7Ch] BYREF\n _BYTE MeasuredDigest[4]; // [esp+14h] [ebp-78h] BYREF\n char DigestedData[20]; // [esp+18h] [ebp-74h] BYREF\n char HashContext[96]; // [esp+2Ch] [ebp-60h] BYREF\n\n FwVolHobEntry = 0; /*0xffe19400*/\n DebugPrintWrapper(64, \"[%d] Enter MeasureLogDxeFwVol\\n\", 212); /*0xffe19418*/\n Status = (*(int ( **)(int *, int, unsigned int **))(*this + 76))(this, 48, &FwVolHobEntry); /*0xffe19427*/\n if ( Status >= 0 ) /*0xffe1942f*/\n {\n FwVolHobData = a2 + 3; /*0xffe19439*/\n FwVolHobCount = *a2; /*0xffe1943c*/\n *FwVolHobEntry = 0; /*0xffe1943f*/\n FwVolHobEntry[1] = 1; /*0xffe19446*/\n FwVolHobEntry[7] = 16; /*0xffe19451*/\n FwVolHobEntry_1 = FwVolHobEntry; /*0xffe19458*/\n FwVolHobEntry[8] = a2[3]; /*0xffe1945e*/\n FwVolHobEntry_1[9] = a2[4]; /*0xffe19464*/\n FwVolHobEntry_2 = FwVolHobEntry; /*0xffe19467*/\n FwVolHobEntry[10] = a2[5]; /*0xffe1946e*/\n FwVolHobEntry_2[11] = 0; /*0xffe19471*/\n InitHashContext(HashContext); /*0xffe19479*/\n DebugPrintWrapper(64, \"FwVolHobCount = %x \\n\", FwVolHobCount); /*0xffe19486*/\n for ( ; FwVolHobCount; --FwVolHobCount ) /*0xffe19490*/\n {\n DebugPrintWrapper(64, \"TpmFwVolHob[i].Size = %x \\n\", FwVolHobData[2]); /*0xffe1949c*/\n DebugPrintWrapper(64, \"TpmFwVolHob[i].baseAddress = %lx \\n\", *FwVolHobData); /*0xffe194ad*/\n AllocateAndMeasureFwVol(HashContext, (char *)*FwVolHobData, FwVolHobData[2]); /*0xffe194bb*/\n FwVolHobData += 6; /*0xffe194c3*/\n }\n HashFirmwareVolume((int)DigestedData, (int)HashContext); /*0xffe194d3*/\n (*(void ( **)(unsigned int *, char *, int))(*this + 80))(FwVolHobEntry + 2, DigestedData, 20); /*0xffe194e9*/\n (*TcgPpi)(TcgPpi, (int)this); /*0xffe194f5*/\n MeasureStatus = TpmMeasureDigestIntoPCR(TpmPpi, this, *FwVolHobEntry, (int)(FwVolHobEntry + 2)); /*0xffe19516*/\n TcgPpi[1](TcgPpi, (int)this); /*0xffe19518*/\n if ( MeasureStatus >= 0 ) /*0xffe19520*/\n {\n FinalStatus = (*(int ( **)(int, int *, unsigned int *, _BYTE *))(TpmPpi + 4))( /*0xffe19534*/\n TpmPpi,\n this,\n FwVolHobEntry,\n MeasuredDigest);\n DebugPrintWrapper(64, \"MeasureLogDxeFwVol - %r\\n\", FinalStatus); /*0xffe1953e*/\n if ( byte_FFE2177C ) /*0xffe19552*/\n PeiPcdSetSku(1, 50563599, ParamArg, (int)&unk_FFE216E8, 0); /*0xffe19561*/\n DelayMicroseconds(1, 50563599); /*0xffe1956e*/\n return FinalStatus; /*0xffe19573*/\n }\n else\n {\n return MeasureStatus; /*0xffe19522*/\n }\n }\n return Status; /*0xffe19575*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20094","name":"aDEnterMeasurel","string":"[%d] Enter MeasureLogDxeFwVol\n"},{"addr":"0xffe1af12","name":"InitHashContext"},{"addr":"0xffe200b4","name":"aFwvolhobcountX","string":"FwVolHobCount = %x \n"},{"addr":"0xffe200cc","name":"aTpmfwvolhobISi","string":"TpmFwVolHob[i].Size = %x \n"},{"addr":"0xffe200e8","name":"aTpmfwvolhobIBa","string":"TpmFwVolHob[i].baseAddress = %lx \n"},{"addr":"0xffe1af3d","name":"AllocateAndMeasureFwVol"},{"addr":"0xffe1afd3","name":"HashFirmwareVolume"},{"addr":"0xffe19320","name":"TpmMeasureDigestIntoPCR"},{"addr":"0xffe2010c","name":"aMeasurelogdxef","string":"MeasureLogDxeFwVol - %r\n"},{"addr":"0xffe1fddf","name":"PeiPcdSetSku"},{"addr":"0xffe216e8","name":"unk_FFE216E8"},{"addr":"0xffe2177c","name":"byte_FFE2177C"},{"addr":"0xffe1b094","name":"DelayMicroseconds"}]} + FvIndex = 0; /*0xffe195cb*/ + PeiServices = this; /*0xffe195d1*/ + TcgPpi = 0; /*0xffe195d3*/ + PeiServicesCopy = this; /*0xffe195dc*/ + TpmPpi = 0; /*0xffe195e0*/ + FvIndex_1 = 0; /*0xffe195e4*/ + TcgProtocol = 0; /*0xffe195e6*/ + HobHandle = 0; /*0xffe195ea*/ + if ( LocateTcgOrTpmPpi((int)this, (int)&TcgPpi, (int)&TpmPpi) >= 0 ) /*0xffe195f6*/ + { + FirmwareVolumeInfo = GetFirmwareVolumeInfo(); /*0xffe19611*/ + FirmwareVolumeInfo_1 = FirmwareVolumeInfo; /*0xffe19616*/ + p_FirmwareVolumeInfo = FirmwareVolumeInfo; /*0xffe19618*/ + if ( FirmwareVolumeInfo ) /*0xffe1961e*/ + { + RomAreaPtr = RomAreaDescs; /*0xffe19623*/ + TpmStatus = *(_DWORD *)(FirmwareVolumeInfo + 28); /*0xffe19627*/ + do /*0xffe19693*/ + { + if ( (*(_DWORD *)(FirmwareVolumeInfo_1 + 36) & 0x8200) == 0x8200 /*0xffe19647*/ + || (*(_BYTE *)(FirmwareVolumeInfo_1 + 36) & 0xA) != 0 && (*(_DWORD *)(FirmwareVolumeInfo_1 + 36) & 0x400) == 0 ) + { + FvAddress = *(_DWORD *)(FirmwareVolumeInfo_1 + 28); /*0xffe1964f*/ + FvSize = *(_DWORD *)(FirmwareVolumeInfo_1 + 20); /*0xffe19649*/ + v17 = *(_DWORD *)(FirmwareVolumeInfo_1 + 16); /*0xffe19653*/ + *(RomAreaPtr - 2) = v17; /*0xffe1965b*/ + *(RomAreaPtr - 1) = FvSize; /*0xffe1965e*/ + *RomAreaPtr = FvAddress; /*0xffe19661*/ + DebugPrintWrapper(64, "RomArea->Address = %x \n", v17); /*0xffe19663*/ + DebugPrintWrapper(64, "RomArea->Size = %x \n", *(_DWORD *)(FirmwareVolumeInfo_1 + 28)); /*0xffe19672*/ + ++FvIndex_1; /*0xffe1967a*/ + RomAreaPtr += 6; /*0xffe1967b*/ + } + PeiServicesGetBootMode((int)&p_FirmwareVolumeInfo, &TpmStatus, (char *)FirmwareVolumeInfo_1); /*0xffe19687*/ + FirmwareVolumeInfo_1 = p_FirmwareVolumeInfo; /*0xffe1968c*/ + } + while ( p_FirmwareVolumeInfo ); /*0xffe19693*/ + FvIndex = 0; /*0xffe19695*/ + } + else + { + HobFvBase = -15663104; /*0xffe1969b*/ + HobFvSize = 0; /*0xffe196a3*/ + FvIndex_1 = 1; /*0xffe196a7*/ + LODWORD(RomAreaDescs[0]) = 11137024; /*0xffe196a8*/ + } + HobStatus = (*(int ( **)(int *, int, unsigned int, int *))(*PeiServices + 52))( /*0xffe196c1*/ + PeiServices, + 4, + 24 * (FvIndex_1 + 1), + &HobHandle); + HobStatus_1 = HobStatus; /*0xffe196c4*/ + if ( HobStatus >= 0 ) /*0xffe196cb*/ + { + DebugPrintWrapper(64, "Hob created \n"); /*0xffe196e6*/ + GuidDataPtr = (_DWORD *)(HobHandle + 8); /*0xffe196f6*/ + *(_DWORD *)(HobHandle + 8) = unk_FFE216D8; /*0xffe196f9*/ + *++GuidDataPtr = unk_FFE216DC; /*0xffe196fa*/ + *++GuidDataPtr = unk_FFE216E0; /*0xffe196fb*/ + GuidDataPtr[1] = unk_FFE216E4; /*0xffe196fc*/ + FvIndex = 0; /*0xffe196fd*/ + HobStatus_1 = 0; /*0xffe196ff*/ + } + else + { + DebugPrintWrapper(64, "Failed to create TCG/TPM Hob Status = %r \n", HobStatus); /*0xffe196d5*/ + } + if ( HobStatus_1 >= 0 ) /*0xffe19703*/ + { + if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(*PeiServices + 32))( /*0xffe19723*/ + PeiServices, + &unk_FFE21638, + 0, + 0, + &TcgProtocol) >= 0 ) + { + TpmStatus_1 = (*(int ( **)(int *, char *))(TcgProtocol + 4))(PeiServices, EventLogBuffer); /*0xffe1973c*/ + TpmStatus = TpmStatus_1; /*0xffe1973f*/ + if ( TpmStatus_1 >= 0 ) /*0xffe19747*/ + { + HobPtr = HobHandle; /*0xffe1974d*/ + FwVolHobEntry = (unsigned int *)(HobHandle + 24); /*0xffe19751*/ + if ( FvIndex_1 ) /*0xffe19756*/ + { + FirstRomAreaValue = RomAreaDescs[0]; /*0xffe1975c*/ + do /*0xffe197e1*/ + { + if ( FvIndex ) /*0xffe19762*/ + { + *FwVolHobEntry = 0; /*0xffe19779*/ + FwVolHobEntry[5] = RomAreaDescs[3 *FvIndex]; /*0xffe19780*/ + FwVolHobEntry[3] = *(&HobFvBase + 6 *FvIndex); /*0xffe19787*/ + HobValue = *(&HobFvSize + 6 *FvIndex); /*0xffe1978a*/ + } + else + { + FwVolHobEntry[3] = HobFvBase; /*0xffe19768*/ + HobValue = HobFvSize; /*0xffe1976b*/ + FwVolHobEntry[5] = FirstRomAreaValue; /*0xffe1976f*/ + *FwVolHobEntry = FvIndex_1; /*0xffe19772*/ + } + v18 = FwVolHobEntry[5]; /*0xffe1978e*/ + FwVolHobEntry[1] = 0; /*0xffe19791*/ + FwVolHobEntry[4] = HobValue; /*0xffe1979c*/ + DebugPrintWrapper(64, "TpmFwVolHob->Size = %x \n", v18); /*0xffe1979f*/ + DebugPrintWrapper(64, "TpmFwVolHob->baseAddress = %x \n", FwVolHobEntry[3]); /*0xffe197b4*/ + DebugPrintWrapper(64, "TpmFwVolHob->Tcg2SpecVersion = %x \n", FwVolHobEntry[1]); /*0xffe197c3*/ + DebugPrintWrapper(64, "TpmFwVolHob address = %x \n", FwVolHobEntry); /*0xffe197d3*/ + FwVolHobEntry += 6; /*0xffe197db*/ + ++FvIndex; /*0xffe197de*/ + } + while ( FvIndex < FvIndex_1 ); /*0xffe197e1*/ + HobPtr = HobHandle; /*0xffe197e7*/ + PeiServices = PeiServicesCopy; /*0xffe197eb*/ + } + MeasureLogDxeFwVol(PeiServices, (int *)(HobPtr + 24), (void ( **)(_DWORD, int))TcgPpi, TpmPpi); /*0xffe197fc*/ + return TpmStatus; /*0xffe19801*/ + } + } + else + { + return -2147483634; /*0xffe19725*/ + } + } + else + { + return HobStatus_1; /*0xffe19705*/ + } + } + else + { + DebugPrintWrapper(0x80000000, "\n LocateTcgPpi is failed \n"); /*0xffe19602*/ + return -2147483634; /*0xffe19607*/ + } + return TpmStatus_1; /*0xffe19807*/ +} -{"addr":"0xffe1957d","code":"int PeiServicesGetBootMode(int p_FirmwareVolumeInfo, _DWORD *p_TpmStatus, char *FirmwareVolumeInfo)\n{\n unsigned int BootGuardPolicy; // eax\n\n if ( !p_FirmwareVolumeInfo ) /*0xffe19585*/\n return -2147483646; /*0xffe19587*/\n if ( FirmwareVolumeInfo ) /*0xffe19594*/\n BootGuardPolicy = GetBootGuardPolicy(FirmwareVolumeInfo); /*0xffe195a8*/\n else\n BootGuardPolicy = GetFirmwareVolumeInfo(); /*0xffe19596*/\n *(_DWORD *)p_FirmwareVolumeInfo = BootGuardPolicy; /*0xffe1959b*/\n if ( !BootGuardPolicy ) /*0xffe1959f*/\n return -2147483634; /*0xffe195a1*/\n *p_TpmStatus = *(_DWORD *)(*(_DWORD *)p_FirmwareVolumeInfo + 28); /*0xffe195b4*/\n return 0; /*0xffe195b8*/\n}","refs":[{"addr":"0xffe1b933","name":"GetBootGuardPolicy"},{"addr":"0xffe1b910","name":"GetFirmwareVolumeInfo"}]} +int PeiServicesInstallPpi(int a1) +{ + int v1; // esi -{"addr":"0xffe195bb","code":"int __thiscall TcgPlatformAfterMemInit(int *this)\n{\n unsigned int FvIndex; // edi\n int *PeiServices; // ebx\n unsigned int FvIndex_1; // ebp\n int TpmStatus_1; // eax\n unsigned int FirmwareVolumeInfo; // eax\n int FirmwareVolumeInfo_1; // esi\n _DWORD *RomAreaPtr; // edi\n int FvSize; // ecx\n int FvAddress; // eax\n int HobStatus; // eax\n int HobStatus_1; // esi\n _DWORD *GuidDataPtr; // edi\n int HobPtr; // edx\n unsigned int *FwVolHobEntry; // esi\n unsigned int FirstRomAreaValue; // ebx\n unsigned int HobValue; // eax\n int v17; // [esp-8h] [ebp-148h]\n unsigned int v18; // [esp-4h] [ebp-144h]\n int HobHandle; // [esp+14h] [ebp-12Ch] BYREF\n int TpmStatus; // [esp+18h] [ebp-128h] BYREF\n int p_FirmwareVolumeInfo; // [esp+1Ch] [ebp-124h] BYREF\n int TcgProtocol; // [esp+20h] [ebp-120h] BYREF\n int TpmPpi; // [esp+24h] [ebp-11Ch] BYREF\n int TcgPpi; // [esp+28h] [ebp-118h] BYREF\n int *PeiServicesCopy; // [esp+2Ch] [ebp-114h]\n int HobFvBase; // [esp+3Ch] [ebp-104h]\n unsigned int HobFvSize; // [esp+40h] [ebp-100h]\n _QWORD RomAreaDescs[28]; // [esp+44h] [ebp-FCh] BYREF\n char EventLogBuffer[28]; // [esp+124h] [ebp-1Ch] BYREF\n\n FvIndex = 0; /*0xffe195cb*/\n PeiServices = this; /*0xffe195d1*/\n TcgPpi = 0; /*0xffe195d3*/\n PeiServicesCopy = this; /*0xffe195dc*/\n TpmPpi = 0; /*0xffe195e0*/\n FvIndex_1 = 0; /*0xffe195e4*/\n TcgProtocol = 0; /*0xffe195e6*/\n HobHandle = 0; /*0xffe195ea*/\n if ( LocateTcgOrTpmPpi((int)this, (int)&TcgPpi, (int)&TpmPpi) >= 0 ) /*0xffe195f6*/\n {\n FirmwareVolumeInfo = GetFirmwareVolumeInfo(); /*0xffe19611*/\n FirmwareVolumeInfo_1 = FirmwareVolumeInfo; /*0xffe19616*/\n p_FirmwareVolumeInfo = FirmwareVolumeInfo; /*0xffe19618*/\n if ( FirmwareVolumeInfo ) /*0xffe1961e*/\n {\n RomAreaPtr = RomAreaDescs; /*0xffe19623*/\n TpmStatus = *(_DWORD *)(FirmwareVolumeInfo + 28); /*0xffe19627*/\n do /*0xffe19693*/\n {\n if ( (*(_DWORD *)(FirmwareVolumeInfo_1 + 36) & 0x8200) == 0x8200 /*0xffe19647*/\n || (*(_BYTE *)(FirmwareVolumeInfo_1 + 36) & 0xA) != 0 && (*(_DWORD *)(FirmwareVolumeInfo_1 + 36) & 0x400) == 0 )\n {\n FvAddress = *(_DWORD *)(FirmwareVolumeInfo_1 + 28); /*0xffe1964f*/\n FvSize = *(_DWORD *)(FirmwareVolumeInfo_1 + 20); /*0xffe19649*/\n v17 = *(_DWORD *)(FirmwareVolumeInfo_1 + 16); /*0xffe19653*/\n *(RomAreaPtr - 2) = v17; /*0xffe1965b*/\n *(RomAreaPtr - 1) = FvSize; /*0xffe1965e*/\n *RomAreaPtr = FvAddress; /*0xffe19661*/\n DebugPrintWrapper(64, \"RomArea->Address = %x \\n\", v17); /*0xffe19663*/\n DebugPrintWrapper(64, \"RomArea->Size = %x \\n\", *(_DWORD *)(FirmwareVolumeInfo_1 + 28)); /*0xffe19672*/\n ++FvIndex_1; /*0xffe1967a*/\n RomAreaPtr += 6; /*0xffe1967b*/\n }\n PeiServicesGetBootMode((int)&p_FirmwareVolumeInfo, &TpmStatus, (char *)FirmwareVolumeInfo_1); /*0xffe19687*/\n FirmwareVolumeInfo_1 = p_FirmwareVolumeInfo; /*0xffe1968c*/\n }\n while ( p_FirmwareVolumeInfo ); /*0xffe19693*/\n FvIndex = 0; /*0xffe19695*/\n }\n else\n {\n HobFvBase = -15663104; /*0xffe1969b*/\n HobFvSize = 0; /*0xffe196a3*/\n FvIndex_1 = 1; /*0xffe196a7*/\n LODWORD(RomAreaDescs[0]) = 11137024; /*0xffe196a8*/\n }\n HobStatus = (*(int ( **)(int *, int, unsigned int, int *))(*PeiServices + 52))( /*0xffe196c1*/\n PeiServices,\n 4,\n 24 * (FvIndex_1 + 1),\n &HobHandle);\n HobStatus_1 = HobStatus; /*0xffe196c4*/\n if ( HobStatus >= 0 ) /*0xffe196cb*/\n {\n DebugPrintWrapper(64, \"Hob created \\n\"); /*0xffe196e6*/\n GuidDataPtr = (_DWORD *)(HobHandle + 8); /*0xffe196f6*/\n *(_DWORD *)(HobHandle + 8) = unk_FFE216D8; /*0xffe196f9*/\n *++GuidDataPtr = unk_FFE216DC; /*0xffe196fa*/\n *++GuidDataPtr = unk_FFE216E0; /*0xffe196fb*/\n GuidDataPtr[1] = unk_FFE216E4; /*0xffe196fc*/\n FvIndex = 0; /*0xffe196fd*/\n HobStatus_1 = 0; /*0xffe196ff*/\n }\n else\n {\n DebugPrintWrapper(64, \"Failed to create TCG/TPM Hob Status = %r \\n\", HobStatus); /*0xffe196d5*/\n }\n if ( HobStatus_1 >= 0 ) /*0xffe19703*/\n {\n if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(*PeiServices + 32))( /*0xffe19723*/\n PeiServices,\n &unk_FFE21638,\n 0,\n 0,\n &TcgProtocol) >= 0 )\n {\n TpmStatus_1 = (*(int ( **)(int *, char *))(TcgProtocol + 4))(PeiServices, EventLogBuffer); /*0xffe1973c*/\n TpmStatus = TpmStatus_1; /*0xffe1973f*/\n if ( TpmStatus_1 >= 0 ) /*0xffe19747*/\n {\n HobPtr = HobHandle; /*0xffe1974d*/\n FwVolHobEntry = (unsigned int *)(HobHandle + 24); /*0xffe19751*/\n if ( FvIndex_1 ) /*0xffe19756*/\n {\n FirstRomAreaValue = RomAreaDescs[0]; /*0xffe1975c*/\n do /*0xffe197e1*/\n {\n if ( FvIndex ) /*0xffe19762*/\n {\n *FwVolHobEntry = 0; /*0xffe19779*/\n FwVolHobEntry[5] = RomAreaDescs[3 *FvIndex]; /*0xffe19780*/\n FwVolHobEntry[3] = *(&HobFvBase + 6 *FvIndex); /*0xffe19787*/\n HobValue = *(&HobFvSize + 6 *FvIndex); /*0xffe1978a*/\n }\n else\n {\n FwVolHobEntry[3] = HobFvBase; /*0xffe19768*/\n HobValue = HobFvSize; /*0xffe1976b*/\n FwVolHobEntry[5] = FirstRomAreaValue; /*0xffe1976f*/\n *FwVolHobEntry = FvIndex_1; /*0xffe19772*/\n }\n v18 = FwVolHobEntry[5]; /*0xffe1978e*/\n FwVolHobEntry[1] = 0; /*0xffe19791*/\n FwVolHobEntry[4] = HobValue; /*0xffe1979c*/\n DebugPrintWrapper(64, \"TpmFwVolHob->Size = %x \\n\", v18); /*0xffe1979f*/\n DebugPrintWrapper(64, \"TpmFwVolHob->baseAddress = %x \\n\", FwVolHobEntry[3]); /*0xffe197b4*/\n DebugPrintWrapper(64, \"TpmFwVolHob->Tcg2SpecVersion = %x \\n\", FwVolHobEntry[1]); /*0xffe197c3*/\n DebugPrintWrapper(64, \"TpmFwVolHob address = %x \\n\", FwVolHobEntry); /*0xffe197d3*/\n FwVolHobEntry += 6; /*0xffe197db*/\n ++FvIndex; /*0xffe197de*/\n }\n while ( FvIndex < FvIndex_1 ); /*0xffe197e1*/\n HobPtr = HobHandle; /*0xffe197e7*/\n PeiServices = PeiServicesCopy; /*0xffe197eb*/\n }\n MeasureLogDxeFwVol(PeiServices, (int *)(HobPtr + 24), (void ( **)(_DWORD, int))TcgPpi, TpmPpi); /*0xffe197fc*/\n return TpmStatus; /*0xffe19801*/\n }\n }\n else\n {\n return -2147483634; /*0xffe19725*/\n }\n }\n else\n {\n return HobStatus_1; /*0xffe19705*/\n }\n }\n else\n {\n DebugPrintWrapper(0x80000000, \"\\n LocateTcgPpi is failed \\n\"); /*0xffe19602*/\n return -2147483634; /*0xffe19607*/\n }\n return TpmStatus_1; /*0xffe19807*/\n}","refs":[{"addr":"0xffe1b910","name":"GetFirmwareVolumeInfo"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20180","name":"aRomareaAddress","string":"RomArea->Address = %x \n"},{"addr":"0xffe20198","name":"aRomareaSizeX","string":"RomArea->Size = %x \n"},{"addr":"0xffe1957d","name":"PeiServicesGetBootMode"},{"addr":"0xffe20154","name":"aHobCreated","string":"Hob created \n"},{"addr":"0xffe216d8","name":"unk_FFE216D8"},{"addr":"0xffe216dc","name":"unk_FFE216DC"},{"addr":"0xffe216e0","name":"unk_FFE216E0"},{"addr":"0xffe216e4","name":"unk_FFE216E4"},{"addr":"0xffe20128","name":"aFailedToCreate","string":"Failed to create TCG/TPM Hob Status = %r \n"},{"addr":"0xffe201b0","name":"aTpmfwvolhobSiz","string":"TpmFwVolHob->Size = %x \n"},{"addr":"0xffe201cc","name":"aTpmfwvolhobBas","string":"TpmFwVolHob->baseAddress = %x \n"},{"addr":"0xffe201ec","name":"aTpmfwvolhobTcg","string":"TpmFwVolHob->Tcg2SpecVersion = %x \n"},{"addr":"0xffe20210","name":"aTpmfwvolhobAdd","string":"TpmFwVolHob address = %x \n"},{"addr":"0xffe193fd","name":"MeasureLogDxeFwVol"},{"addr":"0xffe21638","name":"unk_FFE21638"},{"addr":"0xffe20164","name":"aLocatetcgppiIs","string":"\n LocateTcgPpi is failed \n"},{"addr":"0xffe1b0e8","name":"LocateTcgOrTpmPpi"}]} + v1 = a1; /*0xffe19813*/ + if ( (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)a1 + 32))(a1, &unk_FFE216C8, 0, 0, &a1) < 0 ) /*0xffe1982e*/ + return 0; /*0xffe19839*/ + else + return (*(int ( **)(int))a1)(v1); /*0xffe19834*/ +} -{"addr":"0xffe1980f","code":"int PeiServicesInstallPpi(int a1)\n{\n int v1; // esi\n\n v1 = a1; /*0xffe19813*/\n if ( (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)a1 + 32))(a1, &unk_FFE216C8, 0, 0, &a1) < 0 ) /*0xffe1982e*/\n return 0; /*0xffe19839*/\n else\n return (*(int ( **)(int))a1)(v1); /*0xffe19834*/\n}","refs":[{"addr":"0xffe216c8","name":"unk_FFE216C8"}]} +int PeiServicesRegisterPpiNotify(int ( **n17)(void *)) +{ + int ( **PeiServicesCopy)(void *); // ebx + int ( *PeiServiceFuncs)(void *); // eax + int Status; // eax + char TpmCapabilityBuffer[36]; // [esp+4h] [ebp-74h] BYREF + _DWORD TpmCapData[9]; // [esp+28h] [ebp-50h] BYREF + __int16 v6; // [esp+4Ch] [ebp-2Ch] BYREF + int TpmCmdData1; // [esp+4Eh] [ebp-2Ah] + int TpmCmdData2; // [esp+52h] [ebp-26h] + char TpmCmdBuffer[6]; // [esp+56h] [ebp-22h] BYREF + _BYTE TpmResponseData[6]; // [esp+5Ch] [ebp-1Ch] BYREF + int TpmResultCode; // [esp+62h] [ebp-16h] + char TpmPcrIndex[4]; // [esp+68h] [ebp-10h] BYREF + char TpmCmdParam[4]; // [esp+6Ch] [ebp-Ch] BYREF + int TcgPpiHandle; // [esp+70h] [ebp-8h] BYREF + int TpmPpiInterface; // [esp+74h] [ebp-4h] BYREF -{"addr":"0xffe1983e","code":"int PeiServicesRegisterPpiNotify(int ( **n17)(void *))\n{\n int ( **PeiServicesCopy)(void *); // ebx\n int ( *PeiServiceFuncs)(void *); // eax\n int Status; // eax\n char TpmCapabilityBuffer[36]; // [esp+4h] [ebp-74h] BYREF\n _DWORD TpmCapData[9]; // [esp+28h] [ebp-50h] BYREF\n __int16 v6; // [esp+4Ch] [ebp-2Ch] BYREF\n int TpmCmdData1; // [esp+4Eh] [ebp-2Ah]\n int TpmCmdData2; // [esp+52h] [ebp-26h]\n char TpmCmdBuffer[6]; // [esp+56h] [ebp-22h] BYREF\n _BYTE TpmResponseData[6]; // [esp+5Ch] [ebp-1Ch] BYREF\n int TpmResultCode; // [esp+62h] [ebp-16h]\n char TpmPcrIndex[4]; // [esp+68h] [ebp-10h] BYREF\n char TpmCmdParam[4]; // [esp+6Ch] [ebp-Ch] BYREF\n int TcgPpiHandle; // [esp+70h] [ebp-8h] BYREF\n int TpmPpiInterface; // [esp+74h] [ebp-4h] BYREF\n\n PeiServicesCopy = n17; /*0xffe19845*/\n *(_DWORD *)TpmPcrIndex = 0x2000; /*0xffe1984d*/\n PeiServiceFuncs = *n17; /*0xffe19856*/\n *(_DWORD *)TpmCmdParam = 2048; /*0xffe1985f*/\n TpmPpiInterface = 0; /*0xffe19866*/\n TcgPpiHandle = 0; /*0xffe19869*/\n if ( (*((int ( **)(int ( **)(void *), void *, _DWORD, _DWORD, int ( ***)(void *)))PeiServiceFuncs /*0xffe19874*/\n + 8))(\n n17,\n &unk_FFE21618,\n 0,\n 0,\n &n17) >= 0 )\n return (*n17)(PeiServicesCopy); /*0xffe1987d*/\n if ( IsTpmPresent() ) /*0xffe19882*/\n return 0; /*0xffe19889*/\n TpmCmdData1 = 201326592; /*0xffe19894*/\n v6 = -16128; /*0xffe1989b*/\n TpmCmdData2 = 167772224; /*0xffe1989f*/\n if ( !IsTpmPresent() ) /*0xffe198a6*/\n TpmSelfTest(PeiServicesCopy); /*0xffe198b1*/\n if ( LocateTcgOrTpmPpi((int)PeiServicesCopy, (int)&TpmPpiInterface, (int)&TcgPpiHandle) < 0 ) /*0xffe198c7*/\n return -2147483634; /*0xffe198ce*/\n qmemcpy(TpmCapData, TpmTcgGetCapability(TpmCapabilityBuffer), sizeof(TpmCapData)); /*0xffe198e9*/\n if ( BYTE2(TpmCapData[5]) == 1 ) /*0xffe198fa*/\n {\n Status = (*(int ( **)(int, int ( **)(void *)))TpmPpiInterface)(TpmPpiInterface, PeiServicesCopy); /*0xffe198fc*/\n if ( Status >= 0 ) /*0xffe19902*/\n {\n CopyMem(TpmCmdBuffer, TpmCmdParam, 2u); /*0xffe19910*/\n (*(void ( **)(int, int ( **)(void *), int, __int16 *, int, _BYTE *))(TcgPpiHandle + 8))( /*0xffe19926*/\n TcgPpiHandle,\n PeiServicesCopy,\n 12,\n &v6,\n 10,\n TpmResponseData);\n Status = (*(int ( **)(int, int ( **)(void *)))(TpmPpiInterface + 4))( /*0xffe1992e*/\n TpmPpiInterface,\n PeiServicesCopy);\n if ( Status >= 0 ) /*0xffe19936*/\n return 0; /*0xffe199d2*/\n }\n }\n else\n {\n Status = (*(int ( **)(int, int ( **)(void *)))TpmPpiInterface)(TpmPpiInterface, PeiServicesCopy); /*0xffe19941*/\n if ( Status >= 0 ) /*0xffe19947*/\n {\n CopyMem(TpmCmdBuffer, TpmPcrIndex, 2u); /*0xffe19955*/\n (*(void ( **)(int, int ( **)(void *), int, __int16 *, int, _BYTE *))(TcgPpiHandle + 8))( /*0xffe1996b*/\n TcgPpiHandle,\n PeiServicesCopy,\n 12,\n &v6,\n 10,\n TpmResponseData);\n CopyMem(TpmCmdBuffer, TpmCmdParam, 2u); /*0xffe19976*/\n (*(void ( **)(int, int ( **)(void *), int, __int16 *, int, _BYTE *))(TcgPpiHandle + 8))( /*0xffe1998c*/\n TcgPpiHandle,\n PeiServicesCopy,\n 12,\n &v6,\n 10,\n TpmResponseData);\n Status = (*(int ( **)(int, int ( **)(void *)))(TpmPpiInterface + 4))( /*0xffe19994*/\n TpmPpiInterface,\n PeiServicesCopy);\n if ( Status >= 0 ) /*0xffe1999c*/\n {\n if ( TpmResultCode ) /*0xffe199a2*/\n {\n DelayMicroseconds(-2147483646, 50563590); /*0xffe199ae*/\n return -2147483641; /*0xffe199b8*/\n }\n if ( *(_WORD *)TpmCmdParam == 1024 ) /*0xffe199c3*/\n DelayMicroseconds(1, 50563590); /*0xffe199cd*/\n return 0; /*0xffe199cd*/\n }\n }\n }\n return Status; /*0xffe199d4*/\n}","refs":[{"addr":"0xffe21618","name":"unk_FFE21618"},{"addr":"0xffe1b0b4","name":"IsTpmPresent"},{"addr":"0xffe1b3d8","name":"TpmSelfTest"},{"addr":"0xffe1b0e8","name":"LocateTcgOrTpmPpi"},{"addr":"0xffe1b64b","name":"TpmTcgGetCapability"},{"addr":"0xffe19baa","name":"CopyMem"},{"addr":"0xffe1b094","name":"DelayMicroseconds"}]} + PeiServicesCopy = n17; /*0xffe19845*/ + *(_DWORD *)TpmPcrIndex = 0x2000; /*0xffe1984d*/ + PeiServiceFuncs = *n17; /*0xffe19856*/ + *(_DWORD *)TpmCmdParam = 2048; /*0xffe1985f*/ + TpmPpiInterface = 0; /*0xffe19866*/ + TcgPpiHandle = 0; /*0xffe19869*/ + if ( (*((int ( **)(int ( **)(void *), void *, _DWORD, _DWORD, int ( ***)(void *)))PeiServiceFuncs /*0xffe19874*/ + + 8))( + n17, + &unk_FFE21618, + 0, + 0, + &n17) >= 0 ) + return (*n17)(PeiServicesCopy); /*0xffe1987d*/ + if ( IsTpmPresent() ) /*0xffe19882*/ + return 0; /*0xffe19889*/ + TpmCmdData1 = 201326592; /*0xffe19894*/ + v6 = -16128; /*0xffe1989b*/ + TpmCmdData2 = 167772224; /*0xffe1989f*/ + if ( !IsTpmPresent() ) /*0xffe198a6*/ + TpmSelfTest(PeiServicesCopy); /*0xffe198b1*/ + if ( LocateTcgOrTpmPpi((int)PeiServicesCopy, (int)&TpmPpiInterface, (int)&TcgPpiHandle) < 0 ) /*0xffe198c7*/ + return -2147483634; /*0xffe198ce*/ + qmemcpy(TpmCapData, TpmTcgGetCapability(TpmCapabilityBuffer), sizeof(TpmCapData)); /*0xffe198e9*/ + if ( BYTE2(TpmCapData[5]) == 1 ) /*0xffe198fa*/ + { + Status = (*(int ( **)(int, int ( **)(void *)))TpmPpiInterface)(TpmPpiInterface, PeiServicesCopy); /*0xffe198fc*/ + if ( Status >= 0 ) /*0xffe19902*/ + { + CopyMem(TpmCmdBuffer, TpmCmdParam, 2u); /*0xffe19910*/ + (*(void ( **)(int, int ( **)(void *), int, __int16 *, int, _BYTE *))(TcgPpiHandle + 8))( /*0xffe19926*/ + TcgPpiHandle, + PeiServicesCopy, + 12, + &v6, + 10, + TpmResponseData); + Status = (*(int ( **)(int, int ( **)(void *)))(TpmPpiInterface + 4))( /*0xffe1992e*/ + TpmPpiInterface, + PeiServicesCopy); + if ( Status >= 0 ) /*0xffe19936*/ + return 0; /*0xffe199d2*/ + } + } + else + { + Status = (*(int ( **)(int, int ( **)(void *)))TpmPpiInterface)(TpmPpiInterface, PeiServicesCopy); /*0xffe19941*/ + if ( Status >= 0 ) /*0xffe19947*/ + { + CopyMem(TpmCmdBuffer, TpmPcrIndex, 2u); /*0xffe19955*/ + (*(void ( **)(int, int ( **)(void *), int, __int16 *, int, _BYTE *))(TcgPpiHandle + 8))( /*0xffe1996b*/ + TcgPpiHandle, + PeiServicesCopy, + 12, + &v6, + 10, + TpmResponseData); + CopyMem(TpmCmdBuffer, TpmCmdParam, 2u); /*0xffe19976*/ + (*(void ( **)(int, int ( **)(void *), int, __int16 *, int, _BYTE *))(TcgPpiHandle + 8))( /*0xffe1998c*/ + TcgPpiHandle, + PeiServicesCopy, + 12, + &v6, + 10, + TpmResponseData); + Status = (*(int ( **)(int, int ( **)(void *)))(TpmPpiInterface + 4))( /*0xffe19994*/ + TpmPpiInterface, + PeiServicesCopy); + if ( Status >= 0 ) /*0xffe1999c*/ + { + if ( TpmResultCode ) /*0xffe199a2*/ + { + DelayMicroseconds(-2147483646, 50563590); /*0xffe199ae*/ + return -2147483641; /*0xffe199b8*/ + } + if ( *(_WORD *)TpmCmdParam == 1024 ) /*0xffe199c3*/ + DelayMicroseconds(1, 50563590); /*0xffe199cd*/ + return 0; /*0xffe199cd*/ + } + } + } + return Status; /*0xffe199d4*/ +} -{"addr":"0xffe199d9","code":"int TcgPlatformPeiEntry(int *n17)\n{\n int *n17_1; // ebx\n int v2; // eax\n int result; // eax\n int v4; // eax\n int v5; // eax\n _DWORD *v6; // edi\n int v7; // eax\n _DWORD *v8; // edi\n _DWORD *v9; // esi\n int v10; // eax\n int v11; // esi\n int v12; // eax\n int v13; // [esp+10h] [ebp-14h] BYREF\n int v14; // [esp+14h] [ebp-10h] BYREF\n int ( **v15)(int *); // [esp+18h] [ebp-Ch] BYREF\n int v16; // [esp+1Ch] [ebp-8h] BYREF\n int v17; // [esp+20h] [ebp-4h] BYREF\n\n n17_1 = n17; /*0xffe199dd*/\n v2 = *n17; /*0xffe199e8*/\n v17 = 0; /*0xffe199f5*/\n v16 = 0; /*0xffe199f9*/\n if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int ( ***)(int *)))(v2 + 32))( /*0xffe19a05*/\n n17,\n &unk_FFE21688,\n 0,\n 0,\n &v15) >= 0 )\n return (*v15)(n17_1); /*0xffe19a0c*/\n v4 = (*(int ( **)(int *, int **))(*n17_1 + 40))(n17_1, &n17); /*0xffe19a1c*/\n if ( v4 < 0 ) /*0xffe19a23*/\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v4); /*0xffe19a30*/\n v5 = AssertReport(); /*0xffe19a38*/\n if ( v5 ) /*0xffe19a3f*/\n (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe19a50*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\TCG2\\\\Common\\\\AmiTcgPlatformPei\\\\AmiTcgPlatformPeiAfterMem.c\",\n 1452,\n \"!EFI_ERROR (Status)\");\n }\n result = TpmStartup(n17_1, (int)n17); /*0xffe19a5c*/\n if ( result >= 0 )\n {\n if ( n17 == (int *)17 || n17 == (int *)32 )\n {\n return 0; /*0xffe19ba0*/\n }\n else\n {\n result = (*(int ( **)(int *, int, int, int *))(*n17_1 + 52))(n17_1, 4, 28, &v13); /*0xffe19a8b*/\n if ( result >= 0 )\n {\n v6 = (_DWORD *)(v13 + 8); /*0xffe19aa4*/\n *(_DWORD *)(v13 + 8) = unk_FFE21608; /*0xffe19aa7*/\n *++v6 = unk_FFE2160C; /*0xffe19aa8*/\n *++v6 = unk_FFE21610; /*0xffe19aa9*/\n v6[1] = unk_FFE21614; /*0xffe19aaa*/\n v7 = *n17_1; /*0xffe19abb*/\n v13 += 24; /*0xffe19ac4*/\n (*(void ( **)(int, int **, int))(v7 + 80))(v13, &n17, 4); /*0xffe19ac8*/\n result = (*(int ( **)(int *, int, int, int *))(*n17_1 + 52))(n17_1, 4, 320, &v14); /*0xffe19ada*/\n if ( result >= 0 )\n {\n v8 = (_DWORD *)(v14 + 8); /*0xffe19af3*/\n *(_DWORD *)(v14 + 8) = unk_FFE216B8; /*0xffe19af6*/\n *++v8 = unk_FFE216BC; /*0xffe19af7*/\n *++v8 = unk_FFE216C0; /*0xffe19af8*/\n v8[1] = unk_FFE216C4; /*0xffe19af9*/\n v9 = (_DWORD *)(v14 + 24); /*0xffe19b08*/\n (*(void ( **)(int, int, _DWORD))(*n17_1 + 84))(v14 + 24, 40, 0); /*0xffe19b0f*/\n *v9 = 256; /*0xffe19b16*/\n if ( LocateTcgOrTpmPpi((int)n17_1, (int)&v17, (int)&v16) >= 0 )\n {\n if ( !IsTpmPresent() )\n {\n v10 = BootGuardTcg2MeasureCRTMVersion(n17_1); /*0xffe19b40*/\n v11 = v10; /*0xffe19b45*/\n if ( v10 < 0 )\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v10); /*0xffe19b58*/\n v12 = AssertReport(); /*0xffe19b60*/\n if ( v12 ) /*0xffe19b67*/\n (*(void ( **)(const char *, int, const char *))(v12 + 4))( /*0xffe19b78*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\TCG2\\\\Common\\\\AmiTcgPlatformPei\\\\AmiTcgPlatformPeiAfterMem.c\",\n 1504,\n \"!EFI_ERROR (Status)\");\n DebugPrintWrapper(0x80000000, \"Error: Failure %d %a Status = %r\\n\", 1507, \"MemoryPresentEntry\", v11);\n }\n }\n return TcgPlatformAfterMemInit(n17_1); /*0xffe19b99*/\n }\n else\n {\n return -2147483634; /*0xffe19b2f*/\n }\n }\n }\n }\n }\n return result; /*0xffe19ba2*/\n}","refs":[{"addr":"0xffe21688","name":"unk_FFE21688"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20048","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe20230","name":"aEHsAmimodulepk_0","string":"e:\\hs\\AmiModulePkg\\TCG2\\Common\\AmiTcgPlatformPei\\AmiTcgPlatformPeiAfterMem.c"},{"addr":"0xffe2006c","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe1b535","name":"TpmStartup"},{"addr":"0xffe21608","name":"unk_FFE21608"},{"addr":"0xffe2160c","name":"unk_FFE2160C"},{"addr":"0xffe21610","name":"unk_FFE21610"},{"addr":"0xffe21614","name":"unk_FFE21614"},{"addr":"0xffe216b8","name":"unk_FFE216B8"},{"addr":"0xffe216bc","name":"unk_FFE216BC"},{"addr":"0xffe216c0","name":"unk_FFE216C0"},{"addr":"0xffe216c4","name":"unk_FFE216C4"},{"addr":"0xffe1cd0b","name":"BootGuardTcg2MeasureCRTMVersion"},{"addr":"0xffe20294","name":"aErrorFailureDA","string":"Error: Failure %d %a Status = %r\n"},{"addr":"0xffe20280","name":"aMemorypresente","string":"MemoryPresentEntry"},{"addr":"0xffe1b0b4","name":"IsTpmPresent"},{"addr":"0xffe195bb","name":"TcgPlatformAfterMemInit"},{"addr":"0xffe1b0e8","name":"LocateTcgOrTpmPpi"}]} +int TcgPlatformPeiEntry(int *n17) +{ + int *n17_1; // ebx + int v2; // eax + int result; // eax + int v4; // eax + int v5; // eax + _DWORD *v6; // edi + int v7; // eax + _DWORD *v8; // edi + _DWORD *v9; // esi + int v10; // eax + int v11; // esi + int v12; // eax + int v13; // [esp+10h] [ebp-14h] BYREF + int v14; // [esp+14h] [ebp-10h] BYREF + int ( **v15)(int *); // [esp+18h] [ebp-Ch] BYREF + int v16; // [esp+1Ch] [ebp-8h] BYREF + int v17; // [esp+20h] [ebp-4h] BYREF -{"addr":"0xffe19baa","code":"char *CopyMem(char *dst, char *src, unsigned int count)\n{\n int v5; // eax\n int v6; // eax\n\n if ( count - 1 > -1 - (int)dst ) /*0xffe19bc0*/\n {\n v5 = AssertReport(); /*0xffe19bc2*/\n if ( v5 ) /*0xffe19bc9*/\n (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe19bd7*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CopyMemWrapper.c\",\n 56,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)\");\n }\n if ( count - 1 > -1 - (int)src ) /*0xffe19be1*/\n {\n v6 = AssertReport(); /*0xffe19be3*/\n if ( v6 ) /*0xffe19bea*/\n (*(void ( **)(const char *, int, const char *))(v6 + 4))( /*0xffe19bf8*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CopyMemWrapper.c\",\n 57,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)\");\n }\n if ( dst == src ) /*0xffe19c00*/\n return dst; /*0xffe19c02*/\n else\n return SetMem(dst, src, count); /*0xffe19c0c*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe202f0","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c"},{"addr":"0xffe202b8","name":"aLength10xfffff","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)"},{"addr":"0xffe2032c","name":"aLength10xfffff_0","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)"},{"addr":"0xffe19188","name":"SetMem"}]} + n17_1 = n17; /*0xffe199dd*/ + v2 = *n17; /*0xffe199e8*/ + v17 = 0; /*0xffe199f5*/ + v16 = 0; /*0xffe199f9*/ + if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int ( ***)(int *)))(v2 + 32))( /*0xffe19a05*/ + n17, + &unk_FFE21688, + 0, + 0, + &v15) >= 0 ) + return (*v15)(n17_1); /*0xffe19a0c*/ + v4 = (*(int ( **)(int *, int **))(*n17_1 + 40))(n17_1, &n17); /*0xffe19a1c*/ + if ( v4 < 0 ) /*0xffe19a23*/ + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v4); /*0xffe19a30*/ + v5 = AssertReport(); /*0xffe19a38*/ + if ( v5 ) /*0xffe19a3f*/ + (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe19a50*/ + "e:\\hs\\AmiModulePkg\\TCG2\\Common\\AmiTcgPlatformPei\\AmiTcgPlatformPeiAfterMem.c", + 1452, + "!EFI_ERROR (Status)"); + } + result = TpmStartup(n17_1, (int)n17); /*0xffe19a5c*/ + if ( result >= 0 ) + { + if ( n17 == (int *)17 || n17 == (int *)32 ) + { + return 0; /*0xffe19ba0*/ + } + else + { + result = (*(int ( **)(int *, int, int, int *))(*n17_1 + 52))(n17_1, 4, 28, &v13); /*0xffe19a8b*/ + if ( result >= 0 ) + { + v6 = (_DWORD *)(v13 + 8); /*0xffe19aa4*/ + *(_DWORD *)(v13 + 8) = unk_FFE21608; /*0xffe19aa7*/ + *++v6 = unk_FFE2160C; /*0xffe19aa8*/ + *++v6 = unk_FFE21610; /*0xffe19aa9*/ + v6[1] = unk_FFE21614; /*0xffe19aaa*/ + v7 = *n17_1; /*0xffe19abb*/ + v13 += 24; /*0xffe19ac4*/ + (*(void ( **)(int, int **, int))(v7 + 80))(v13, &n17, 4); /*0xffe19ac8*/ + result = (*(int ( **)(int *, int, int, int *))(*n17_1 + 52))(n17_1, 4, 320, &v14); /*0xffe19ada*/ + if ( result >= 0 ) + { + v8 = (_DWORD *)(v14 + 8); /*0xffe19af3*/ + *(_DWORD *)(v14 + 8) = unk_FFE216B8; /*0xffe19af6*/ + *++v8 = unk_FFE216BC; /*0xffe19af7*/ + *++v8 = unk_FFE216C0; /*0xffe19af8*/ + v8[1] = unk_FFE216C4; /*0xffe19af9*/ + v9 = (_DWORD *)(v14 + 24); /*0xffe19b08*/ + (*(void ( **)(int, int, _DWORD))(*n17_1 + 84))(v14 + 24, 40, 0); /*0xffe19b0f*/ + *v9 = 256; /*0xffe19b16*/ + if ( LocateTcgOrTpmPpi((int)n17_1, (int)&v17, (int)&v16) >= 0 ) + { + if ( !IsTpmPresent() ) + { + v10 = BootGuardTcg2MeasureCRTMVersion(n17_1); /*0xffe19b40*/ + v11 = v10; /*0xffe19b45*/ + if ( v10 < 0 ) + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10); /*0xffe19b58*/ + v12 = AssertReport(); /*0xffe19b60*/ + if ( v12 ) /*0xffe19b67*/ + (*(void ( **)(const char *, int, const char *))(v12 + 4))( /*0xffe19b78*/ + "e:\\hs\\AmiModulePkg\\TCG2\\Common\\AmiTcgPlatformPei\\AmiTcgPlatformPeiAfterMem.c", + 1504, + "!EFI_ERROR (Status)"); + DebugPrintWrapper(0x80000000, "Error: Failure %d %a Status = %r\n", 1507, "MemoryPresentEntry", v11); + } + } + return TcgPlatformAfterMemInit(n17_1); /*0xffe19b99*/ + } + else + { + return -2147483634; /*0xffe19b2f*/ + } + } + } + } + } + return result; /*0xffe19ba2*/ +} + +char *CopyMem(char *dst, char *src, unsigned int count) +{ + int v5; // eax + int v6; // eax + + if ( count - 1 > -1 - (int)dst ) /*0xffe19bc0*/ + { + v5 = AssertReport(); /*0xffe19bc2*/ + if ( v5 ) /*0xffe19bc9*/ + (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe19bd7*/ + "e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c", + 56, + "(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)"); + } + if ( count - 1 > -1 - (int)src ) /*0xffe19be1*/ + { + v6 = AssertReport(); /*0xffe19be3*/ + if ( v6 ) /*0xffe19bea*/ + (*(void ( **)(const char *, int, const char *))(v6 + 4))( /*0xffe19bf8*/ + "e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c", + 57, + "(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)"); + } + if ( dst == src ) /*0xffe19c00*/ + return dst; /*0xffe19c02*/ + else + return SetMem(dst, src, count); /*0xffe19c0c*/ +} + +int AssertReport() +{ + int Next; // eax + _BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF + int v3; // [esp+4h] [ebp-4h] BYREF + + Next = HobGetNext(); /*0xffe19c1e*/ + if ( (*(int ( **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)Next + 32))(Next, &unk_FFE21648, 0, v2, &v3) >= 0 ) /*0xffe19c3d*/ + return v3; /*0xffe19c43*/ + else + return 0; /*0xffe19c3f*/ +} + +int DebugPrintWrapper(int a1, const char *a2, ...) +{ + int result; // eax + int ( **v3)(int, const char *, char *); // esi + va_list va; // [esp+10h] [ebp+Ch] BYREF + + va_start(va, a2); + result = AssertReport(); /*0xffe19c4b*/ + v3 = (int ( **)(int, const char *, char *))result; /*0xffe19c50*/ + if ( result ) /*0xffe19c54*/ + { + result = HobGetBaseAddress(); /*0xffe19c56*/ + if ( (result & a1) != 0 ) /*0xffe19c61*/ + return (*v3)(a1, a2, (char *)va); /*0xffe19c6d*/ + } + return result; /*0xffe19c72*/ +} + +int DebugVPrint( + int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ, + int n48, + const char *Idtr____((void__)_0)) +{ + int result; // eax + + result = AssertReport(); /*0xffe19c7a*/ + if ( result ) /*0xffe19c81*/ + return (*(int ( **)(int, int, const char *))(result + 4))( /*0xffe19c89*/ + e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ, + n48, + Idtr____((void__)_0)); + return result; /*0xffe19c8f*/ +} + +int DebugAssertPrint(int a1, char **p_src, int a3, int DigestedData) +{ + int v6; // edi + char HashContext[92]; // [esp+8h] [ebp-5Ch] BYREF + + InitHashContext(HashContext); /*0xffe19ca1*/ + if ( a1 ) /*0xffe19ca8*/ + { + v6 = a3 - (_DWORD)p_src; /*0xffe19cae*/ + do /*0xffe19cc4*/ + { + AllocateAndMeasureFwVol(HashContext, *p_src, *(unsigned int *)((char *)p_src + v6)); /*0xffe19cb8*/ + ++p_src; /*0xffe19cbd*/ + --a1; /*0xffe19cc1*/ + } + while ( a1 ); /*0xffe19cc4*/ + } + return HashFirmwareVolume(DigestedData, (int)HashContext); /*0xffe19cd2*/ +} + +char *AllocateAndMeasureFwVol(char *HashContext, char *src, unsigned int n8) +{ + int v4; // ebx + unsigned int v5; // ecx + char *result; // eax + int n8_1; // esi + unsigned int i; // ebx + char *src_1; // [esp+10h] [ebp-4h] + + src_1 = src; /*0xffe1af48*/ + v4 = (*((_DWORD *)HashContext + 5) >> 3) & 0x3F; /*0xffe1af54*/ + v5 = *((_DWORD *)HashContext + 5) + 8 *n8; /*0xffe1af57*/ + *((_DWORD *)HashContext + 5) = v5; /*0xffe1af5f*/ + if ( v5 < 8 *n8 ) /*0xffe1af64*/ + ++*((_DWORD *)HashContext + 6); /*0xffe1af66*/ + *((_DWORD *)HashContext + 6) += n8 >> 29; /*0xffe1af6e*/ + result = (char *)(v4 + n8); /*0xffe1af71*/ + if ( v4 + n8 <= 0x3F ) /*0xffe1af77*/ + { + n8_1 = 0; /*0xffe1afb9*/ + } + else + { + n8_1 = 64 - v4; /*0xffe1af7c*/ + CopyMem(&HashContext[v4 + 28], src, 64 - v4); /*0xffe1af86*/ + result = (char *)TpmMeasureFwVolWithType(HashContext, HashContext + 28); /*0xffe1af91*/ + for ( i = n8_1 + 63; ; i += 64 ) /*0xffe1af96*/ + { + src = src_1; /*0xffe1afad*/ + if ( i >= n8 ) /*0xffe1afb3*/ + break; /*0xffe1afb3*/ + result = (char *)TpmMeasureFwVolWithType(HashContext, &src_1[i - 63]); /*0xffe1afa2*/ + n8_1 += 64; /*0xffe1afa7*/ + } + v4 = 0; /*0xffe1afb5*/ + } + if ( n8 != n8_1 ) /*0xffe1afbb*/ + return CopyMem(&HashContext[v4 + 28], &src[n8_1], n8 - n8_1); /*0xffe1afc7*/ + return result; /*0xffe1afcd*/ +} + +void *HashFirmwareVolume(int DigestedData, int HashContext) +{ + unsigned int n0x14; // edi + unsigned int i; // edx + char src[8]; // [esp+10h] [ebp-8h] BYREF + + n0x14 = 0; /*0xffe1afd9*/ + for ( i = 0; i < 8; ++i ) + src[i] = *(_DWORD *)((i < 4 ? 4 : 0) + HashContext + 20) >> (8 * (3 - (i & 3))); + AllocateAndMeasureFwVol((char *)HashContext, ::src, 1u); /*0xffe1b00f*/ + while ( (*(_DWORD *)(HashContext + 20) & 0x1F8) != 0x1C0 ) /*0xffe1b034*/ + AllocateAndMeasureFwVol((char *)HashContext, src_0, 1u); /*0xffe1b020*/ + AllocateAndMeasureFwVol((char *)HashContext, src, 8u); /*0xffe1b03c*/ + do /*0xffe1b060*/ + { + *(_BYTE *)(n0x14 + DigestedData) = *(_DWORD *)(HashContext + 4 * (n0x14 >> 2)) >> (8 * (3 - (n0x14 & 3))); /*0xffe1b059*/ + ++n0x14; /*0xffe1b05c*/ + } + while ( n0x14 < 0x14 ); /*0xffe1b060*/ + GetEndOfHobList((void *)(HashContext + 28), 0x40u); /*0xffe1b068*/ + GetEndOfHobList((void *)HashContext, 0x14u); /*0xffe1b072*/ + GetEndOfHobList((void *)(HashContext + 20), 8u); /*0xffe1b07c*/ + return GetEndOfHobList(src, 8u); /*0xffe1b08d*/ +} + +int DelayMicroseconds(int n2, int n50563599) +{ + if ( byte_FFE2177C ) /*0xffe1b09b*/ + return PeiPcdSetSku(n2, n50563599, n2, (int)&unk_FFE216E8, 0); /*0xffe1b0a5*/ + else + return -2147483645; /*0xffe1b0ae*/ +} + +char IsTpmPresent() +{ + unsigned int n6; // ecx + + n6 = 0; /*0xffe1b0bb*/ + while ( word_FFE21730[n6] != MEMORY[0xFED40F00] || word_FFE21732[n6] != MEMORY[0xFED40F02] ) /*0xffe1b0d6*/ + { + n6 += 2; /*0xffe1b0d8*/ + if ( n6 >= 6 ) /*0xffe1b0de*/ + return 0; /*0xffe1b0e3*/ + } + return 1; /*0xffe1b0e2*/ +} + +int LocateTcgOrTpmPpi(int n17, int p_TcgPpi, int p_TpmPpi) +{ + int v4; // eax + int v5; // esi + int result; // eax + + v4 = (*(int ( **)(int, void *, _DWORD, _DWORD, int))(*(_DWORD *)n17 + 32))(n17, &unk_FFE21678, 0, 0, p_TcgPpi); /*0xffe1b0fa*/ + v5 = v4; /*0xffe1b0fd*/ + if ( v4 >= 0 ) /*0xffe1b104*/ + { + result = (*(int ( **)(int, void *, _DWORD, _DWORD, int))(*(_DWORD *)n17 + 32))( /*0xffe1b11c*/ + n17, + &unk_FFE21628, + 0, + 0, + p_TpmPpi); + v5 = result; /*0xffe1b11f*/ + if ( result >= 0 ) /*0xffe1b126*/ + return result; /*0xffe1b126*/ + DebugPrintWrapper(0x80000000, "gTcgPpiguid NOT found %r \n", result); /*0xffe1b133*/ + } + else + { + DebugPrintWrapper(0x80000000, "gTpmDevicePpiguid NOT found %r \n", v4); /*0xffe1b10c*/ + } + return v5; /*0xffe1b13d*/ +} + +int TpmStartupCommand(int *n17, int n32) +{ + int PeiServiceFuncs; // eax + int Status; // eax + __int16 n3; // bx + int v7; // [esp-18h] [ebp-64h] + _BYTE TpmResponseBuf[28]; // [esp+Ch] [ebp-40h] BYREF + __int16 TpmCmdTag; // [esp+28h] [ebp-24h] BYREF + int TpmCmdOrdinal; // [esp+2Ah] [ebp-22h] + int TpmCmdParamData; // [esp+2Eh] [ebp-1Eh] + __int16 TpmStartupType; // [esp+32h] [ebp-1Ah] + unsigned __int16 TpmResponseTag; // [esp+34h] [ebp-18h] BYREF + unsigned int TpmResponseSize; // [esp+36h] [ebp-16h] + unsigned int TpmResponseCode; // [esp+3Ah] [ebp-12h] + int TpmEventResult; // [esp+40h] [ebp-Ch] BYREF + int TcgPpiHandle; // [esp+44h] [ebp-8h] BYREF + int TpmPpiHandle; // [esp+48h] [ebp-4h] BYREF + + PeiServiceFuncs = *n17; /*0xffe1b155*/ + TpmPpiHandle = 0; /*0xffe1b15e*/ + TpmEventResult = 0; /*0xffe1b161*/ + TcgPpiHandle = 0; /*0xffe1b164*/ + Status = (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(PeiServiceFuncs + 32))( /*0xffe1b167*/ + n17, + &unk_FFE21638, + 0, + 0, + &TcgPpiHandle); + if ( Status >= 0 ) + { + if ( TcgPpiHandle ) + { + Status = (*(int ( **)(int *, _BYTE *))(TcgPpiHandle + 4))(n17, TpmResponseBuf); /*0xffe1b185*/ + if ( Status >= 0 ) + { + if ( TpmResponseBuf[4] == 1 ) /*0xffe1b196*/ + n32 = 32; /*0xffe1b19a*/ + n3 = (n32 == 17) + 1; /*0xffe1b1a4*/ + if ( n32 == 32 ) /*0xffe1b1aa*/ + n3 = 3; /*0xffe1b1ae*/ + if ( LocateTcgOrTpmPpi((int)n17, (int)&TpmPpiHandle, (int)&TpmEventResult) < 0 ) /*0xffe1b1c0*/ + return -2147483634; /*0xffe1b1c7*/ + Status = (*(int ( **)(int, int *))TpmPpiHandle)(TpmPpiHandle, n17); /*0xffe1b1d1*/ + if ( Status >= 0 ) + { + TpmCmdTag = -16128; /*0xffe1b1e6*/ + TpmCmdOrdinal = 201326592; /*0xffe1b1f3*/ + TpmCmdParamData = -1728053248; /*0xffe1b202*/ + TpmStartupType = __ROL2__(n3, 8); /*0xffe1b209*/ + (*(void ( **)(int, int *, int, __int16 *, int, unsigned __int16 *))(TpmEventResult + 8))( /*0xffe1b20d*/ + TpmEventResult, + n17, + 12, + &TpmCmdTag, + 10, + &TpmResponseTag); + DebugPrintWrapper( + 64, + "Tcg Startup Command Return Code: size: %x; retCode:%x; tag:%x; bytes %08x\n", + ((TpmResponseSize & 0xFF00 | (TpmResponseSize << 16)) << 8) + | ((HIWORD(TpmResponseSize) | TpmResponseSize & 0xFF0000) >> 8), + ((TpmResponseCode & 0xFF00 | (TpmResponseCode << 16)) << 8) + | ((HIWORD(TpmResponseCode) | TpmResponseCode & 0xFF0000) >> 8), + (TpmResponseTag << 8) | HIBYTE(TpmResponseTag), + v7); + if ( !TpmResponseSize ) + { + DebugPrintWrapper(0x80000000, "Tcg Startup: returning device error\n"); + return -2147483641; /*0xffe1b292*/ + } + if ( TpmResponseCode ) /*0xffe1b298*/ + { + DebugPrintWrapper(0x80000000, "Error sending TPM Startup CMD\n"); /*0xffe1b29f*/ + return -2147483641; /*0xffe1b29f*/ + } + return (*(int ( **)(int, int *))(TpmPpiHandle + 4))(TpmPpiHandle, n17); /*0xffe1b2a6*/ + } + } + } + } + return Status; /*0xffe1b2ab*/ +} + +unsigned int TcmStartup(int n17, int n17_1) +{ + __int16 n3; // si + int v4; // edi + int v5; // [esp-1Ch] [ebp-40h] + int v6; // [esp+8h] [ebp-1Ch] BYREF + unsigned __int16 v7; // [esp+Ch] [ebp-18h] BYREF + unsigned int v8; // [esp+Eh] [ebp-16h] + unsigned int v9; // [esp+12h] [ebp-12h] + __int16 v10; // [esp+18h] [ebp-Ch] BYREF + int n201326592; // [esp+1Ah] [ebp-Ah] + int v12; // [esp+1Eh] [ebp-6h] + __int16 v13; // [esp+22h] [ebp-2h] + + v6 = 0; /*0xffe1b2be*/ + n3 = (n17_1 == 17) + 1; /*0xffe1b2c6*/ + if ( n17_1 == 32 ) /*0xffe1b2cc*/ + n3 = 3; /*0xffe1b2d0*/ + if ( (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)n17 + 32))(n17, &unk_FFE21698, 0, 0, &v6) < 0 ) /*0xffe1b2e8*/ + return -2147483634; /*0xffe1b2ea*/ + v10 = -16128; /*0xffe1b2ff*/ + n201326592 = 201326592; /*0xffe1b311*/ + v12 = -1719664640; /*0xffe1b323*/ + v13 = __ROL2__(n3, 8); /*0xffe1b32b*/ + v4 = (*(int ( **)(int, __int16 *, int, unsigned __int16 *, int))(v6 + 24))(-19660800, &v10, 12, &v7, 10); /*0xffe1b338*/ + DebugPrintWrapper( + 64, + "Tcg TCM Startup Command Return Code: size: %x; retCode:%x; tag:%x; bytes %08x\n", + ((v8 & 0xFF00 | (v8 << 16)) << 8) | ((HIWORD(v8) | v8 & 0xFF0000) >> 8), + ((v9 & 0xFF00 | (v9 << 16)) << 8) | ((HIWORD(v9) | v9 & 0xFF0000) >> 8), + (v7 << 8) | HIBYTE(v7), + v5); + if ( v8 ) /*0xffe1b3a5*/ + return v4 | ((v9 & 0xFF00 | (v9 << 16)) << 8) | ((v9 & 0xFF0000 | HIWORD(v9)) >> 8); /*0xffe1b3ce*/ + else + return -2147483641; /*0xffe1b3a7*/ +} + +signed int __thiscall TpmSelfTest(void *this) +{ + signed int result; // eax + int v3; // eax + _BYTE v4[6]; // [esp+4h] [ebp-20h] BYREF + unsigned int v5; // [esp+Ah] [ebp-1Ah] + __int16 v6; // [esp+10h] [ebp-14h] BYREF + int n167772160; // [esp+12h] [ebp-12h] + int n1392508928; // [esp+16h] [ebp-Eh] + int v9; // [esp+1Ch] [ebp-8h] BYREF + int ( **v10)(_DWORD, void *); // [esp+20h] [ebp-4h] BYREF + + v10 = 0; /*0xffe1b3de*/ + v9 = 0; /*0xffe1b3e5*/ + if ( LocateTcgOrTpmPpi((int)this, (int)&v10, (int)&v9) < 0 ) /*0xffe1b3f8*/ + return -2147483634; /*0xffe1b3fa*/ + result = (*v10)(v10, this); /*0xffe1b409*/ + if ( result >= 0 ) + { + n167772160 = 167772160; /*0xffe1b417*/ + v6 = -16128; /*0xffe1b41e*/ + n1392508928 = 1392508928; /*0xffe1b42b*/ + v3 = (*(int ( **)(int, void *, int, __int16 *, int, _BYTE *))(v9 + 8))(v9, this, 10, &v6, 10, v4); /*0xffe1b43a*/ + DebugPrintWrapper( + 64, + "TCG Pei: Self Test : status=%x; RetCode=%x\n", + v3, + (((v5 << 16) | v5 & 0xFF00) << 8) | ((HIWORD(v5) | v5 & 0xFF0000) >> 8)); + result = v10[1](v10, this); /*0xffe1b477*/ + if ( result >= 0 ) + return v5 != 0 ? 0x80000007 : 0; + } + return result; /*0xffe1b48e*/ +} + +unsigned int __thiscall TcmSelfTest(int *this) +{ + int v1; // eax + int v3; // eax + _BYTE v4[6]; // [esp+4h] [ebp-1Ch] BYREF + unsigned int v5; // [esp+Ah] [ebp-16h] + __int16 v6; // [esp+10h] [ebp-10h] BYREF + int n167772160; // [esp+12h] [ebp-Eh] + int n1400897536; // [esp+16h] [ebp-Ah] + int v9; // [esp+1Ch] [ebp-4h] BYREF + + v1 = *this; /*0xffe1b499*/ + v9 = 0; /*0xffe1b4aa*/ + if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(v1 + 32))(this, &unk_FFE21698, 0, 0, &v9) < 0 ) /*0xffe1b4b5*/ + return -2147483634; /*0xffe1b4b7*/ + n167772160 = 167772160; /*0xffe1b4c3*/ + v6 = -16128; /*0xffe1b4ca*/ + n1400897536 = 1400897536; /*0xffe1b4d9*/ + v3 = (*(int ( **)(int, __int16 *, int, _BYTE *, int))(v9 + 24))(-19660800, &v6, 10, v4, 10); /*0xffe1b4e9*/ + DebugPrintWrapper( + 64, + "TCG TCM Pei: Self Test : status=%x; RetCode=%x\n", + v3, + (((v5 << 16) | v5 & 0xFF00) << 8) | ((HIWORD(v5) | v5 & 0xFF0000) >> 8)); + return v5 != 0 ? 0x80000007 : 0; +} + +signed int TpmStartup(int *n17, int n17_1) +{ + int v4; // eax + char v5; // bl + signed int result; // eax + unsigned int v7; // esi + _BYTE v8[28]; // [esp+Ch] [ebp-24h] BYREF + _BYTE v9[4]; // [esp+28h] [ebp-8h] BYREF + int v10; // [esp+2Ch] [ebp-4h] BYREF + + v4 = *n17; /*0xffe1b549*/ + v5 = 0; /*0xffe1b54b*/ + v10 = 0; /*0xffe1b554*/ + if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, _BYTE *))(v4 + 32))(n17, &unk_FFE216F8, 0, 0, v9) >= 0 ) /*0xffe1b55f*/ + { + v5 = 1; /*0xffe1b569*/ + DelayMicroseconds(1, 50563587); /*0xffe1b56b*/ + } + result = (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(*n17 + 32))(n17, &unk_FFE21638, 0, 0, &v10); /*0xffe1b580*/ + if ( result >= 0 ) + { + if ( v10 ) + { + result = (*(int ( **)(int *, _BYTE *))(v10 + 4))(n17, v8); /*0xffe1b59e*/ + if ( result >= 0 ) + { + if ( v8[4] == 1 ) + { + if ( v5 ) + return TpmSelfTest(n17) != 0 ? 0x80000007 : 0; + else + return TpmStartupCommand(n17, 32); /*0xffe1b5ba*/ + } + if ( IsTpmPresent() ) /*0xffe1b5d4*/ + { + if ( TcmStartup((int)n17, n17_1) ) /*0xffe1b62c*/ + return -2147483641; /*0xffe1b62c*/ + v7 = TcmSelfTest(n17); /*0xffe1b63c*/ + if ( v7 ) /*0xffe1b640*/ + return -2147483641; /*0xffe1b640*/ + } + else + { + if ( !v5 ) /*0xffe1b5df*/ + { + if ( TpmStartupCommand(n17, n17_1) ) /*0xffe1b5e5*/ + { + DelayMicroseconds(-2147483646, 50563585); /*0xffe1b5f8*/ + return -2147483641; /*0xffe1b602*/ + } + DelayMicroseconds(1, 50563585); /*0xffe1b607*/ + } + v7 = TpmSelfTest(n17); /*0xffe1b613*/ + if ( v7 ) /*0xffe1b617*/ + return -2147483641; /*0xffe1b617*/ + DelayMicroseconds(1, 50563588); /*0xffe1b621*/ + } + return v7; /*0xffe1b642*/ + } + } + } + return result; /*0xffe1b644*/ +} + +void *TpmTcgGetCapability(void *dst) +{ + _DWORD *v1; // ecx + _DWORD *v2; // ebp + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + int v8; // eax + int v10; // [esp+10h] [ebp-120h] BYREF + int v11; // [esp+14h] [ebp-11Ch] BYREF + __int16 v12; // [esp+18h] [ebp-118h] BYREF + int n369098752; // [esp+1Ah] [ebp-116h] + int n1694498816; // [esp+1Eh] [ebp-112h] + int n0x4000000; // [esp+22h] [ebp-10Eh] + int n0x4000000_1; // [esp+26h] [ebp-10Ah] + int n134283264; // [esp+2Ah] [ebp-106h] + _DWORD dst_1[64]; // [esp+30h] [ebp-100h] BYREF + + v2 = v1; /*0xffe1b655*/ + n369098752 = 369098752; /*0xffe1b657*/ + n1694498816 = 1694498816; /*0xffe1b661*/ + v10 = 0; /*0xffe1b66d*/ + v11 = 0; /*0xffe1b677*/ + v12 = -16128; /*0xffe1b67b*/ + n0x4000000 = 0x4000000; /*0xffe1b686*/ + n0x4000000_1 = 0x4000000; /*0xffe1b68a*/ + v3 = *v1; /*0xffe1b68e*/ + n134283264 = 134283264; /*0xffe1b698*/ + v4 = (*(int ( **)(_DWORD *, void *, _DWORD, _DWORD, int *))(v3 + 32))(v1, &unk_FFE21678, 0, 0, &v10); /*0xffe1b6a0*/ + if ( v4 < 0 ) /*0xffe1b6b2*/ + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v4); /*0xffe1b6bf*/ + v5 = AssertReport(); /*0xffe1b6c7*/ + if ( v5 ) /*0xffe1b6ce*/ + (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe1b6d7*/ + "e:\\hs\\AmiModulePkg\\TCG2\\Common\\AmiTcgPlatformPei\\AmiTcgPlatformPeiLib.c", + 1073, + "!EFI_ERROR (Status)"); + } + if ( (*(int ( **)(int, _DWORD *))v10)(v10, v2) ) + { + GetEndOfHobList((int)dst_1, 36); /*0xffe1b6f2*/ + } + else + { + v6 = (*(int ( **)(_DWORD *, void *, _DWORD, _DWORD, int *))(*v2 + 32))(v2, &unk_FFE21628, 0, 0, &v11); /*0xffe1b70c*/ + if ( v6 < 0 ) /*0xffe1b714*/ + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v6); /*0xffe1b721*/ + v7 = AssertReport(); /*0xffe1b729*/ + if ( v7 ) /*0xffe1b730*/ + (*(void ( **)(const char *, int, const char *))(v7 + 4))( /*0xffe1b739*/ + "e:\\hs\\AmiModulePkg\\TCG2\\Common\\AmiTcgPlatformPei\\AmiTcgPlatformPeiLib.c", + 1090, + "!EFI_ERROR (Status)"); + } + v8 = (*(int ( **)(int, _DWORD *, int, __int16 *, int, _DWORD *))(v11 + 8))(v11, v2, 22, &v12, 256, dst_1); /*0xffe1b756*/ + DebugPrintWrapper( + 64, + "GetCapability: %r; size: %x; retCode:%x; tag:%x; bytes %08x\n", + v8, + ((HIWORD(dst_1[0]) & 0xFF00 | (*(_DWORD *)((char *)dst_1 + 2) << 16)) << 8) + | ((HIWORD(*(_DWORD *)((char *)dst_1 + 2)) | *(_DWORD *)((char *)dst_1 + 2) & 0xFF0000u) >> 8), + ((HIWORD(dst_1[1]) & 0xFF00 | (*(_DWORD *)((char *)&dst_1[1] + 2) << 16)) << 8) + | ((HIWORD(*(_DWORD *)((char *)&dst_1[1] + 2)) | *(_DWORD *)((char *)&dst_1[1] + 2) & 0xFF0000u) >> 8), + (HIWORD(dst_1[3]) << 8) | HIBYTE(HIWORD(dst_1[3])), + ((dst_1[4] & 0xFF00 | (dst_1[4] << 16)) << 8) | ((HIWORD(dst_1[4]) | dst_1[4] & 0xFF0000u) >> 8)); + (*(void ( **)(int, _DWORD *))(v10 + 4))(v10, v2); /*0xffe1b7f3*/ + } + qmemcpy(dst, dst_1, 0x24u); /*0xffe1b809*/ + return dst; /*0xffe1b80b*/ +} + +_DWORD *GetBootGuardHobData() +{ + int Next; // eax + int v1; // esi + int v2; // eax + int v3; // ecx + _DWORD *v4; // esi + _DWORD *v5; // eax + unsigned int src_1; // ecx + unsigned int count; // ebx + char *v8; // edi + int v9; // ebp + char *src; // [esp+8h] [ebp-Ch] + int v12; // [esp+Ch] [ebp-8h] BYREF + int v13; // [esp+10h] [ebp-4h] BYREF + + v12 = 0; /*0xffe1b81d*/ + v13 = 0; /*0xffe1b821*/ + Next = HobGetNext(); /*0xffe1b825*/ + if ( (*(int ( **)(int, _DWORD, int *))(*(_DWORD *)Next + 56))(Next, 0, &v12) < 0 ) /*0xffe1b83b*/ + return 0; /*0xffe1b83b*/ + v1 = v12; /*0xffe1b841*/ + v2 = HobGetNext(); /*0xffe1b845*/ + if ( (*(int ( **)(void *, int, int *))(*(_DWORD *)v2 + 104))(&unk_FFE21658, v1, &v13) < 0 ) /*0xffe1b85f*/ + return 0; /*0xffe1b85f*/ + v4 = (_DWORD *)(v13 + 44); /*0xffe1b869*/ + if ( *(_DWORD *)(v13 + 44) != 1280134994 ) /*0xffe1b872*/ + return 0; /*0xffe1b908*/ + v5 = (_DWORD *)BuildGuidHob(v3, 48 * *(_DWORD *)(v13 + 56) + 16); /*0xffe1b882*/ + if ( v5 ) /*0xffe1b88b*/ + { + *v5 = v4[1]; /*0xffe1b890*/ + v5[1] = v4[2]; /*0xffe1b895*/ + src_1 = (unsigned int)(v4 + 4); /*0xffe1b898*/ + v5[2] = 48; /*0xffe1b89b*/ + v5[3] = 0; /*0xffe1b8a2*/ + count = v4[2]; /*0xffe1b8a8*/ + src = (char *)(v4 + 4); /*0xffe1b8af*/ + v8 = (char *)(v5 + 4); /*0xffe1b8b3*/ + if ( v4 + 4 < (_DWORD *)((char *)v4 + count *v4[3] + 16) ) /*0xffe1b8bc*/ + { + v9 = 16 - (_DWORD)v5; /*0xffe1b8be*/ + do /*0xffe1b900*/ + { + if ( count ) /*0xffe1b8c2*/ + { + CopyMem(v8 + 8, src, count); /*0xffe1b8cc*/ + src_1 = (unsigned int)src; /*0xffe1b8d2*/ + } + *((_DWORD *)v8 + 1) = 0; /*0xffe1b8d6*/ + *(_DWORD *)v8 = &v8[v9 + 8]; /*0xffe1b8df*/ + v8 += 48; /*0xffe1b8e1*/ + count = v4[2]; /*0xffe1b8e4*/ + src = (char *)(count + src_1); /*0xffe1b8e9*/ + src_1 += count; /*0xffe1b8fc*/ + } + while ( src_1 < (unsigned int)v4 + count *v4[3] + 16 ); /*0xffe1b900*/ + } + } + return v4; /*0xffe1b90a*/ +} + +unsigned int GetFirmwareVolumeInfo() +{ + _WORD *SystemConfiguration; // ecx + + SystemConfiguration = GetSystemConfiguration(); /*0xffe1b916*/ + if ( !SystemConfiguration ) /*0xffe1b91a*/ + { + GetBootGuardHobData(); /*0xffe1b91c*/ + SystemConfiguration = GetSystemConfiguration(); /*0xffe1b926*/ + } + return SystemConfiguration != 0 ? (unsigned int)(SystemConfiguration + 24) : 0; +} + +unsigned int __thiscall GetBootGuardPolicy(char *this) +{ + char *v1; // esi + char *v2; // edi + unsigned int v3; // esi + + if ( this /*0xffe1b967*/ + && (v1 = this - 8, v2 = &v1[-*(_DWORD *)v1], HobIsSuitable((int)(v2 + 8), (int)&unk_FFE21668)) + && (v3 = (unsigned int)&v1[*((_DWORD *)v2 + 8)], (unsigned int)(v2 + 40) <= v3) + && (unsigned int)&v2[*((unsigned __int16 *)v2 + 1)] > v3 ) + { + return v3 + 8; /*0xffe1b969*/ + } + else + { + return 0; /*0xffe1b96e*/ + } +} + +char CheckBootGuardCapabilityMsr() +{ + unsigned __int64 v0; // rax + + v0 = __readmsr(0x13Au); /*0xffe1b97a*/ + if ( (v0 & 0x100000000LL) != 0 ) /*0xffe1b983*/ + { + DebugPrintWrapper(64, "[BootGuardTCG2.c] Bit 32 BootGuardCapability = 1 in MSR 0x13A\n"); /*0xffe1b98c*/ + DebugPrintWrapper(64, "[BootGuardTCG2.c] Processor supports Boot Guard.\n"); /*0xffe1b998*/ + return 1; /*0xffe1b9a0*/ + } + else + { + DebugPrintWrapper(0x80000000, "[BootGuardTCG2.c] Bit 32 BootGuardCapability = 0 in MSR 0x13A\n"); /*0xffe1b9af*/ + DebugPrintWrapper(0x80000000, "[BootGuardTCG2.c] Processor does not support Boot Guard.\n"); /*0xffe1b9ba*/ + return 0; /*0xffe1b9c2*/ + } +} + +int DebugPrintHexBytes(unsigned int i, int a2) +{ + unsigned int j; // ebx + + for ( j = 0; j < i; ++j ) /*0xffe1b9d7*/ + { + if ( (j & 0xF) == 0 ) /*0xffe1b9dc*/ + DebugPrintWrapper(64, "\n"); /*0xffe1b9e1*/ + DebugPrintWrapper(64, " %02x", *(unsigned __int8 *)(j + a2)); /*0xffe1b9f4*/ + } + return DebugPrintWrapper(64, "\n"); /*0xffe1ba0b*/ +} + +int __thiscall ParseBootGuardStructureId(unsigned __int8 *this) +{ + unsigned int i; // esi + + DebugPrintWrapper(64, "StructureID:"); /*0xffe1ba1b*/ + for ( i = 0; i < 8; ++i ) /*0xffe1ba22*/ + DebugPrintWrapper(64, "%c", *(this + i)); /*0xffe1ba30*/ + return DebugPrintWrapper(64, "\nStructVersion[%02x]\n", *(this + 8)); /*0xffe1ba52*/ +} + +int CheckNemMeasureBootStatus() +{ + unsigned __int64 v0; // rax + char v1; // bl + const char *[BootGuardTCG2.c]_NEM_enabled_in_MSR_0x13A_n; // [esp-4h] [ebp-14h] + + v0 = __readmsr(0x13Au); /*0xffe1ba5e*/ + v1 = v0; /*0xffe1ba60*/ + if ( (v0 & 1) != 0 ) /*0xffe1ba65*/ + [BootGuardTCG2.c]_NEM_enabled_in_MSR_0x13A_n = "[BootGuardTCG2.c] NEM enabled in MSR 0x13A\n"; /*0xffe1ba67*/ + else + [BootGuardTCG2.c]_NEM_enabled_in_MSR_0x13A_n = "[BootGuardTCG2.c] NEM disable in MSR 0x13A\n"; /*0xffe1ba6e*/ + DebugPrintWrapper(64, [BootGuardTCG2.c]_NEM_enabled_in_MSR_0x13A_n); /*0xffe1ba77*/ + if ( (v1 & 0x20) != 0 ) /*0xffe1ba81*/ + DebugPrintWrapper(64, "[BootGuardTCG2.c] Measure Boot enabled in MSR 0x13A\n"); /*0xffe1ba88*/ + else + DebugPrintWrapper(64, "[BootGuardTCG2.c] Measure Boot disable in MSR 0x13A\n"); /*0xffe1ba90*/ + if ( (v1 & 8) != 0 ) /*0xffe1ba9a*/ + DebugPrintWrapper(64, "[BootGuardTCG2.c] Tpm Success in MSR 0x13A\n"); /*0xffe1baa1*/ + else + DebugPrintWrapper(64, "[BootGuardTCG2.c] Tpm Fail in MSR 0x13A\n"); /*0xffe1baa9*/ + if ( (v1 & 0x29) == 0x29 ) + { + DebugPrintWrapper(64, "[BootGuardTCG2.c] : ACM_PostSuccess : EFI_SUCCESS\n"); + return 0; /*0xffe1bac3*/ + } + else + { + DebugPrintWrapper(64, "[BootGuardTCG2.c] : ACM_PostSuccess : EFI_UNSUPPORTED\n"); + return -2147483645; /*0xffe1bad2*/ + } +} + +int LogBootGuardEventInternal( + int TpmEventResult, + _BYTE *EventSizeArray, + const char *Boot_Guard_Measured_S_CRTM, + int n27) +{ + int v4; // ecx + int v5; // ebp + _WORD *HobFromAddress; // eax + _WORD *v8; // ebx + char *v9; // edi + _WORD *v10; // [esp+10h] [ebp-4h] BYREF + + v5 = v4; /*0xffe1bb85*/ + if ( (*(int ( **)(int, _WORD **))(*(_DWORD *)v4 + 48))(v4, &v10) < 0 ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\n", 285); + return -2147483634; /*0xffe1bbb7*/ + } + HobFromAddress = GetHobFromAddress((int)&unk_FFE2176C, v10); /*0xffe1bbc2*/ + if ( !HobFromAddress ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n", 292); + return -2147483634; /*0xffe1bbd7*/ + } + v8 = HobFromAddress + 12; /*0xffe1bbdc*/ + v9 = (char *)HobFromAddress + *((_DWORD *)HobFromAddress + 7) + 24; /*0xffe1bbdf*/ + *((_DWORD *)v9 + 10) = 0; /*0xffe1bbe7*/ + *((_DWORD *)v9 + 11) = 7; /*0xffe1bbeb*/ + v9 += 48; /*0xffe1bbf2*/ + (*(void ( **)(char *, _BYTE *, int))(*(_DWORD *)v5 + 80))(v9, EventSizeArray, 20); /*0xffe1bbf9*/ + *((_DWORD *)v9 + 5) = n27; /*0xffe1bc03*/ + v9 += 24; /*0xffe1bc06*/ + (*(void ( **)(char *, const char *, int))(*(_DWORD *)v5 + 80))(v9, Boot_Guard_Measured_S_CRTM, n27); /*0xffe1bc12*/ + ++*((_DWORD *)v8 + 2); /*0xffe1bc1f*/ + *((_DWORD *)v8 + 1) = v9 - (char *)v8 + n27 - 40; /*0xffe1bc22*/ + return 0; /*0xffe1bc27*/ +} + +int CreateBootGuardTPM12Event(int CallbackParam, char *src) +{ + int v2; // ecx + int v3; // esi + int TpmEventResult; // [esp-4h] [ebp-60h] + int DigestedData[17]; // [esp+8h] [ebp-54h] BYREF + char *p_src; // [esp+4Ch] [ebp-10h] BYREF + int n804; // [esp+50h] [ebp-Ch] BYREF + _WORD *v9; // [esp+54h] [ebp-8h] BYREF + + v3 = v2; /*0xffe1bc40*/ + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : Enter CreateBootGuardTPM12Event(...)\n", 341); + (*(void ( **)(int *, int, _DWORD))(*(_DWORD *)v3 + 84))(DigestedData, 64, 0); /*0xffe1bc54*/ + if ( (*(int ( **)(int, _WORD **))(*(_DWORD *)v3 + 48))(v3, &v9) < 0 ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\n", 349); + return -2147483634; /*0xffe1bc86*/ + } + if ( !GetHobFromAddress((int)&unk_FFE2176C, v9) ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n", 356); + return -2147483634; /*0xffe1bca3*/ + } + p_src = src; /*0xffe1bcab*/ + n804 = 804; /*0xffe1bcb3*/ + DebugAssertPrint(1, &p_src, (int)&n804, (int)DigestedData); /*0xffe1bcc0*/ + return LogBootGuardEventInternal(TpmEventResult, DigestedData, "Boot Guard Measured S-CRTM", 27); /*0xffe1bcdd*/ +} + +int LogBootGuardTpm20EventWrapper( + int n17, + int n7, + int n7a, + _BYTE *HashBuffer, + _BYTE *DigestBuffer, + const char *FIT_Type_0x02_Measured_S_CRTM, + int n30) +{ + _WORD *HobFromAddress; // eax + _WORD *EventLogHeader; // ebx + _DWORD *LogEntryPtr; // edi + _DWORD *NextLogEntry; // edi + _DWORD *HashAlgCount; // esi + char *Sha1DigestBuf; // edi + char *Sha256DigestBuf; // edi + _DWORD *EventDescBuf; // edi + char *NextDescBuf; // edi + char *DescSize; // ecx + int PrevNextEventOffset; // eax + _WORD *HobListPtr; // [esp+14h] [ebp-4h] BYREF + + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : Enter LogBootGuardTPM20Event(...)\n", 394); + if ( (*(int ( **)(int, _WORD **))(*(_DWORD *)n17 + 48))(n17, &HobListPtr) < 0 ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\n", 400); + return -2147483634; /*0xffe1bd2e*/ + } + HobFromAddress = GetHobFromAddress((int)&unk_FFE2173C, HobListPtr); /*0xffe1bd3c*/ + if ( !HobFromAddress ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n", 408); + return -2147483634; /*0xffe1bd51*/ + } + EventLogHeader = HobFromAddress + 12; /*0xffe1bd53*/ + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : TcgLog Addr 0x%x\n", 413, HobFromAddress + 12); + if ( (*((_DWORD *)EventLogHeader + 8) & 3) != 0 ) + { + if ( !*((_DWORD *)EventLogHeader + 3) ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : For Invalid parameter\n", 424); + return -2147483634; /*0xffe1bda5*/ + } + LogEntryPtr = (_DWORD *)*((_DWORD *)EventLogHeader + 4); /*0xffe1bdaa*/ + *LogEntryPtr++ = n7; /*0xffe1bdb4*/ + *LogEntryPtr = n7a; /*0xffe1bdb8*/ + NextLogEntry = LogEntryPtr + 1; /*0xffe1bdba*/ + if ( *((_DWORD *)EventLogHeader + 3) == 1 ) /*0xffe1bdc0*/ + { + (*(void ( **)(_DWORD *, _BYTE *, int))(*(_DWORD *)n17 + 80))(NextLogEntry, HashBuffer, 20); /*0xffe1bdcc*/ + NextLogEntry += 5; /*0xffe1bdd2*/ + } + else if ( *((_DWORD *)EventLogHeader + 3) == 2 ) /*0xffe1bddb*/ + { + *NextLogEntry = 0; /*0xffe1bddd*/ + HashAlgCount = NextLogEntry++; /*0xffe1bde0*/ + if ( (EventLogHeader[16] & 1) != 0 ) /*0xffe1bde8*/ + { + *(_WORD *)NextLogEntry = 4; /*0xffe1bdea*/ + Sha1DigestBuf = (char *)NextLogEntry + 2; /*0xffe1bded*/ + ++*HashAlgCount; /*0xffe1bdf0*/ + (*(void ( **)(char *, _BYTE *, int))(*(_DWORD *)n17 + 80))(Sha1DigestBuf, HashBuffer, 20); /*0xffe1bdfc*/ + NextLogEntry = Sha1DigestBuf + 20; /*0xffe1be02*/ + } + if ( (EventLogHeader[16] & 2) != 0 ) /*0xffe1be09*/ + { + *(_WORD *)NextLogEntry = 11; /*0xffe1be0e*/ + Sha256DigestBuf = (char *)NextLogEntry + 2; /*0xffe1be11*/ + ++*HashAlgCount; /*0xffe1be14*/ + (*(void ( **)(char *, _BYTE *, int))(*(_DWORD *)n17 + 80))(Sha256DigestBuf, DigestBuffer, 32); /*0xffe1be20*/ + NextLogEntry = Sha256DigestBuf + 32; /*0xffe1be26*/ + } + } + *NextLogEntry = n30; /*0xffe1be2d*/ + EventDescBuf = NextLogEntry + 1; /*0xffe1be2f*/ + (*(void ( **)(_DWORD *, const char *, int))(*(_DWORD *)n17 + 80))( /*0xffe1be3b*/ + EventDescBuf, + FIT_Type_0x02_Measured_S_CRTM, + n30); + NextDescBuf = (char *)EventDescBuf + n30; /*0xffe1be41*/ + *((_DWORD *)EventLogHeader + 6) = *((_DWORD *)EventLogHeader + 4); /*0xffe1be45*/ + DescSize = &NextDescBuf[-*((_DWORD *)EventLogHeader + 4)]; /*0xffe1be48*/ + PrevNextEventOffset = *((_DWORD *)EventLogHeader + 5); /*0xffe1be4e*/ + *((_DWORD *)EventLogHeader + 5) = 0; /*0xffe1be51*/ + *((_DWORD *)EventLogHeader + 1) += DescSize; /*0xffe1be55*/ + ++*((_DWORD *)EventLogHeader + 2); /*0xffe1be58*/ + *((_DWORD *)EventLogHeader + 7) = PrevNextEventOffset; /*0xffe1be5b*/ + *((_DWORD *)EventLogHeader + 4) = NextDescBuf; /*0xffe1be60*/ + return 0; /*0xffe1be5e*/ + } + else + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Err ActPcrBanks, No SHA1/SHA256 banks\n", 417); + return -2147483646; /*0xffe1bd8b*/ + } +} -{"addr":"0xffe19c19","code":"int AssertReport()\n{\n int Next; // eax\n _BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF\n int v3; // [esp+4h] [ebp-4h] BYREF\n\n Next = HobGetNext(); /*0xffe19c1e*/\n if ( (*(int ( **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)Next + 32))(Next, &unk_FFE21648, 0, v2, &v3) >= 0 ) /*0xffe19c3d*/\n return v3; /*0xffe19c43*/\n else\n return 0; /*0xffe19c3f*/\n}","refs":[{"addr":"0xffe1cf7d","name":"HobGetNext"},{"addr":"0xffe21648","name":"unk_FFE21648"}]} +int CreateBootGuardTPM20Event( + int n17, + int n7, + int n7a, + char *src, + int n100, + const char *Boot_Guard_Measured_S_CRTM, + int n54) +{ + _WORD *HobFromAddress; // eax + _WORD *v11; // esi + unsigned int n2; // eax + int n100_1; // [esp+10h] [ebp-40h] BYREF + char *p_src; // [esp+14h] [ebp-3Ch] BYREF + _WORD *v15; // [esp+18h] [ebp-38h] BYREF + _BYTE DigestedData[20]; // [esp+1Ch] [ebp-34h] BYREF + char DigestBuffer[32]; // [esp+30h] [ebp-20h] BYREF -{"addr":"0xffe19c4a","code":"int DebugPrintWrapper(int a1, const char *a2, ...)\n{\n int result; // eax\n int ( **v3)(int, const char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, a2);\n result = AssertReport(); /*0xffe19c4b*/\n v3 = (int ( **)(int, const char *, char *))result; /*0xffe19c50*/\n if ( result ) /*0xffe19c54*/\n {\n result = HobGetBaseAddress(); /*0xffe19c56*/\n if ( (result & a1) != 0 ) /*0xffe19c61*/\n return (*v3)(a1, a2, (char *)va); /*0xffe19c6d*/\n }\n return result; /*0xffe19c72*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe1cf2e","name":"HobGetBaseAddress"}]} + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : Enter CreateBootGuardTPM20Event(...)\n", 503); + (*(void ( **)(_BYTE *, int, _DWORD))(*(_DWORD *)n17 + 84))(DigestedData, 20, 0); /*0xffe1be94*/ + (*(void ( **)(char *, int, _DWORD))(*(_DWORD *)n17 + 84))(DigestBuffer, 32, 0); /*0xffe1bea5*/ + if ( (*(int ( **)(int, _WORD **))(*(_DWORD *)n17 + 48))(n17, &v15) < 0 ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\n", 513); + return -2147483634; /*0xffe1bed8*/ + } + HobFromAddress = GetHobFromAddress((int)&unk_FFE2173C, v15); /*0xffe1bee6*/ + if ( !HobFromAddress ) + { + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n", 521); + return -2147483634; /*0xffe1befb*/ + } + v11 = HobFromAddress + 12; /*0xffe1befd*/ + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : TcgLog Addr 0x%x\n", 526, HobFromAddress + 12); + p_src = src; /*0xffe1bf1d*/ + n2 = *((_DWORD *)v11 + 3); /*0xffe1bf21*/ + n100_1 = n100; /*0xffe1bf24*/ + if ( n2 < 2 ) /*0xffe1bf2b*/ + { + DebugAssertPrint(1, &p_src, (int)&n100_1, (int)DigestedData); /*0xffe1bf8b*/ + } + else if ( n2 == 2 ) /*0xffe1bf34*/ + { + if ( (v11[16] & 1) != 0 && n100 ) /*0xffe1bf3e*/ + DebugAssertPrint(1, &p_src, (int)&n100_1, (int)DigestedData); /*0xffe1bf51*/ + if ( (v11[16] & 2) != 0 ) /*0xffe1bf5c*/ + { + if ( n100 ) /*0xffe1bf60*/ + GetFirstGuidHob(1, (char *)&p_src, &n100_1, DigestBuffer); /*0xffe1bf73*/ + } + } + return LogBootGuardTpm20EventWrapper(n17, n7, n7a, DigestedData, DigestBuffer, Boot_Guard_Measured_S_CRTM, n54); /*0xffe1bfb4*/ +} -{"addr":"0xffe19c74","code":"int DebugVPrint(\n int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n int n48,\n const char *Idtr____((void__)_0))\n{\n int result; // eax\n\n result = AssertReport(); /*0xffe19c7a*/\n if ( result ) /*0xffe19c81*/\n return (*(int ( **)(int, int, const char *))(result + 4))( /*0xffe19c89*/\n e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n n48,\n Idtr____((void__)_0));\n return result; /*0xffe19c8f*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"}]} +int __thiscall LocateTcgPpi(int *this) +{ + int v2; // eax + int v3; // eax + int v4; // esi + _DWORD v6[8]; // [esp+10h] [ebp-128h] BYREF + _BYTE v7[224]; // [esp+30h] [ebp-108h] BYREF + _BYTE v8[4]; // [esp+110h] [ebp-28h] BYREF + _DWORD v9[4]; // [esp+114h] [ebp-24h] BYREF + int ( **v10)(_DWORD, int *, _DWORD *, int, _DWORD *, _BYTE *); // [esp+124h] [ebp-14h] BYREF + _DWORD v11[4]; // [esp+128h] [ebp-10h] BYREF -{"addr":"0xffe19c92","code":"int DebugAssertPrint(int a1, char **p_src, int a3, int DigestedData)\n{\n int v6; // edi\n char HashContext[92]; // [esp+8h] [ebp-5Ch] BYREF\n\n InitHashContext(HashContext); /*0xffe19ca1*/\n if ( a1 ) /*0xffe19ca8*/\n {\n v6 = a3 - (_DWORD)p_src; /*0xffe19cae*/\n do /*0xffe19cc4*/\n {\n AllocateAndMeasureFwVol(HashContext, *p_src, *(unsigned int *)((char *)p_src + v6)); /*0xffe19cb8*/\n ++p_src; /*0xffe19cbd*/\n --a1; /*0xffe19cc1*/\n }\n while ( a1 ); /*0xffe19cc4*/\n }\n return HashFirmwareVolume(DigestedData, (int)HashContext); /*0xffe19cd2*/\n}","refs":[{"addr":"0xffe1af12","name":"InitHashContext"},{"addr":"0xffe1af3d","name":"AllocateAndMeasureFwVol"},{"addr":"0xffe1afd3","name":"HashFirmwareVolume"}]} + v11[0] = 1416362782; /*0xffe1c063*/ + v11[1] = 1079319820; /*0xffe1c06f*/ + v2 = *this; /*0xffe1c076*/ + v11[2] = -196170332; /*0xffe1c081*/ + v11[3] = 985143231; /*0xffe1c089*/ + v10 = 0; /*0xffe1c090*/ + v9[0] = 394082770; /*0xffe1c093*/ + v9[1] = 1086866360; /*0xffe1c09a*/ + v9[2] = 1362944410; /*0xffe1c0a1*/ + v9[3] = 513070744; /*0xffe1c0a8*/ + v6[0] = 0; /*0xffe1c0af*/ + v6[1] = 8; /*0xffe1c0b5*/ + v6[7] = 16; /*0xffe1c0bf*/ + (*(void ( **)(_BYTE *, _DWORD *, int))(v2 + 80))(v7, v11, 16); /*0xffe1c0c5*/ + v3 = (*(int ( **)(int *, _DWORD *, _DWORD, _DWORD, int ( ***)(_DWORD, int *, _DWORD *, int, _DWORD *, _BYTE *)))(*this + 32))( /*0xffe1c0d5*/ + this, + v9, + 0, + 0, + &v10); + v4 = v3; /*0xffe1c0d8*/ + if ( v3 >= 0 ) /*0xffe1c0df*/ + return (*v10)(v10, this, v11, 16, v6, v8); /*0xffe1c112*/ + DebugPrintWrapper(0x80000000, "[%d]: gTcgPpiguid NOT found %r \n", 645, v3); + return v4; /*0xffe1c117*/ +} -Output truncated. Run: curl -o .ida-mcp/cb1a0aa1-1d00-43ff-9c01-e12fe71c7e5f.json http://127.0.0.1:13379/output/cb1a0aa1-1d00-43ff-9c01-e12fe71c7e5f.json +int __thiscall DetectTpmDeviceType(int *this) +{ + int PeiServicesPtr; // eax + _WORD *HobFromAddress; // eax + int Tpm12Status; // eax + _DWORD Tpm12GuidData[4]; // [esp+Ch] [ebp-1Ch] BYREF + int Tpm12PpiHandle; // [esp+1Ch] [ebp-Ch] BYREF + _WORD *HobListPtr; // [esp+20h] [ebp-8h] BYREF + int Tpm20PpiHandle; // [esp+24h] [ebp-4h] BYREF -{"addr":"0xffe1af12","code":"void __thiscall InitHashContext(_DWORD *this)\n{\n *(this + 6) = 0; /*0xffe1af12*/\n *(this + 5) = 0; /*0xffe1af16*/\n *this = 1732584193; /*0xffe1af1a*/\n *(this + 1) = -271733879; /*0xffe1af20*/\n *(this + 2) = -1732584194; /*0xffe1af27*/\n *(this + 3) = 271733878; /*0xffe1af2e*/\n *(this + 4) = -1009589776; /*0xffe1af35*/\n}"} + Tpm12GuidData[0] = 394082770; /*0xffe1c128*/ + Tpm12GuidData[1] = 1086866360; /*0xffe1c131*/ + Tpm20PpiHandle = 0; /*0xffe1c13b*/ + PeiServicesPtr = *this; /*0xffe1c13f*/ + Tpm12PpiHandle = 0; /*0xffe1c149*/ + Tpm12GuidData[2] = 1362944410; /*0xffe1c14c*/ + Tpm12GuidData[3] = 513070744; /*0xffe1c153*/ + if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(PeiServicesPtr + 32))( + this, + &unk_FFE2175C, + 0, + 0, + &Tpm20PpiHandle) < 0 ) + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : Can not locate Ami Tree Ppi, It may TPM 1.2 Device\n", 702); + goto LABEL_11; /*0xffe1c16e*/ + } + if ( (*(int ( **)(int *, _WORD **))(*this + 48))(this, &HobListPtr) < 0 ) + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs, It may TPM 1.2 Device\n", 710); + goto LABEL_11; /*0xffe1c18a*/ + } + HobFromAddress = GetHobFromAddress((int)&unk_FFE2174C, HobListPtr); /*0xffe1c194*/ + if ( *((_BYTE *)HobFromAddress + 24) != 1 ) + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : TrEEDeviceHob->Tpm20DeviceState = 0, It may TPM 1.2 Device\n", 725); +LABEL_11: + Tpm12Status = (*(int ( **)(int *, _DWORD *, _DWORD, _DWORD, int *))(*this + 32))( /*0xffe1c1ea*/ + this, + Tpm12GuidData, + 0, + 0, + &Tpm12PpiHandle); + if ( Tpm12Status >= 0 ) + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TPM 1.2 found\n", 743); + return 1; /*0xffe1c244*/ + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: gTcgPpiguid NOT found %r\n", 738, Tpm12Status); + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: No TPM\n", 739); + return 0; /*0xffe1c22a*/ + } + } + if ( *((_BYTE *)HobFromAddress + 25) == 1 ) + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TPM 2.0 found\n", 718); + return 2; /*0xffe1c1b9*/ + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: PTT found\n", 721); + return 3; /*0xffe1c1d5*/ + } +} -{"addr":"0xffe1af3d","code":"char *AllocateAndMeasureFwVol(char *HashContext, char *src, unsigned int n8)\n{\n int v4; // ebx\n unsigned int v5; // ecx\n char *result; // eax\n int n8_1; // esi\n unsigned int i; // ebx\n char *src_1; // [esp+10h] [ebp-4h]\n\n src_1 = src; /*0xffe1af48*/\n v4 = (*((_DWORD *)HashContext + 5) >> 3) & 0x3F; /*0xffe1af54*/\n v5 = *((_DWORD *)HashContext + 5) + 8 *n8; /*0xffe1af57*/\n *((_DWORD *)HashContext + 5) = v5; /*0xffe1af5f*/\n if ( v5 < 8 *n8 ) /*0xffe1af64*/\n ++*((_DWORD *)HashContext + 6); /*0xffe1af66*/\n *((_DWORD *)HashContext + 6) += n8 >> 29; /*0xffe1af6e*/\n result = (char *)(v4 + n8); /*0xffe1af71*/\n if ( v4 + n8 <= 0x3F ) /*0xffe1af77*/\n {\n n8_1 = 0; /*0xffe1afb9*/\n }\n else\n {\n n8_1 = 64 - v4; /*0xffe1af7c*/\n CopyMem(&HashContext[v4 + 28], src, 64 - v4); /*0xffe1af86*/\n result = (char *)TpmMeasureFwVolWithType(HashContext, HashContext + 28); /*0xffe1af91*/\n for ( i = n8_1 + 63; ; i += 64 ) /*0xffe1af96*/\n {\n src = src_1; /*0xffe1afad*/\n if ( i >= n8 ) /*0xffe1afb3*/\n break; /*0xffe1afb3*/\n result = (char *)TpmMeasureFwVolWithType(HashContext, &src_1[i - 63]); /*0xffe1afa2*/\n n8_1 += 64; /*0xffe1afa7*/\n }\n v4 = 0; /*0xffe1afb5*/\n }\n if ( n8 != n8_1 ) /*0xffe1afbb*/\n return CopyMem(&HashContext[v4 + 28], &src[n8_1], n8 - n8_1); /*0xffe1afc7*/\n return result; /*0xffe1afcd*/\n}","refs":[{"addr":"0xffe19baa","name":"CopyMem"},{"addr":"0xffe19cd8","name":"TpmMeasureFwVolWithType"}]} +int LogBootGuardTpm12Event(unsigned __int8 a1, _DWORD *a2) +{ + int v2; // esi + unsigned int v5; // edx + unsigned int v6; // ecx + int v7; // eax + int n64; // [esp-Ch] [ebp-18h] + const char *[BootGuardTCG2.c]_:_FindEntryInFit(%lx)_is_Invalid_n; // [esp-8h] [ebp-14h] + int v11; // [esp-4h] [ebp-10h] -{"addr":"0xffe1afd3","code":"void *HashFirmwareVolume(int DigestedData, int HashContext)\n{\n unsigned int n0x14; // edi\n unsigned int i; // edx\n char src[8]; // [esp+10h] [ebp-8h] BYREF\n\n n0x14 = 0; /*0xffe1afd9*/\n for ( i = 0; i < 8; ++i )\n src[i] = *(_DWORD *)((i < 4 ? 4 : 0) + HashContext + 20) >> (8 * (3 - (i & 3)));\n AllocateAndMeasureFwVol((char *)HashContext, ::src, 1u); /*0xffe1b00f*/\n while ( (*(_DWORD *)(HashContext + 20) & 0x1F8) != 0x1C0 ) /*0xffe1b034*/\n AllocateAndMeasureFwVol((char *)HashContext, src_0, 1u); /*0xffe1b020*/\n AllocateAndMeasureFwVol((char *)HashContext, src, 8u); /*0xffe1b03c*/\n do /*0xffe1b060*/\n {\n *(_BYTE *)(n0x14 + DigestedData) = *(_DWORD *)(HashContext + 4 * (n0x14 >> 2)) >> (8 * (3 - (n0x14 & 3))); /*0xffe1b059*/\n ++n0x14; /*0xffe1b05c*/\n }\n while ( n0x14 < 0x14 ); /*0xffe1b060*/\n GetEndOfHobList((void *)(HashContext + 28), 0x40u); /*0xffe1b068*/\n GetEndOfHobList((void *)HashContext, 0x14u); /*0xffe1b072*/\n GetEndOfHobList((void *)(HashContext + 20), 8u); /*0xffe1b07c*/\n return GetEndOfHobList(src, 8u); /*0xffe1b08d*/\n}","refs":[{"addr":"0xffe1af3d","name":"AllocateAndMeasureFwVol"},{"addr":"0xffe20378","name":"src"},{"addr":"0xffe2037c","name":"src_0"},{"addr":"0xffe1d1dd","name":"GetEndOfHobList"}]} + v2 = 0; /*0xffe1c251*/ + if ( MEMORY[0xFFFFFFC0] == -1 || !MEMORY[0xFFFFFFC0] ) + { + v11 = MEMORY[0xFFFFFFC0]; /*0xffe1c28f*/ + [BootGuardTCG2.c]_:_FindEntryInFit(%lx)_is_Invalid_n = "[BootGuardTCG2.c] : FindEntryInFit(%lx) is Invalid\n"; + n64 = 0x80000000; /*0xffe1c295*/ + goto LABEL_10; /*0xffe1c295*/ + } + v5 = *(_DWORD *)(MEMORY[0xFFFFFFC0] + 8); /*0xffe1c262*/ + v6 = 1; /*0xffe1c267*/ + if ( v5 <= 1 ) + { +LABEL_7: + v11 = a1; /*0xffe1c27c*/ + [BootGuardTCG2.c]_:_FindEntryInFit(%lx)_is_Invalid_n = "[BootGuardTCG2.c] : Error, Did not find Tbl type = %x\n"; + n64 = 64; /*0xffe1c285*/ +LABEL_10: + v2 = -2147483634; /*0xffe1c29a*/ + DebugPrintWrapper(n64, [BootGuardTCG2.c]_:_FindEntryInFit(%lx)_is_Invalid_n, v11); /*0xffe1c29f*/ + return v2; /*0xffe1c29f*/ + } + v7 = MEMORY[0xFFFFFFC0] + 16; /*0xffe1c26c*/ + while ( *(_BYTE *)(v7 + 14) != a1 ) /*0xffe1c272*/ + { + ++v6; /*0xffe1c274*/ + v7 += 16; /*0xffe1c275*/ + if ( v6 >= v5 ) /*0xffe1c27a*/ + goto LABEL_7; /*0xffe1c27a*/ + } + *a2 = *(_DWORD *)v7; /*0xffe1c28b*/ + return v2; /*0xffe1c2a7*/ +} -{"addr":"0xffe1b094","code":"int DelayMicroseconds(int n2, int n50563599)\n{\n if ( byte_FFE2177C ) /*0xffe1b09b*/\n return PeiPcdSetSku(n2, n50563599, n2, (int)&unk_FFE216E8, 0); /*0xffe1b0a5*/\n else\n return -2147483645; /*0xffe1b0ae*/\n}","refs":[{"addr":"0xffe1fddf","name":"PeiPcdSetSku"},{"addr":"0xffe216e8","name":"unk_FFE216E8"},{"addr":"0xffe2177c","name":"byte_FFE2177C"}]} +int LogTpm20LocalityStartupEvent(int n17, char n2) +{ + char Boot_Guard_Measured_S_CRTM[20]; // [esp+Ch] [ebp-14h] BYREF -{"addr":"0xffe1b0b4","code":"char IsTpmPresent()\n{\n unsigned int n6; // ecx\n\n n6 = 0; /*0xffe1b0bb*/\n while ( word_FFE21730[n6] != MEMORY[0xFED40F00] || word_FFE21732[n6] != MEMORY[0xFED40F02] ) /*0xffe1b0d6*/\n {\n n6 += 2; /*0xffe1b0d8*/\n if ( n6 >= 6 ) /*0xffe1b0de*/\n return 0; /*0xffe1b0e3*/\n }\n return 1; /*0xffe1b0e2*/\n}","refs":[{"addr":"0xffe21730","name":"word_FFE21730"},{"addr":"0xffe21732","name":"word_FFE21732"}]} + DebugPrintWrapper(64, "BootGuardTCG2.c[%d] : Enter LogTpm20LocalityStartupEvent(...)\n", 842); + if ( n2 ) /*0xffe1c2cf*/ + { + (*(void ( **)(char *, int, _DWORD))(*(_DWORD *)n17 + 84))(Boot_Guard_Measured_S_CRTM, 16, 0); /*0xffe1c2db*/ + (*(void ( **)(char *, const char *, int))(*(_DWORD *)n17 + 80))( /*0xffe1c2ee*/ + Boot_Guard_Measured_S_CRTM, + "StartupLocality", + 16); + Boot_Guard_Measured_S_CRTM[16] = 3; /*0xffe1c2f4*/ + CreateBootGuardTPM20Event(n17, 0, 3, 0, 0, Boot_Guard_Measured_S_CRTM, 17); /*0xffe1c308*/ + } + return 0; /*0xffe1c310*/ +} -{"addr":"0xffe1b0e8","code":"int LocateTcgOrTpmPpi(int n17, int p_TcgPpi, int p_TpmPpi)\n{\n int v4; // eax\n int v5; // esi\n int result; // eax\n\n v4 = (*(int ( **)(int, void *, _DWORD, _DWORD, int))(*(_DWORD *)n17 + 32))(n17, &unk_FFE21678, 0, 0, p_TcgPpi); /*0xffe1b0fa*/\n v5 = v4; /*0xffe1b0fd*/\n if ( v4 >= 0 ) /*0xffe1b104*/\n {\n result = (*(int ( **)(int, void *, _DWORD, _DWORD, int))(*(_DWORD *)n17 + 32))( /*0xffe1b11c*/\n n17,\n &unk_FFE21628,\n 0,\n 0,\n p_TpmPpi);\n v5 = result; /*0xffe1b11f*/\n if ( result >= 0 ) /*0xffe1b126*/\n return result; /*0xffe1b126*/\n DebugPrintWrapper(0x80000000, \"gTcgPpiguid NOT found %r \\n\", result); /*0xffe1b133*/\n }\n else\n {\n DebugPrintWrapper(0x80000000, \"gTpmDevicePpiguid NOT found %r \\n\", v4); /*0xffe1b10c*/\n }\n return v5; /*0xffe1b13d*/\n}","refs":[{"addr":"0xffe21678","name":"unk_FFE21678"},{"addr":"0xffe21628","name":"unk_FFE21628"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe203a4","name":"aGtcgppiguidNot","string":"gTcgPpiguid NOT found %r \n"},{"addr":"0xffe20380","name":"aGtpmdeviceppig","string":"gTpmDevicePpiguid NOT found %r \n"}]} +int SkipLogAuthorityEvent(int n17, char n2) +{ + int v4; // eax + int v6; // [esp+Ch] [ebp-4h] BYREF -{"addr":"0xffe1b141","code":"int TpmStartupCommand(int *n17, int n32)\n{\n int PeiServiceFuncs; // eax\n int Status; // eax\n __int16 n3; // bx\n int v7; // [esp-18h] [ebp-64h]\n _BYTE TpmResponseBuf[28]; // [esp+Ch] [ebp-40h] BYREF\n __int16 TpmCmdTag; // [esp+28h] [ebp-24h] BYREF\n int TpmCmdOrdinal; // [esp+2Ah] [ebp-22h]\n int TpmCmdParamData; // [esp+2Eh] [ebp-1Eh]\n __int16 TpmStartupType; // [esp+32h] [ebp-1Ah]\n unsigned __int16 TpmResponseTag; // [esp+34h] [ebp-18h] BYREF\n unsigned int TpmResponseSize; // [esp+36h] [ebp-16h]\n unsigned int TpmResponseCode; // [esp+3Ah] [ebp-12h]\n int TpmEventResult; // [esp+40h] [ebp-Ch] BYREF\n int TcgPpiHandle; // [esp+44h] [ebp-8h] BYREF\n int TpmPpiHandle; // [esp+48h] [ebp-4h] BYREF\n\n PeiServiceFuncs = *n17; /*0xffe1b155*/\n TpmPpiHandle = 0; /*0xffe1b15e*/\n TpmEventResult = 0; /*0xffe1b161*/\n TcgPpiHandle = 0; /*0xffe1b164*/\n Status = (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(PeiServiceFuncs + 32))( /*0xffe1b167*/\n n17,\n &unk_FFE21638,\n 0,\n 0,\n &TcgPpiHandle);\n if ( Status >= 0 )\n {\n if ( TcgPpiHandle )\n {\n Status = (*(int ( **)(int *, _BYTE *))(TcgPpiHandle + 4))(n17, TpmResponseBuf); /*0xffe1b185*/\n if ( Status >= 0 )\n {\n if ( TpmResponseBuf[4] == 1 ) /*0xffe1b196*/\n n32 = 32; /*0xffe1b19a*/\n n3 = (n32 == 17) + 1; /*0xffe1b1a4*/\n if ( n32 == 32 ) /*0xffe1b1aa*/\n n3 = 3; /*0xffe1b1ae*/\n if ( LocateTcgOrTpmPpi((int)n17, (int)&TpmPpiHandle, (int)&TpmEventResult) < 0 ) /*0xffe1b1c0*/\n return -2147483634; /*0xffe1b1c7*/\n Status = (*(int ( **)(int, int *))TpmPpiHandle)(TpmPpiHandle, n17); /*0xffe1b1d1*/\n if ( Status >= 0 )\n {\n TpmCmdTag = -16128; /*0xffe1b1e6*/\n TpmCmdOrdinal = 201326592; /*0xffe1b1f3*/\n TpmCmdParamData = -1728053248; /*0xffe1b202*/\n TpmStartupType = __ROL2__(n3, 8); /*0xffe1b209*/\n (*(void ( **)(int, int *, int, __int16 *, int, unsigned __int16 *))(TpmEventResult + 8))( /*0xffe1b20d*/\n TpmEventResult,\n n17,\n 12,\n &TpmCmdTag,\n 10,\n &TpmResponseTag);\n DebugPrintWrapper(\n 64,\n \"Tcg Startup Command Return Code: size: %x; retCode:%x; tag:%x; bytes %08x\\n\",\n ((TpmResponseSize & 0xFF00 | (TpmResponseSize << 16)) << 8)\n | ((HIWORD(TpmResponseSize) | TpmResponseSize & 0xFF0000) >> 8),\n ((TpmResponseCode & 0xFF00 | (TpmResponseCode << 16)) << 8)\n | ((HIWORD(TpmResponseCode) | TpmResponseCode & 0xFF0000) >> 8),\n (TpmResponseTag << 8) | HIBYTE(TpmResponseTag),\n v7);\n if ( !TpmResponseSize )\n {\n DebugPrintWrapper(0x80000000, \"Tcg Startup: returning device error\\n\");\n return -2147483641; /*0xffe1b292*/\n }\n if ( TpmResponseCode ) /*0xffe1b298*/\n {\n DebugPrintWrapper(0x80000000, \"Error sending TPM Startup CMD\\n\"); /*0xffe1b29f*/\n return -2147483641; /*0xffe1b29f*/\n }\n return (*(int ( **)(int, int *))(TpmPpiHandle + 4))(TpmPpiHandle, n17); /*0xffe1b2a6*/\n }\n }\n }\n }\n return Status; /*0xffe1b2ab*/\n}","refs":[{"addr":"0xffe21638","name":"unk_FFE21638"},{"addr":"0xffe1b0e8","name":"LocateTcgOrTpmPpi"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe203c0","name":"aTcgStartupComm","string":"Tcg Startup Command Return Code: size: %x; retCode:%x; tag:%x; bytes %08x\n"},{"addr":"0xffe2040c","name":"aTcgStartupRetu","string":"Tcg Startup: returning device error\n"},{"addr":"0xffe20434","name":"aErrorSendingTp","string":"Error sending TPM Startup CMD\n"}]} + v6 = 0; /*0xffe1c31d*/ + v4 = LogBootGuardTpm12Event(0xCu, &v6); /*0xffe1c32c*/ + if ( v4 >= 0 ) + { + if ( (*(_DWORD *)(v6 + 28) & 2) != 0 ) + { + if ( n2 != 1 && (n2 == 2 || n2 == 3) ) /*0xffe1c37b*/ + LogTpm20LocalityStartupEvent(n17, n2); /*0xffe1c381*/ + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Skip Log Authority Event\n", 893); + } + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TRACE ERROR - %r\n", 884, v4); + } + return 0; /*0xffe1c386*/ +} -{"addr":"0xffe1b2b2","code":"unsigned int TcmStartup(int n17, int n17_1)\n{\n __int16 n3; // si\n int v4; // edi\n int v5; // [esp-1Ch] [ebp-40h]\n int v6; // [esp+8h] [ebp-1Ch] BYREF\n unsigned __int16 v7; // [esp+Ch] [ebp-18h] BYREF\n unsigned int v8; // [esp+Eh] [ebp-16h]\n unsigned int v9; // [esp+12h] [ebp-12h]\n __int16 v10; // [esp+18h] [ebp-Ch] BYREF\n int n201326592; // [esp+1Ah] [ebp-Ah]\n int v12; // [esp+1Eh] [ebp-6h]\n __int16 v13; // [esp+22h] [ebp-2h]\n\n v6 = 0; /*0xffe1b2be*/\n n3 = (n17_1 == 17) + 1; /*0xffe1b2c6*/\n if ( n17_1 == 32 ) /*0xffe1b2cc*/\n n3 = 3; /*0xffe1b2d0*/\n if ( (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)n17 + 32))(n17, &unk_FFE21698, 0, 0, &v6) < 0 ) /*0xffe1b2e8*/\n return -2147483634; /*0xffe1b2ea*/\n v10 = -16128; /*0xffe1b2ff*/\n n201326592 = 201326592; /*0xffe1b311*/\n v12 = -1719664640; /*0xffe1b323*/\n v13 = __ROL2__(n3, 8); /*0xffe1b32b*/\n v4 = (*(int ( **)(int, __int16 *, int, unsigned __int16 *, int))(v6 + 24))(-19660800, &v10, 12, &v7, 10); /*0xffe1b338*/\n DebugPrintWrapper(\n 64,\n \"Tcg TCM Startup Command Return Code: size: %x; retCode:%x; tag:%x; bytes %08x\\n\",\n ((v8 & 0xFF00 | (v8 << 16)) << 8) | ((HIWORD(v8) | v8 & 0xFF0000) >> 8),\n ((v9 & 0xFF00 | (v9 << 16)) << 8) | ((HIWORD(v9) | v9 & 0xFF0000) >> 8),\n (v7 << 8) | HIBYTE(v7),\n v5);\n if ( v8 ) /*0xffe1b3a5*/\n return v4 | ((v9 & 0xFF00 | (v9 << 16)) << 8) | ((v9 & 0xFF0000 | HIWORD(v9)) >> 8); /*0xffe1b3ce*/\n else\n return -2147483641; /*0xffe1b3a7*/\n}","refs":[{"addr":"0xffe21698","name":"unk_FFE21698"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20458","name":"aTcgTcmStartupC","string":"Tcg TCM Startup Command Return Code: size: %x; retCode:%x; tag:%x; bytes %08x\n"}]} +int LogAuthorityPCREvent(int n17, char n2) +{ + int Tpm12Status; // eax + int Tpm12Status_1; // edi + int Tpm12Status_2; // eax + int Tpm12Status_3; // eax + int EventHandleSize_1; // esi + int Tpm12EventHandle; // [esp+10h] [ebp-74h] BYREF + int AcmStructPtr; // [esp+14h] [ebp-70h] BYREF + int EventHandleSize; // [esp+18h] [ebp-6Ch] BYREF + char BootGuardState[4]; // [esp+1Ch] [ebp-68h] BYREF + char HashCtxBuf[32]; // [esp+20h] [ebp-64h] BYREF + char DigestBuf[32]; // [esp+40h] [ebp-44h] BYREF + char EventBuf[36]; // [esp+60h] [ebp-24h] BYREF -{"addr":"0xffe1b3d8","code":"signed int __thiscall TpmSelfTest(void *this)\n{\n signed int result; // eax\n int v3; // eax\n _BYTE v4[6]; // [esp+4h] [ebp-20h] BYREF\n unsigned int v5; // [esp+Ah] [ebp-1Ah]\n __int16 v6; // [esp+10h] [ebp-14h] BYREF\n int n167772160; // [esp+12h] [ebp-12h]\n int n1392508928; // [esp+16h] [ebp-Eh]\n int v9; // [esp+1Ch] [ebp-8h] BYREF\n int ( **v10)(_DWORD, void *); // [esp+20h] [ebp-4h] BYREF\n\n v10 = 0; /*0xffe1b3de*/\n v9 = 0; /*0xffe1b3e5*/\n if ( LocateTcgOrTpmPpi((int)this, (int)&v10, (int)&v9) < 0 ) /*0xffe1b3f8*/\n return -2147483634; /*0xffe1b3fa*/\n result = (*v10)(v10, this); /*0xffe1b409*/\n if ( result >= 0 )\n {\n n167772160 = 167772160; /*0xffe1b417*/\n v6 = -16128; /*0xffe1b41e*/\n n1392508928 = 1392508928; /*0xffe1b42b*/\n v3 = (*(int ( **)(int, void *, int, __int16 *, int, _BYTE *))(v9 + 8))(v9, this, 10, &v6, 10, v4); /*0xffe1b43a*/\n DebugPrintWrapper(\n 64,\n \"TCG Pei: Self Test : status=%x; RetCode=%x\\n\",\n v3,\n (((v5 << 16) | v5 & 0xFF00) << 8) | ((HIWORD(v5) | v5 & 0xFF0000) >> 8));\n result = v10[1](v10, this); /*0xffe1b477*/\n if ( result >= 0 )\n return v5 != 0 ? 0x80000007 : 0;\n }\n return result; /*0xffe1b48e*/\n}","refs":[{"addr":"0xffe1b0e8","name":"LocateTcgOrTpmPpi"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe204a8","name":"aTcgPeiSelfTest","string":"TCG Pei: Self Test : status=%x; RetCode=%x\n"}]} + EventHandleSize = 0; /*0xffe1c3a4*/ + Tpm12EventHandle = 0; /*0xffe1c3a8*/ + AcmStructPtr = 0; /*0xffe1c3ac*/ + DebugPrintWrapper(64, "[BootGuardTCG2.c] : Enter LogAuthorityPCREvent(...)\n"); + Tpm12Status = LogBootGuardTpm12Event(0xCu, &Tpm12EventHandle); /*0xffe1c3bd*/ + Tpm12Status_1 = Tpm12Status; /*0xffe1c3c2*/ + if ( Tpm12Status >= 0 ) + { + if ( (*(_DWORD *)(Tpm12EventHandle + 28) & 4) != 0 ) + { + BootGuardState[0] = ReadMsr(); /*0xffe1c40d*/ + DebugPrintWrapper(64, "BP->RSTR:[%x]\n", (unsigned __int8)BootGuardState[0]); /*0xffe1c41b*/ + BootGuardState[1] = IsBootGuardCapable(); /*0xffe1c428*/ + DebugPrintWrapper(64, "BP->TYPE:[%x]\n", (unsigned __int8)BootGuardState[1]); /*0xffe1c436*/ + Tpm12Status_2 = LogBootGuardTpm12Event(2u, &AcmStructPtr); /*0xffe1c444*/ + Tpm12Status_1 = Tpm12Status_2; /*0xffe1c449*/ + if ( Tpm12Status_2 >= 0 ) + { + *(_WORD *)&BootGuardState[2] = IoWrite16((unsigned __int16 *)(AcmStructPtr + 28)); /*0xffe1c466*/ + DebugPrintWrapper(64, "BP->ACM_SVN = [%x]\n", *(unsigned __int16 *)&BootGuardState[2]); /*0xffe1c475*/ + (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))(HashCtxBuf, -19725312, 32); /*0xffe1c48c*/ + Tpm12Status_3 = LogBootGuardTpm12Event(0xBu, &EventHandleSize); /*0xffe1c498*/ + Tpm12Status_1 = Tpm12Status_3; /*0xffe1c49d*/ + if ( Tpm12Status_3 >= 0 ) + { + EventHandleSize_1 = EventHandleSize; /*0xffe1c4ae*/ + EventHandleSize = 256; /*0xffe1c4b8*/ + AcmStructPtr = EventHandleSize_1 + 58; /*0xffe1c4c4*/ + GetFirstGuidHob(1, (char *)&AcmStructPtr, &EventHandleSize, DigestBuf); /*0xffe1c4d2*/ + (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))(EventBuf, EventHandleSize_1 + 16, 32); /*0xffe1c4e5*/ + DebugPrintWrapper(64, "BP Hash Structure, Size[%x]", 100); /*0xffe1c4f4*/ + DebugPrintHexBytes(0x64u, (int)BootGuardState); /*0xffe1c503*/ + if ( n2 != 1 && (n2 == 2 || n2 == 3) ) /*0xffe1c515*/ + return CreateBootGuardTPM20Event( /*0xffe1c537*/ + n17, + 7, + -2147483647, + BootGuardState, + 100, + L"Boot Guard Measured S-CRTM", + 54); + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TRACE ERROR - %r\n", 989, Tpm12Status_3); + } + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TRACE ERROR - %r\n", 976, Tpm12Status_2); + } + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Skip Log Authority Event\n", 959); + return 0; /*0xffe1c401*/ + } + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TRACE ERROR - %r\n", 951, Tpm12Status); + } + return Tpm12Status_1; /*0xffe1c53b*/ +} -{"addr":"0xffe1b493","code":"unsigned int __thiscall TcmSelfTest(int *this)\n{\n int v1; // eax\n int v3; // eax\n _BYTE v4[6]; // [esp+4h] [ebp-1Ch] BYREF\n unsigned int v5; // [esp+Ah] [ebp-16h]\n __int16 v6; // [esp+10h] [ebp-10h] BYREF\n int n167772160; // [esp+12h] [ebp-Eh]\n int n1400897536; // [esp+16h] [ebp-Ah]\n int v9; // [esp+1Ch] [ebp-4h] BYREF\n\n v1 = *this; /*0xffe1b499*/\n v9 = 0; /*0xffe1b4aa*/\n if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(v1 + 32))(this, &unk_FFE21698, 0, 0, &v9) < 0 ) /*0xffe1b4b5*/\n return -2147483634; /*0xffe1b4b7*/\n n167772160 = 167772160; /*0xffe1b4c3*/\n v6 = -16128; /*0xffe1b4ca*/\n n1400897536 = 1400897536; /*0xffe1b4d9*/\n v3 = (*(int ( **)(int, __int16 *, int, _BYTE *, int))(v9 + 24))(-19660800, &v6, 10, v4, 10); /*0xffe1b4e9*/\n DebugPrintWrapper(\n 64,\n \"TCG TCM Pei: Self Test : status=%x; RetCode=%x\\n\",\n v3,\n (((v5 << 16) | v5 & 0xFF00) << 8) | ((HIWORD(v5) | v5 & 0xFF0000) >> 8));\n return v5 != 0 ? 0x80000007 : 0;\n}","refs":[{"addr":"0xffe21698","name":"unk_FFE21698"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe204d4","name":"aTcgTcmPeiSelfT","string":"TCG TCM Pei: Self Test : status=%x; RetCode=%x\n"}]} +int LogDetailPCREvent(int n17, char n2) +{ + int Tpm12Status; // eax + int Tpm12EventHandle_1; // esi + __int16 AcmSvnValue; // ax + int Tpm12StatusB; // eax + unsigned __int8 *KmStructPtr_1; // esi + int Tpm12StatusC; // eax + int BpmStructPtr_1; // edi + int SegCountOffset; // esi + int CallbackParam; // ecx + char *src; // [esp+14h] [ebp-10h] BYREF + int Tpm12EventHandle; // [esp+18h] [ebp-Ch] BYREF + unsigned __int8 *KmStructPtr; // [esp+1Ch] [ebp-8h] BYREF + int BpmStructPtr; // [esp+20h] [ebp-4h] BYREF -{"addr":"0xffe1b535","code":"signed int TpmStartup(int *n17, int n17_1)\n{\n int v4; // eax\n char v5; // bl\n signed int result; // eax\n unsigned int v7; // esi\n _BYTE v8[28]; // [esp+Ch] [ebp-24h] BYREF\n _BYTE v9[4]; // [esp+28h] [ebp-8h] BYREF\n int v10; // [esp+2Ch] [ebp-4h] BYREF\n\n v4 = *n17; /*0xffe1b549*/\n v5 = 0; /*0xffe1b54b*/\n v10 = 0; /*0xffe1b554*/\n if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, _BYTE *))(v4 + 32))(n17, &unk_FFE216F8, 0, 0, v9) >= 0 ) /*0xffe1b55f*/\n {\n v5 = 1; /*0xffe1b569*/\n DelayMicroseconds(1, 50563587); /*0xffe1b56b*/\n }\n result = (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(*n17 + 32))(n17, &unk_FFE21638, 0, 0, &v10); /*0xffe1b580*/\n if ( result >= 0 )\n {\n if ( v10 )\n {\n result = (*(int ( **)(int *, _BYTE *))(v10 + 4))(n17, v8); /*0xffe1b59e*/\n if ( result >= 0 )\n {\n if ( v8[4] == 1 )\n {\n if ( v5 )\n return TpmSelfTest(n17) != 0 ? 0x80000007 : 0;\n else\n return TpmStartupCommand(n17, 32); /*0xffe1b5ba*/\n }\n if ( IsTpmPresent() ) /*0xffe1b5d4*/\n {\n if ( TcmStartup((int)n17, n17_1) ) /*0xffe1b62c*/\n return -2147483641; /*0xffe1b62c*/\n v7 = TcmSelfTest(n17); /*0xffe1b63c*/\n if ( v7 ) /*0xffe1b640*/\n return -2147483641; /*0xffe1b640*/\n }\n else\n {\n if ( !v5 ) /*0xffe1b5df*/\n {\n if ( TpmStartupCommand(n17, n17_1) ) /*0xffe1b5e5*/\n {\n DelayMicroseconds(-2147483646, 50563585); /*0xffe1b5f8*/\n return -2147483641; /*0xffe1b602*/\n }\n DelayMicroseconds(1, 50563585); /*0xffe1b607*/\n }\n v7 = TpmSelfTest(n17); /*0xffe1b613*/\n if ( v7 ) /*0xffe1b617*/\n return -2147483641; /*0xffe1b617*/\n DelayMicroseconds(1, 50563588); /*0xffe1b621*/\n }\n return v7; /*0xffe1b642*/\n }\n }\n }\n return result; /*0xffe1b644*/\n}","refs":[{"addr":"0xffe1b094","name":"DelayMicroseconds"},{"addr":"0xffe216f8","name":"unk_FFE216F8"},{"addr":"0xffe21638","name":"unk_FFE21638"},{"addr":"0xffe1b3d8","name":"TpmSelfTest"},{"addr":"0xffe1b141","name":"TpmStartupCommand"},{"addr":"0xffe1b2b2","name":"TcmStartup"},{"addr":"0xffe1b493","name":"TcmSelfTest"},{"addr":"0xffe1b0b4","name":"IsTpmPresent"}]} + src = 0; /*0xffe1c55b*/ + KmStructPtr = 0; /*0xffe1c55f*/ + BpmStructPtr = 0; /*0xffe1c563*/ + Tpm12EventHandle = 0; /*0xffe1c567*/ + DebugPrintWrapper(64, "[BootGuardTCG2.c] : Enter LogDetailPCREvent(...)\n"); + if ( (*(int ( **)(int, int, char **))(*(_DWORD *)n17 + 76))(n17, 804, &src) < 0 ) /*0xffe1c585*/ + return -2147483639; /*0xffe1c587*/ + DebugPrintWrapper(64, "MSR[0x%x]:[%08x]\n", 314, (unsigned int)__readmsr(0x13Au)); /*0xffe1c5a5*/ + DebugPrintWrapper(64, "ACM_STATUS:[%08x]\n", MEMORY[0xFED30328]); /*0xffe1c5b9*/ + *src = ReadMsr(); /*0xffe1c5ca*/ + DebugPrintWrapper(64, "BP->RSTR:[%x]\n", (unsigned __int8)*src); /*0xffe1c5da*/ + src[1] = IsBootGuardCapable(); /*0xffe1c5eb*/ + DebugPrintWrapper(64, "BP->TYPE:[%x]\n", (unsigned __int8)src[1]); /*0xffe1c5fd*/ + Tpm12Status = LogBootGuardTpm12Event(2u, &Tpm12EventHandle); /*0xffe1c60b*/ + if ( Tpm12Status >= 0 ) + { + Tpm12EventHandle_1 = Tpm12EventHandle; /*0xffe1c62d*/ + AcmSvnValue = IoWrite16((unsigned __int16 *)(Tpm12EventHandle + 28)); /*0xffe1c634*/ + *((_WORD *)src + 1) = AcmSvnValue; /*0xffe1c63d*/ + DebugPrintWrapper(64, "BP->ACM_SVN = [%x]\n", *((unsigned __int16 *)src + 1)); /*0xffe1c650*/ + (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))(src + 4, Tpm12EventHandle_1 + 388, 256); /*0xffe1c66f*/ + DebugPrintHexBytes(0x100u, (int)(src + 4)); /*0xffe1c67e*/ + Tpm12StatusB = LogBootGuardTpm12Event(0xBu, &KmStructPtr); /*0xffe1c689*/ + if ( Tpm12StatusB >= 0 ) + { + KmStructPtr_1 = KmStructPtr; /*0xffe1c69a*/ + DebugPrintWrapper(64, "\nKmStructure: Addr[%lx]\n", KmStructPtr); + ParseBootGuardStructureId(KmStructPtr_1); /*0xffe1c6af*/ + (*(void ( **)(char *, unsigned __int8 *, int))(*(_DWORD *)n17 + 80))(src + 260, KmStructPtr_1 + 321, 256); /*0xffe1c6c8*/ + DebugPrintHexBytes(0x100u, (int)(src + 260)); /*0xffe1c6da*/ + Tpm12StatusC = LogBootGuardTpm12Event(0xCu, &BpmStructPtr); /*0xffe1c6e5*/ + if ( Tpm12StatusC >= 0 ) + { + BpmStructPtr_1 = BpmStructPtr; /*0xffe1c6f9*/ + DebugPrintWrapper(64, "\nBpmStructure: Addr[%lx]\n", BpmStructPtr); + ParseBootGuardStructureId((unsigned __int8 *)BpmStructPtr_1); /*0xffe1c70e*/ + DebugPrintWrapper(64, "BpmStructure->Ibb_Element.EntryPoint[%x]\n", *(_DWORD *)(BpmStructPtr_1 + 108)); /*0xffe1c71c*/ + DebugPrintWrapper( /*0xffe1c732*/ + 64, + "BpmStructure->Ibb_Element.SegmentCount[%x]\n", + *(unsigned __int8 *)(BpmStructPtr_1 + 148)); + SegCountOffset = 12 * *(unsigned __int8 *)(BpmStructPtr_1 + 148); /*0xffe1c741*/ + DebugPrintWrapper(64, "\nBpmStructure->Bpm_Signature_Element.KeySignaturee"); /*0xffe1c74a*/ + (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))( /*0xffe1c769*/ + src + 516, + SegCountOffset + BpmStructPtr_1 + 431, + 256); + DebugPrintHexBytes(0x100u, (int)(src + 516)); /*0xffe1c77e*/ + DebugPrintWrapper(64, "\n\nBpmStructure->Digest_of_Hashed_IBB_Segment:"); /*0xffe1c789*/ + (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))(src + 772, BpmStructPtr_1 + 116, 32); /*0xffe1c7a0*/ + DebugPrintHexBytes(0x20u, (int)(src + 772)); /*0xffe1c7b3*/ + DebugPrintWrapper(64, "BP Hash Structure, Size[%x]", 804); /*0xffe1c7c4*/ + DebugPrintHexBytes(0x324u, (int)src); /*0xffe1c7d2*/ + if ( n2 == 1 ) /*0xffe1c7dd*/ + { + CreateBootGuardTPM12Event(CallbackParam, src); /*0xffe1c7e9*/ + } + else if ( n2 == 2 || n2 == 3 ) /*0xffe1c7f6*/ + { + CreateBootGuardTPM20Event(n17, 0, 7, src, 804, "Boot Guard Measured S-CRTM", 27); /*0xffe1c80a*/ + } + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TRACE ERROR - %r\n", 1099, Tpm12StatusC); + } + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TRACE ERROR - %r\n", 1087, Tpm12StatusB); + } + } + else + { + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: TRACE ERROR - %r\n", 1075, Tpm12Status); + } + return 0; /*0xffe1c814*/ +} -{"addr":"0xffe1b64b","code":"void *TpmTcgGetCapability(void *dst)\n{\n _DWORD *v1; // ecx\n _DWORD *v2; // ebp\n int v3; // eax\n int v4; // eax\n int v5; // eax\n int v6; // eax\n int v7; // eax\n int v8; // eax\n int v10; // [esp+10h] [ebp-120h] BYREF\n int v11; // [esp+14h] [ebp-11Ch] BYREF\n __int16 v12; // [esp+18h] [ebp-118h] BYREF\n int n369098752; // [esp+1Ah] [ebp-116h]\n int n1694498816; // [esp+1Eh] [ebp-112h]\n int n0x4000000; // [esp+22h] [ebp-10Eh]\n int n0x4000000_1; // [esp+26h] [ebp-10Ah]\n int n134283264; // [esp+2Ah] [ebp-106h]\n _DWORD dst_1[64]; // [esp+30h] [ebp-100h] BYREF\n\n v2 = v1; /*0xffe1b655*/\n n369098752 = 369098752; /*0xffe1b657*/\n n1694498816 = 1694498816; /*0xffe1b661*/\n v10 = 0; /*0xffe1b66d*/\n v11 = 0; /*0xffe1b677*/\n v12 = -16128; /*0xffe1b67b*/\n n0x4000000 = 0x4000000; /*0xffe1b686*/\n n0x4000000_1 = 0x4000000; /*0xffe1b68a*/\n v3 = *v1; /*0xffe1b68e*/\n n134283264 = 134283264; /*0xffe1b698*/\n v4 = (*(int ( **)(_DWORD *, void *, _DWORD, _DWORD, int *))(v3 + 32))(v1, &unk_FFE21678, 0, 0, &v10); /*0xffe1b6a0*/\n if ( v4 < 0 ) /*0xffe1b6b2*/\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v4); /*0xffe1b6bf*/\n v5 = AssertReport(); /*0xffe1b6c7*/\n if ( v5 ) /*0xffe1b6ce*/\n (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe1b6d7*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\TCG2\\\\Common\\\\AmiTcgPlatformPei\\\\AmiTcgPlatformPeiLib.c\",\n 1073,\n \"!EFI_ERROR (Status)\");\n }\n if ( (*(int ( **)(int, _DWORD *))v10)(v10, v2) )\n {\n GetEndOfHobList((int)dst_1, 36); /*0xffe1b6f2*/\n }\n else\n {\n v6 = (*(int ( **)(_DWORD *, void *, _DWORD, _DWORD, int *))(*v2 + 32))(v2, &unk_FFE21628, 0, 0, &v11); /*0xffe1b70c*/\n if ( v6 < 0 ) /*0xffe1b714*/\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v6); /*0xffe1b721*/\n v7 = AssertReport(); /*0xffe1b729*/\n if ( v7 ) /*0xffe1b730*/\n (*(void ( **)(const char *, int, const char *))(v7 + 4))( /*0xffe1b739*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\TCG2\\\\Common\\\\AmiTcgPlatformPei\\\\AmiTcgPlatformPeiLib.c\",\n 1090,\n \"!EFI_ERROR (Status)\");\n }\n v8 = (*(int ( **)(int, _DWORD *, int, __int16 *, int, _DWORD *))(v11 + 8))(v11, v2, 22, &v12, 256, dst_1); /*0xffe1b756*/\n DebugPrintWrapper(\n 64,\n \"GetCapability: %r; size: %x; retCode:%x; tag:%x; bytes %08x\\n\",\n v8,\n ((HIWORD(dst_1[0]) & 0xFF00 | (*(_DWORD *)((char *)dst_1 + 2) << 16)) << 8)\n | ((HIWORD(*(_DWORD *)((char *)dst_1 + 2)) | *(_DWORD *)((char *)dst_1 + 2) & 0xFF0000u) >> 8),\n ((HIWORD(dst_1[1]) & 0xFF00 | (*(_DWORD *)((char *)&dst_1[1] + 2) << 16)) << 8)\n | ((HIWORD(*(_DWORD *)((char *)&dst_1[1] + 2)) | *(_DWORD *)((char *)&dst_1[1] + 2) & 0xFF0000u) >> 8),\n (HIWORD(dst_1[3]) << 8) | HIBYTE(HIWORD(dst_1[3])),\n ((dst_1[4] & 0xFF00 | (dst_1[4] << 16)) << 8) | ((HIWORD(dst_1[4]) | dst_1[4] & 0xFF0000u) >> 8));\n (*(void ( **)(int, _DWORD *))(v10 + 4))(v10, v2); /*0xffe1b7f3*/\n }\n qmemcpy(dst, dst_1, 0x24u); /*0xffe1b809*/\n return dst; /*0xffe1b80b*/\n}","refs":[{"addr":"0xffe21678","name":"unk_FFE21678"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20048","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe20508","name":"aEHsAmimodulepk","string":"e:\\hs\\AmiModulePkg\\TCG2\\Common\\AmiTcgPlatformPei\\AmiTcgPlatformPeiLib.c"},{"addr":"0xffe2006c","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe1d1dd","name":"GetEndOfHobList"},{"addr":"0xffe21628","name":"unk_FFE21628"},{"addr":"0xffe20550","name":"aGetcapabilityR","string":"GetCapability: %r; size: %x; retCode:%x; tag:%x; bytes %08x\n"}]} +int __thiscall LogTxtTpm12CRTMEvent(void *this) +{ + int ReturnStatus; // esi + int HashDigest_1; // edi + unsigned int FitTotalEntries; // ebx + unsigned int FitTableCopy_1; // eax + _BYTE *EntryCursor; // ebp + int TpmEventResult; // ecx + int Type7Count; // ebp + int Type7SearchPtr; // ecx + unsigned int Type7Remaining; // edx + int Type2DSearchIdx; // ecx + int i; // eax + int TpmEventResult_1; // [esp-4h] [ebp-90h] + int TpmEventResult_2; // [esp-4h] [ebp-90h] + int FitCountRemaining; // [esp+18h] [ebp-74h] BYREF + unsigned int FitTableCopy; // [esp+1Ch] [ebp-70h] + int HashDigest; // [esp+20h] [ebp-6Ch] + int EventSizeArray[5]; // [esp+24h] [ebp-68h] BYREF + int EventSizes[10]; // [esp+38h] [ebp-54h] BYREF + char *EventDataArray[11]; // [esp+60h] [ebp-2Ch] BYREF -{"addr":"0xffe1b816","code":"_DWORD *GetBootGuardHobData()\n{\n int Next; // eax\n int v1; // esi\n int v2; // eax\n int v3; // ecx\n _DWORD *v4; // esi\n _DWORD *v5; // eax\n unsigned int src_1; // ecx\n unsigned int count; // ebx\n char *v8; // edi\n int v9; // ebp\n char *src; // [esp+8h] [ebp-Ch]\n int v12; // [esp+Ch] [ebp-8h] BYREF\n int v13; // [esp+10h] [ebp-4h] BYREF\n\n v12 = 0; /*0xffe1b81d*/\n v13 = 0; /*0xffe1b821*/\n Next = HobGetNext(); /*0xffe1b825*/\n if ( (*(int ( **)(int, _DWORD, int *))(*(_DWORD *)Next + 56))(Next, 0, &v12) < 0 ) /*0xffe1b83b*/\n return 0; /*0xffe1b83b*/\n v1 = v12; /*0xffe1b841*/\n v2 = HobGetNext(); /*0xffe1b845*/\n if ( (*(int ( **)(void *, int, int *))(*(_DWORD *)v2 + 104))(&unk_FFE21658, v1, &v13) < 0 ) /*0xffe1b85f*/\n return 0; /*0xffe1b85f*/\n v4 = (_DWORD *)(v13 + 44); /*0xffe1b869*/\n if ( *(_DWORD *)(v13 + 44) != 1280134994 ) /*0xffe1b872*/\n return 0; /*0xffe1b908*/\n v5 = (_DWORD *)BuildGuidHob(v3, 48 * *(_DWORD *)(v13 + 56) + 16); /*0xffe1b882*/\n if ( v5 ) /*0xffe1b88b*/\n {\n *v5 = v4[1]; /*0xffe1b890*/\n v5[1] = v4[2]; /*0xffe1b895*/\n src_1 = (unsigned int)(v4 + 4); /*0xffe1b898*/\n v5[2] = 48; /*0xffe1b89b*/\n v5[3] = 0; /*0xffe1b8a2*/\n count = v4[2]; /*0xffe1b8a8*/\n src = (char *)(v4 + 4); /*0xffe1b8af*/\n v8 = (char *)(v5 + 4); /*0xffe1b8b3*/\n if ( v4 + 4 < (_DWORD *)((char *)v4 + count *v4[3] + 16) ) /*0xffe1b8bc*/\n {\n v9 = 16 - (_DWORD)v5; /*0xffe1b8be*/\n do /*0xffe1b900*/\n {\n if ( count ) /*0xffe1b8c2*/\n {\n CopyMem(v8 + 8, src, count); /*0xffe1b8cc*/\n src_1 = (unsigned int)src; /*0xffe1b8d2*/\n }\n *((_DWORD *)v8 + 1) = 0; /*0xffe1b8d6*/\n *(_DWORD *)v8 = &v8[v9 + 8]; /*0xffe1b8df*/\n v8 += 48; /*0xffe1b8e1*/\n count = v4[2]; /*0xffe1b8e4*/\n src = (char *)(count + src_1); /*0xffe1b8e9*/\n src_1 += count; /*0xffe1b8fc*/\n }\n while ( src_1 < (unsigned int)v4 + count *v4[3] + 16 ); /*0xffe1b900*/\n }\n }\n return v4; /*0xffe1b90a*/\n}","refs":[{"addr":"0xffe1cf7d","name":"HobGetNext"},{"addr":"0xffe21658","name":"unk_FFE21658"},{"addr":"0xffe1d192","name":"BuildGuidHob"},{"addr":"0xffe19baa","name":"CopyMem"}]} + ReturnStatus = 0; /*0xffe1c833*/ + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Enter LogTxtTpm12CRTMEvent\n", 1175); + HashDigest_1 = MEMORY[0xFFFFFFC0]; /*0xffe1c840*/ + HashDigest = MEMORY[0xFFFFFFC0]; /*0xffe1c842*/ + if ( MEMORY[0xFFFFFFC0] == -1 ) + { + ReturnStatus = -2147483642; /*0xffe1c858*/ + DebugPrintWrapper(64, "[%d] : FitEntryPointer(%lx) is empty\n", 1183, -1); + } + else if ( *MEMORY[0xFFFFFFC0] == 1414088287 && *(_DWORD *)(MEMORY[0xFFFFFFC0] + 4) == 538976351 ) + { + FitTotalEntries = *(_DWORD *)(MEMORY[0xFFFFFFC0] + 8); /*0xffe1c883*/ + if ( FitTotalEntries > 1 ) + { + FitTableCopy_1 = FitTotalEntries - 1; /*0xffe1c88f*/ + EntryCursor = (_BYTE *)(MEMORY[0xFFFFFFC0] + 16); /*0xffe1c892*/ + FitTableCopy = FitTotalEntries - 1; /*0xffe1c895*/ + do + { + if ( EntryCursor[14] == 2 ) + { + FitCountRemaining = *(_DWORD *)(*(_DWORD *)EntryCursor + 20); /*0xffe1c8b2*/ + (*(void ( **)(int *, int, _DWORD))(*(_DWORD *)this + 84))(EventSizeArray, 20, 0); /*0xffe1c8b8*/ + EventSizeArray[0] = FitCountRemaining; /*0xffe1c8c2*/ + ReturnStatus = LogBootGuardEventInternal(TpmEventResult, EventSizeArray, "FIT Type 0x02 Measured S-CRTM", 30); /*0xffe1c8da*/ + if ( ReturnStatus < 0 ) + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Error LogBootGuardTPM12Event(...)\n", 1219); + FitTableCopy_1 = FitTableCopy; /*0xffe1c8f7*/ + } + EntryCursor += 16; /*0xffe1c8fb*/ + FitTableCopy = --FitTableCopy_1; /*0xffe1c901*/ + } + while ( FitTableCopy_1 ); + HashDigest_1 = HashDigest; /*0xffe1c907*/ + if ( ReturnStatus < 0 ) + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Error TRACE CODE\n", 1227); + } + Type7Count = 0; /*0xffe1c923*/ + if ( FitTotalEntries > 1 ) + { + Type7SearchPtr = HashDigest_1 + 24; /*0xffe1c92a*/ + Type7Remaining = FitTotalEntries - 1; /*0xffe1c92d*/ + do /*0xffe1c94d*/ + { + if ( *(_BYTE *)(Type7SearchPtr + 6) == 7 ) /*0xffe1c934*/ + { + EventDataArray[Type7Count] = *(char **)(Type7SearchPtr - 8); /*0xffe1c939*/ + EventSizes[Type7Count++] = 16 * *(_DWORD *)Type7SearchPtr; /*0xffe1c942*/ + } + Type7SearchPtr += 16; /*0xffe1c947*/ + --Type7Remaining; /*0xffe1c94a*/ + } + while ( Type7Remaining ); /*0xffe1c94d*/ + if ( Type7Count ) + { + DebugAssertPrint(Type7Count, EventDataArray, (int)EventSizes, (int)EventSizeArray); /*0xffe1c963*/ + ReturnStatus = LogBootGuardEventInternal(TpmEventResult_1, EventSizeArray, "FIT Type 0x07 Measured S-CRTM", 30); /*0xffe1c982*/ + if ( ReturnStatus < 0 ) + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Error LogBootGuardTPM12Event(...)\n", 1259); + } + } + FitCountRemaining = 0; /*0xffe1c9a5*/ + Type2DSearchIdx = 1; /*0xffe1c9ac*/ + if ( FitTotalEntries > 1 ) + { + for ( i = HashDigest_1 + 16; *(_BYTE *)(i + 14) != 45; i += 16 ) /*0xffe1c9b5*/ + { + if ( ++Type2DSearchIdx >= FitTotalEntries ) /*0xffe1c9c4*/ + return ReturnStatus; /*0xffe1c9c4*/ + } + FitCountRemaining = *(_DWORD *)i; /*0xffe1c9ce*/ + EventSizes[0] = 4; /*0xffe1c9d8*/ + EventDataArray[0] = (char *)&FitCountRemaining; /*0xffe1c9e0*/ + DebugAssertPrint(1, EventDataArray, (int)EventSizes, (int)EventSizeArray); /*0xffe1c9ef*/ + ReturnStatus = LogBootGuardEventInternal(TpmEventResult_2, EventSizeArray, "FIT Type 0x2D Measured S-CRTM", 30); /*0xffe1ca0a*/ + if ( ReturnStatus < 0 ) + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Error LogBootGuardTPM12Event(...)\n", 1291); + } + } + else + { + ReturnStatus = -2147483642; /*0xffe1ca2c*/ + DebugPrintWrapper(64, "[%d] : [Type 0] FitEntry->TblAddress(%lx) is error\n", 1191, *MEMORY[0xFFFFFFC0]); + } + return ReturnStatus; /*0xffe1ca47*/ +} -{"addr":"0xffe1b910","code":"unsigned int GetFirmwareVolumeInfo()\n{\n _WORD *SystemConfiguration; // ecx\n\n SystemConfiguration = GetSystemConfiguration(); /*0xffe1b916*/\n if ( !SystemConfiguration ) /*0xffe1b91a*/\n {\n GetBootGuardHobData(); /*0xffe1b91c*/\n SystemConfiguration = GetSystemConfiguration(); /*0xffe1b926*/\n }\n return SystemConfiguration != 0 ? (unsigned int)(SystemConfiguration + 24) : 0;\n}","refs":[{"addr":"0xffe1d12e","name":"GetSystemConfiguration"},{"addr":"0xffe1b816","name":"GetBootGuardHobData"}]} +int __thiscall LogTxtTpm20CRTMEvent(void *this) +{ + int ThisPtr; // ebp + int FitTableBase; // esi + int ReturnStatus; // esi + unsigned int FitTotalEntries; // ebx + int FitEntryCursor; // edi + int FinalEventStatus; // esi + unsigned int RemainingEntries; // ebp + int EntryArrayIndex; // ebx + int EntryAddress; // eax + bool IsError; // sf + int FitEntryIndex_1; // edi + int Type7SearchPtr; // ecx + unsigned int Type7Remaining; // edx + unsigned int FitTotalEntries_1; // ecx + int *Type2DSearchPtr; // eax + int FitEntryValue; // [esp+14h] [ebp-A0h] BYREF + int ThisCopy; // [esp+18h] [ebp-9Ch] + int EventResult; // [esp+1Ch] [ebp-98h] + int FitEntryIndex; // [esp+20h] [ebp-94h] + int FitTablePtr; // [esp+24h] [ebp-90h] + unsigned int FitEntryCount; // [esp+28h] [ebp-8Ch] + _BYTE HashBuffer[20]; // [esp+2Ch] [ebp-88h] BYREF + int EventSizes[10]; // [esp+40h] [ebp-74h] BYREF + char *EventDataPtrs[10]; // [esp+68h] [ebp-4Ch] BYREF + char DigestBuffer[36]; // [esp+90h] [ebp-24h] BYREF -{"addr":"0xffe1b933","code":"unsigned int __thiscall GetBootGuardPolicy(char *this)\n{\n char *v1; // esi\n char *v2; // edi\n unsigned int v3; // esi\n\n if ( this /*0xffe1b967*/\n && (v1 = this - 8, v2 = &v1[-*(_DWORD *)v1], HobIsSuitable((int)(v2 + 8), (int)&unk_FFE21668))\n && (v3 = (unsigned int)&v1[*((_DWORD *)v2 + 8)], (unsigned int)(v2 + 40) <= v3)\n && (unsigned int)&v2[*((unsigned __int16 *)v2 + 1)] > v3 )\n {\n return v3 + 8; /*0xffe1b969*/\n }\n else\n {\n return 0; /*0xffe1b96e*/\n }\n}","refs":[{"addr":"0xffe1d24b","name":"HobIsSuitable"},{"addr":"0xffe21668","name":"unk_FFE21668"}]} + EventResult = 0; /*0xffe1ca57*/ + ThisPtr = (int)this; /*0xffe1ca65*/ + ThisCopy = (int)this; /*0xffe1ca6e*/ + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Enter LogTxtTpm20CRTMEvent\n", 1317); + FitTableBase = MEMORY[0xFFFFFFC0]; /*0xffe1ca7d*/ + FitTablePtr = MEMORY[0xFFFFFFC0]; /*0xffe1ca7f*/ + if ( MEMORY[0xFFFFFFC0] == -1 ) + { + ReturnStatus = -2147483642; /*0xffe1ca96*/ + DebugPrintWrapper(64, "[%d] : FitEntryPointer(%lx) is empty\n", 1325, -1); + } + else if ( *MEMORY[0xFFFFFFC0] == 1414088287 && *(_DWORD *)(MEMORY[0xFFFFFFC0] + 4) == 538976351 ) + { + FitTotalEntries = *(_DWORD *)(MEMORY[0xFFFFFFC0] + 8); /*0xffe1cac4*/ + FitEntryIndex = 0; /*0xffe1cac7*/ + FitEntryCount = FitTotalEntries; /*0xffe1cacc*/ + if ( FitTotalEntries > 1 ) + { + FitEntryCursor = MEMORY[0xFFFFFFC0] + 16; /*0xffe1cad9*/ + FinalEventStatus = EventResult; /*0xffe1cadc*/ + RemainingEntries = FitTotalEntries - 1; /*0xffe1cae0*/ + EntryArrayIndex = FitEntryIndex; /*0xffe1cae3*/ + do + { + if ( *(_BYTE *)(FitEntryCursor + 14) == 2 ) + { + EntryAddress = *(_DWORD *)FitEntryCursor; /*0xffe1caf1*/ + EventSizes[EntryArrayIndex] = 4; /*0xffe1caf7*/ + FitEntryValue = *(_DWORD *)(EntryAddress + 20); /*0xffe1cb02*/ + EventDataPtrs[EntryArrayIndex++] = (char *)&FitEntryValue; /*0xffe1cb0a*/ + GetFirstGuidHob(EntryArrayIndex, (char *)EventDataPtrs, EventSizes, DigestBuffer); /*0xffe1cb1e*/ + DebugAssertPrint(EntryArrayIndex, EventDataPtrs, (int)EventSizes, (int)HashBuffer); /*0xffe1cb33*/ + FinalEventStatus = LogBootGuardTpm20EventWrapper( /*0xffe1cb59*/ + ThisCopy, + 0, + 7, + HashBuffer, + DigestBuffer, + "FIT Type 0x02 Measured S-CRTM", + 30); + if ( FinalEventStatus < 0 ) + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Error LogBootGuardTPM20Event(...)\n", 1366); + } + FitEntryCursor += 16; /*0xffe1cb76*/ + --RemainingEntries; /*0xffe1cb79*/ + } + while ( RemainingEntries ); + FitTotalEntries = FitEntryCount; /*0xffe1cb82*/ + IsError = FinalEventStatus < 0; /*0xffe1cb86*/ + FitTableBase = FitTablePtr; /*0xffe1cb88*/ + if ( IsError ) + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Error TRACE CODE\n", 1374); + ThisPtr = ThisCopy; /*0xffe1cba2*/ + } + FitEntryIndex_1 = 0; /*0xffe1cba6*/ + if ( FitTotalEntries > 1 ) + { + Type7SearchPtr = FitTableBase + 24; /*0xffe1cbb1*/ + Type7Remaining = FitTotalEntries - 1; /*0xffe1cbb4*/ + do /*0xffe1cbd4*/ + { + if ( *(_BYTE *)(Type7SearchPtr + 6) == 7 ) /*0xffe1cbbb*/ + { + EventDataPtrs[FitEntryIndex_1] = *(char **)(Type7SearchPtr - 8); /*0xffe1cbc0*/ + EventSizes[FitEntryIndex_1++] = 16 * *(_DWORD *)Type7SearchPtr; /*0xffe1cbc9*/ + } + Type7SearchPtr += 16; /*0xffe1cbce*/ + --Type7Remaining; /*0xffe1cbd1*/ + } + while ( Type7Remaining ); /*0xffe1cbd4*/ + if ( FitEntryIndex_1 ) + { + GetFirstGuidHob(FitEntryIndex_1, (char *)EventDataPtrs, EventSizes, DigestBuffer); /*0xffe1cbed*/ + DebugAssertPrint(FitEntryIndex_1, EventDataPtrs, (int)EventSizes, (int)HashBuffer); /*0xffe1cc02*/ + if ( LogBootGuardTpm20EventWrapper(ThisPtr, 0, 7, HashBuffer, DigestBuffer, "FIT Type 0x07 Measured S-CRTM", 30) < 0 ) + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Error LogBootGuardTPM20Event(...)\n", 1408); + } + } + FitEntryValue = 0; /*0xffe1cc41*/ + FitTotalEntries_1 = 1; /*0xffe1cc49*/ + if ( FitTotalEntries > 1 ) /*0xffe1cc4d*/ + { + Type2DSearchPtr = (int *)(FitTableBase + 16); /*0xffe1cc4f*/ + while ( *((_BYTE *)Type2DSearchPtr + 14) != 45 ) /*0xffe1cc56*/ + { + ++FitTotalEntries_1; /*0xffe1cc58*/ + Type2DSearchPtr += 4; /*0xffe1cc59*/ + if ( FitTotalEntries_1 >= FitTotalEntries ) /*0xffe1cc5e*/ + goto LABEL_28; /*0xffe1cc5e*/ + } + FitEntryValue = *Type2DSearchPtr; /*0xffe1cc64*/ + } +LABEL_28: + EventSizes[0] = 4; /*0xffe1cc68*/ + EventDataPtrs[0] = (char *)&FitEntryValue; /*0xffe1cc74*/ + GetFirstGuidHob(1, (char *)EventDataPtrs, EventSizes, DigestBuffer); /*0xffe1cc8b*/ + DebugAssertPrint(1, EventDataPtrs, (int)EventSizes, (int)HashBuffer); /*0xffe1cca0*/ + ReturnStatus = LogBootGuardTpm20EventWrapper( /*0xffe1ccc4*/ + ThisPtr, + 0, + 7, + HashBuffer, + DigestBuffer, + "FIT Type 0x2D Measured S-CRTM", + 30); + if ( ReturnStatus < 0 ) + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Error LogBootGuardTPM20Event(...)\n", 1445); + } + else + { + ReturnStatus = -2147483642; /*0xffe1ccf1*/ + DebugPrintWrapper(64, "[%d] : [Type 0] FitEntry->TblAddress(%lx) is error\n", 1333, *MEMORY[0xFFFFFFC0]); + } + return ReturnStatus; /*0xffe1ccfe*/ +} -{"addr":"0xffe1b974","code":"char CheckBootGuardCapabilityMsr()\n{\n unsigned __int64 v0; // rax\n\n v0 = __readmsr(0x13Au); /*0xffe1b97a*/\n if ( (v0 & 0x100000000LL) != 0 ) /*0xffe1b983*/\n {\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Bit 32 BootGuardCapability = 1 in MSR 0x13A\\n\"); /*0xffe1b98c*/\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Processor supports Boot Guard.\\n\"); /*0xffe1b998*/\n return 1; /*0xffe1b9a0*/\n }\n else\n {\n DebugPrintWrapper(0x80000000, \"[BootGuardTCG2.c] Bit 32 BootGuardCapability = 0 in MSR 0x13A\\n\"); /*0xffe1b9af*/\n DebugPrintWrapper(0x80000000, \"[BootGuardTCG2.c] Processor does not support Boot Guard.\\n\"); /*0xffe1b9ba*/\n return 0; /*0xffe1b9c2*/\n }\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe205f0","name":"aBootguardtcg2C_23","string":"[BootGuardTCG2.c] Bit 32 BootGuardCapability = 1 in MSR 0x13A\n"},{"addr":"0xffe20630","name":"aBootguardtcg2C_24","string":"[BootGuardTCG2.c] Processor supports Boot Guard.\n"},{"addr":"0xffe20664","name":"aBootguardtcg2C_25","string":"[BootGuardTCG2.c] Bit 32 BootGuardCapability = 0 in MSR 0x13A\n"},{"addr":"0xffe206a4","name":"aBootguardtcg2C_26","string":"[BootGuardTCG2.c] Processor does not support Boot Guard.\n"}]} +int BootGuardTcg2MeasureCRTMVersion(int *n17) +{ + char n2; // bl + unsigned __int64 v2; // rax + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // eax + int v8; // eax + int v10[3]; // [esp+Ch] [ebp-Ch] BYREF -{"addr":"0xffe1b9c6","code":"int DebugPrintHexBytes(unsigned int i, int a2)\n{\n unsigned int j; // ebx\n\n for ( j = 0; j < i; ++j ) /*0xffe1b9d7*/\n {\n if ( (j & 0xF) == 0 ) /*0xffe1b9dc*/\n DebugPrintWrapper(64, \"\\n\"); /*0xffe1b9e1*/\n DebugPrintWrapper(64, \" %02x\", *(unsigned __int8 *)(j + a2)); /*0xffe1b9f4*/\n }\n return DebugPrintWrapper(64, \"\\n\"); /*0xffe1ba0b*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20080","name":"asc_FFE20080","string":"\n"},{"addr":"0xffe206e0","name":"a02x","string":" %02x"}]} + v10[0] = 0; /*0xffe1cd25*/ + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: Enter BootGuardTcg2MeasureCRTMVersion\n", 1465); + n2 = DetectTpmDeviceType(n17); /*0xffe1cd3d*/ + if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(*n17 + 32))(n17, &unk_FFE2175C, 0, 0, v10) < 0 ) /*0xffe1cd54*/ + v10[0] = 0; /*0xffe1cd56*/ + if ( MEMORY[0xFED300A4] < 0 ) + { + DebugPrintWrapper(64, "[BootGuardTCG2.c] Bit 63 success in 0xFED300A0\n"); /*0xffe1cd95*/ +LABEL_7: + if ( CheckBootGuardCapabilityMsr() == 1 && CheckNemMeasureBootStatus() >= 0 ) /*0xffe1cdb0*/ + { + DebugPrintWrapper(64, "[BootGuardTCG2.c] Start the LogDetailPCREvent\n"); /*0xffe1cdbd*/ + v3 = SkipLogAuthorityEvent((int)n17, n2); /*0xffe1cdc8*/ + if ( v3 < 0 ) /*0xffe1cdd4*/ + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v3); /*0xffe1cddd*/ + v4 = AssertReport(); /*0xffe1cde5*/ + if ( v4 ) /*0xffe1cdec*/ + (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe1cdfd*/ + "e:\\hs\\PurleyPlatPkg\\BootGuard\\BootGuardTCG2\\BootGuardTCG2.c", + 1495, + "!EFI_ERROR (Status)"); + } + v5 = LogDetailPCREvent((int)n17, n2); /*0xffe1ce07*/ + if ( v5 < 0 ) /*0xffe1ce0e*/ + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v5); /*0xffe1ce17*/ + v6 = AssertReport(); /*0xffe1ce1f*/ + if ( v6 ) /*0xffe1ce26*/ + (*(void ( **)(const char *, int, const char *))(v6 + 4))( /*0xffe1ce37*/ + "e:\\hs\\PurleyPlatPkg\\BootGuard\\BootGuardTCG2\\BootGuardTCG2.c", + 1497, + "!EFI_ERROR (Status)"); + } + v7 = LogAuthorityPCREvent((int)n17, n2); /*0xffe1ce41*/ + if ( v7 < 0 ) /*0xffe1ce48*/ + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v7); /*0xffe1ce55*/ + v8 = AssertReport(); /*0xffe1ce5d*/ + if ( v8 ) /*0xffe1ce64*/ + (*(void ( **)(const char *, int, const char *))(v8 + 4))( /*0xffe1ce79*/ + "e:\\hs\\PurleyPlatPkg\\BootGuard\\BootGuardTCG2\\BootGuardTCG2.c", + 1499, + "!EFI_ERROR (Status)"); + } + goto LABEL_27; /*0xffe1ce7c*/ + } + if ( LogTpm20LocalityStartupEvent((int)n17, n2) < 0 ) + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n", 1507); + if ( n2 == 1 ) + { + if ( LogTxtTpm12CRTMEvent(n17) >= 0 ) + { +LABEL_27: + DebugPrintWrapper(64, "BootGuardTCG2.c[%d]: End of BootGuardTcg2MeasureCRTMVersion\n", 1524); + goto LABEL_28; /*0xffe1cefa*/ + } + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n", 1513); + } + if ( (n2 == 2 || n2 == 3) && LogTxtTpm20CRTMEvent(n17) < 0 ) + DebugPrintWrapper(0x80000000, "BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n", 1520); + goto LABEL_27; /*0xffe1cee6*/ + } + DebugPrintWrapper(64, "[BootGuardTCG2.c] Bit 63 fail in 0xFED300A0\n"); /*0xffe1cd73*/ + v2 = __readmsr(0x13Au); /*0xffe1cd7f*/ + if ( (v2 & 0x20) != 0 ) /*0xffe1cd86*/ + goto LABEL_7; /*0xffe1cd86*/ +LABEL_28: + if ( n2 != 1 && (n2 == 2 || n2 == 3) ) /*0xffe1cf18*/ + LogBootGuardTpm20Event(n17, v10[0]); /*0xffe1cf20*/ + else + LocateTcgPpi(n17); /*0xffe1cf09*/ + return 0; /*0xffe1cf25*/ +} -{"addr":"0xffe1ba10","code":"int __thiscall ParseBootGuardStructureId(unsigned __int8 *this)\n{\n unsigned int i; // esi\n\n DebugPrintWrapper(64, \"StructureID:\"); /*0xffe1ba1b*/\n for ( i = 0; i < 8; ++i ) /*0xffe1ba22*/\n DebugPrintWrapper(64, \"%c\", *(this + i)); /*0xffe1ba30*/\n return DebugPrintWrapper(64, \"\\nStructVersion[%02x]\\n\", *(this + 8)); /*0xffe1ba52*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe206e8","name":"aStructureid","string":"StructureID:"},{"addr":"0xffe206f8","name":"aC","string":"%c"},{"addr":"0xffe206fc","name":"aStructversion0","string":"\nStructVersion[%02x]\n"}]} +int HobGetBaseAddress() +{ + unsigned __int8 v0; // al + char n3; // al + char n3_1; // cl -{"addr":"0xffe1ba55","code":"int CheckNemMeasureBootStatus()\n{\n unsigned __int64 v0; // rax\n char v1; // bl\n const char *[BootGuardTCG2.c]_NEM_enabled_in_MSR_0x13A_n; // [esp-4h] [ebp-14h]\n\n v0 = __readmsr(0x13Au); /*0xffe1ba5e*/\n v1 = v0; /*0xffe1ba60*/\n if ( (v0 & 1) != 0 ) /*0xffe1ba65*/\n [BootGuardTCG2.c]_NEM_enabled_in_MSR_0x13A_n = \"[BootGuardTCG2.c] NEM enabled in MSR 0x13A\\n\"; /*0xffe1ba67*/\n else\n [BootGuardTCG2.c]_NEM_enabled_in_MSR_0x13A_n = \"[BootGuardTCG2.c] NEM disable in MSR 0x13A\\n\"; /*0xffe1ba6e*/\n DebugPrintWrapper(64, [BootGuardTCG2.c]_NEM_enabled_in_MSR_0x13A_n); /*0xffe1ba77*/\n if ( (v1 & 0x20) != 0 ) /*0xffe1ba81*/\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Measure Boot enabled in MSR 0x13A\\n\"); /*0xffe1ba88*/\n else\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Measure Boot disable in MSR 0x13A\\n\"); /*0xffe1ba90*/\n if ( (v1 & 8) != 0 ) /*0xffe1ba9a*/\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Tpm Success in MSR 0x13A\\n\"); /*0xffe1baa1*/\n else\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Tpm Fail in MSR 0x13A\\n\"); /*0xffe1baa9*/\n if ( (v1 & 0x29) == 0x29 )\n {\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] : ACM_PostSuccess : EFI_SUCCESS\\n\");\n return 0; /*0xffe1bac3*/\n }\n else\n {\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] : ACM_PostSuccess : EFI_UNSUPPORTED\\n\");\n return -2147483645; /*0xffe1bad2*/\n }\n}","refs":[{"addr":"0xffe20714","name":"aBootguardtcg2C_27","string":"[BootGuardTCG2.c] NEM enabled in MSR 0x13A\n"},{"addr":"0xffe20740","name":"aBootguardtcg2C_28","string":"[BootGuardTCG2.c] NEM disable in MSR 0x13A\n"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe2076c","name":"aBootguardtcg2C_29","string":"[BootGuardTCG2.c] Measure Boot enabled in MSR 0x13A\n"},{"addr":"0xffe207a4","name":"aBootguardtcg2C_30","string":"[BootGuardTCG2.c] Measure Boot disable in MSR 0x13A\n"},{"addr":"0xffe207dc","name":"aBootguardtcg2C_31","string":"[BootGuardTCG2.c] Tpm Success in MSR 0x13A\n"},{"addr":"0xffe20808","name":"aBootguardtcg2C_32","string":"[BootGuardTCG2.c] Tpm Fail in MSR 0x13A\n"},{"addr":"0xffe20834","name":"aBootguardtcg2C_33","string":"[BootGuardTCG2.c] : ACM_PostSuccess : EFI_SUCCESS\n"},{"addr":"0xffe20868","name":"aBootguardtcg2C_34","string":"[BootGuardTCG2.c] : ACM_PostSuccess : EFI_UNSUPPORTED\n"}]} + v0 = __inbyte(0x70u); /*0xffe1cf34*/ + __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe1cf39*/ + n3 = __inbyte(0x71u); /*0xffe1cf40*/ + n3_1 = n3; /*0xffe1cf41*/ + if ( (unsigned __int8)n3 <= 3u ) /*0xffe1cf46*/ + { +LABEL_4: + if ( !n3_1 ) /*0xffe1cf61*/ + return 0; /*0xffe1cf61*/ + goto LABEL_5; /*0xffe1cf61*/ + } + n3_1 = n3; /*0xffe1cf48*/ + if ( !n3 ) /*0xffe1cf50*/ + { + n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe1cf5c*/ + goto LABEL_4; /*0xffe1cf5c*/ + } +LABEL_5: + if ( n3_1 != -1 ) + return n3_1 != 1 ? -2147483578 : -2147483644; + return 0; /*0xffe1cf79*/ +} -{"addr":"0xffe1bade","code":"unsigned __int64 ReadMsr()\n{\n unsigned __int64 result; // rax\n\n result = __readmsr(0x13Au) >> 4; /*0xffe1bb2b*/\n LOBYTE(result) = (2 /*0xffe1bb30*/\n * (((MEMORY[0xFED3032C] & 0x20) != 0)\n | (2\n * (((MEMORY[0xFED3032C] & 0x40) != 0)\n | (2 * (((MEMORY[0xFED3032C] & 0x80) != 0) | (2 * (MEMORY[0xFED3032D] & 1))))))))\n | result & 1;\n return result; /*0xffe1bb32*/\n}"} +int HobGetNext() +{ + int v0; // esi + _BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF + int v3; // [esp+6h] [ebp-6h] -{"addr":"0xffe1bb37","code":"char IsBootGuardCapable()\n{\n unsigned __int64 v0; // rax\n char v2; // [esp+4h] [ebp-4h]\n\n v2 = MEMORY[0xFED3032C]; /*0xffe1bb43*/\n v0 = __readmsr(0x13Au); /*0xffe1bb4b*/\n return ((v0 & 0x20) != 0) | (2 * (((v0 & 0x40) != 0) | (2 * ((v2 & 0x10) != 0)))); /*0xffe1bb7d*/\n}"} + HobGetEnd(v2); /*0xffe1cf86*/ + v0 = *(_DWORD *)(v3 - 4); /*0xffe1cf8e*/ + if ( !v0 ) /*0xffe1cf93*/ + DebugVPrint( /*0xffe1cfa2*/ + (int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c", + 48, + "PeiServices != ((void *) 0)"); + return v0; /*0xffe1cfaa*/ +} -{"addr":"0xffe1bb82","code":"int LogBootGuardEventInternal(\n int TpmEventResult,\n _BYTE *EventSizeArray,\n const char *Boot_Guard_Measured_S_CRTM,\n int n27)\n{\n int v4; // ecx\n int v5; // ebp\n _WORD *HobFromAddress; // eax\n _WORD *v8; // ebx\n char *v9; // edi\n _WORD *v10; // [esp+10h] [ebp-4h] BYREF\n\n v5 = v4; /*0xffe1bb85*/\n if ( (*(int ( **)(int, _WORD **))(*(_DWORD *)v4 + 48))(v4, &v10) < 0 )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\\n\", 285);\n return -2147483634; /*0xffe1bbb7*/\n }\n HobFromAddress = GetHobFromAddress((int)&unk_FFE2176C, v10); /*0xffe1bbc2*/\n if ( !HobFromAddress )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\\n\", 292);\n return -2147483634; /*0xffe1bbd7*/\n }\n v8 = HobFromAddress + 12; /*0xffe1bbdc*/\n v9 = (char *)HobFromAddress + *((_DWORD *)HobFromAddress + 7) + 24; /*0xffe1bbdf*/\n *((_DWORD *)v9 + 10) = 0; /*0xffe1bbe7*/\n *((_DWORD *)v9 + 11) = 7; /*0xffe1bbeb*/\n v9 += 48; /*0xffe1bbf2*/\n (*(void ( **)(char *, _BYTE *, int))(*(_DWORD *)v5 + 80))(v9, EventSizeArray, 20); /*0xffe1bbf9*/\n *((_DWORD *)v9 + 5) = n27; /*0xffe1bc03*/\n v9 += 24; /*0xffe1bc06*/\n (*(void ( **)(char *, const char *, int))(*(_DWORD *)v5 + 80))(v9, Boot_Guard_Measured_S_CRTM, n27); /*0xffe1bc12*/\n ++*((_DWORD *)v8 + 2); /*0xffe1bc1f*/\n *((_DWORD *)v8 + 1) = v9 - (char *)v8 + n27 - 40; /*0xffe1bc22*/\n return 0; /*0xffe1bc27*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe208a0","name":"aBootguardtcg2C_0","string":"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\n"},{"addr":"0xffe1d102","name":"GetHobFromAddress"},{"addr":"0xffe2176c","name":"unk_FFE2176C"},{"addr":"0xffe208d4","name":"aBootguardtcg2C_1","string":"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n"}]} +__int64 __thiscall HobGetType(void *this) +{ + int v2; // eax -{"addr":"0xffe1bc2d","code":"int CreateBootGuardTPM12Event(int CallbackParam, char *src)\n{\n int v2; // ecx\n int v3; // esi\n int TpmEventResult; // [esp-4h] [ebp-60h]\n int DigestedData[17]; // [esp+8h] [ebp-54h] BYREF\n char *p_src; // [esp+4Ch] [ebp-10h] BYREF\n int n804; // [esp+50h] [ebp-Ch] BYREF\n _WORD *v9; // [esp+54h] [ebp-8h] BYREF\n\n v3 = v2; /*0xffe1bc40*/\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : Enter CreateBootGuardTPM12Event(...)\\n\", 341);\n (*(void ( **)(int *, int, _DWORD))(*(_DWORD *)v3 + 84))(DigestedData, 64, 0); /*0xffe1bc54*/\n if ( (*(int ( **)(int, _WORD **))(*(_DWORD *)v3 + 48))(v3, &v9) < 0 )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\\n\", 349);\n return -2147483634; /*0xffe1bc86*/\n }\n if ( !GetHobFromAddress((int)&unk_FFE2176C, v9) )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\\n\", 356);\n return -2147483634; /*0xffe1bca3*/\n }\n p_src = src; /*0xffe1bcab*/\n n804 = 804; /*0xffe1bcb3*/\n DebugAssertPrint(1, &p_src, (int)&n804, (int)DigestedData); /*0xffe1bcc0*/\n return LogBootGuardEventInternal(TpmEventResult, DigestedData, \"Boot Guard Measured S-CRTM\", 27); /*0xffe1bcdd*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20908","name":"aBootguardtcg2C","string":"BootGuardTCG2.c[%d] : Enter CreateBootGuardTPM12Event(...)\n"},{"addr":"0xffe208a0","name":"aBootguardtcg2C_0","string":"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\n"},{"addr":"0xffe208d4","name":"aBootguardtcg2C_1","string":"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n"},{"addr":"0xffe1d102","name":"GetHobFromAddress"},{"addr":"0xffe2176c","name":"unk_FFE2176C"},{"addr":"0xffe19c92","name":"DebugAssertPrint"},{"addr":"0xffe1bb82","name":"LogBootGuardEventInternal"},{"addr":"0xffe211c8","name":"aBootGuardMeasu","string":"Boot Guard Measured S-CRTM"}]} + if ( !this ) /*0xffe1cfb4*/ + { + v2 = AssertReport(); /*0xffe1cfb6*/ + if ( v2 ) /*0xffe1cfbd*/ + (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe1cfce*/ + "e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", + 192, + "Buffer != ((void *) 0)"); + } + return *(_QWORD *)this; /*0xffe1cfd9*/ +} -{"addr":"0xffe1bce2","code":"int LogBootGuardTpm20EventWrapper(\n int n17,\n int n7,\n int n7a,\n _BYTE *HashBuffer,\n _BYTE *DigestBuffer,\n const char *FIT_Type_0x02_Measured_S_CRTM,\n int n30)\n{\n _WORD *HobFromAddress; // eax\n _WORD *EventLogHeader; // ebx\n _DWORD *LogEntryPtr; // edi\n _DWORD *NextLogEntry; // edi\n _DWORD *HashAlgCount; // esi\n char *Sha1DigestBuf; // edi\n char *Sha256DigestBuf; // edi\n _DWORD *EventDescBuf; // edi\n char *NextDescBuf; // edi\n char *DescSize; // ecx\n int PrevNextEventOffset; // eax\n _WORD *HobListPtr; // [esp+14h] [ebp-4h] BYREF\n\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : Enter LogBootGuardTPM20Event(...)\\n\", 394);\n if ( (*(int ( **)(int, _WORD **))(*(_DWORD *)n17 + 48))(n17, &HobListPtr) < 0 )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\\n\", 400);\n return -2147483634; /*0xffe1bd2e*/\n }\n HobFromAddress = GetHobFromAddress((int)&unk_FFE2173C, HobListPtr); /*0xffe1bd3c*/\n if ( !HobFromAddress )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\\n\", 408);\n return -2147483634; /*0xffe1bd51*/\n }\n EventLogHeader = HobFromAddress + 12; /*0xffe1bd53*/\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : TcgLog Addr 0x%x\\n\", 413, HobFromAddress + 12);\n if ( (*((_DWORD *)EventLogHeader + 8) & 3) != 0 )\n {\n if ( !*((_DWORD *)EventLogHeader + 3) )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : For Invalid parameter\\n\", 424);\n return -2147483634; /*0xffe1bda5*/\n }\n LogEntryPtr = (_DWORD *)*((_DWORD *)EventLogHeader + 4); /*0xffe1bdaa*/\n *LogEntryPtr++ = n7; /*0xffe1bdb4*/\n *LogEntryPtr = n7a; /*0xffe1bdb8*/\n NextLogEntry = LogEntryPtr + 1; /*0xffe1bdba*/\n if ( *((_DWORD *)EventLogHeader + 3) == 1 ) /*0xffe1bdc0*/\n {\n (*(void ( **)(_DWORD *, _BYTE *, int))(*(_DWORD *)n17 + 80))(NextLogEntry, HashBuffer, 20); /*0xffe1bdcc*/\n NextLogEntry += 5; /*0xffe1bdd2*/\n }\n else if ( *((_DWORD *)EventLogHeader + 3) == 2 ) /*0xffe1bddb*/\n {\n *NextLogEntry = 0; /*0xffe1bddd*/\n HashAlgCount = NextLogEntry++; /*0xffe1bde0*/\n if ( (EventLogHeader[16] & 1) != 0 ) /*0xffe1bde8*/\n {\n *(_WORD *)NextLogEntry = 4; /*0xffe1bdea*/\n Sha1DigestBuf = (char *)NextLogEntry + 2; /*0xffe1bded*/\n ++*HashAlgCount; /*0xffe1bdf0*/\n (*(void ( **)(char *, _BYTE *, int))(*(_DWORD *)n17 + 80))(Sha1DigestBuf, HashBuffer, 20); /*0xffe1bdfc*/\n NextLogEntry = Sha1DigestBuf + 20; /*0xffe1be02*/\n }\n if ( (EventLogHeader[16] & 2) != 0 ) /*0xffe1be09*/\n {\n *(_WORD *)NextLogEntry = 11; /*0xffe1be0e*/\n Sha256DigestBuf = (char *)NextLogEntry + 2; /*0xffe1be11*/\n ++*HashAlgCount; /*0xffe1be14*/\n (*(void ( **)(char *, _BYTE *, int))(*(_DWORD *)n17 + 80))(Sha256DigestBuf, DigestBuffer, 32); /*0xffe1be20*/\n NextLogEntry = Sha256DigestBuf + 32; /*0xffe1be26*/\n }\n }\n *NextLogEntry = n30; /*0xffe1be2d*/\n EventDescBuf = NextLogEntry + 1; /*0xffe1be2f*/\n (*(void ( **)(_DWORD *, const char *, int))(*(_DWORD *)n17 + 80))( /*0xffe1be3b*/\n EventDescBuf,\n FIT_Type_0x02_Measured_S_CRTM,\n n30);\n NextDescBuf = (char *)EventDescBuf + n30; /*0xffe1be41*/\n *((_DWORD *)EventLogHeader + 6) = *((_DWORD *)EventLogHeader + 4); /*0xffe1be45*/\n DescSize = &NextDescBuf[-*((_DWORD *)EventLogHeader + 4)]; /*0xffe1be48*/\n PrevNextEventOffset = *((_DWORD *)EventLogHeader + 5); /*0xffe1be4e*/\n *((_DWORD *)EventLogHeader + 5) = 0; /*0xffe1be51*/\n *((_DWORD *)EventLogHeader + 1) += DescSize; /*0xffe1be55*/\n ++*((_DWORD *)EventLogHeader + 2); /*0xffe1be58*/\n *((_DWORD *)EventLogHeader + 7) = PrevNextEventOffset; /*0xffe1be5b*/\n *((_DWORD *)EventLogHeader + 4) = NextDescBuf; /*0xffe1be60*/\n return 0; /*0xffe1be5e*/\n }\n else\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Err ActPcrBanks, No SHA1/SHA256 banks\\n\", 417);\n return -2147483646; /*0xffe1bd8b*/\n }\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20944","name":"aBootguardtcg2C_13","string":"BootGuardTCG2.c[%d] : Enter LogBootGuardTPM20Event(...)\n"},{"addr":"0xffe208a0","name":"aBootguardtcg2C_0","string":"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\n"},{"addr":"0xffe1d102","name":"GetHobFromAddress"},{"addr":"0xffe2173c","name":"unk_FFE2173C"},{"addr":"0xffe208d4","name":"aBootguardtcg2C_1","string":"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n"},{"addr":"0xffe20980","name":"aBootguardtcg2C_12","string":"BootGuardTCG2.c[%d] : TcgLog Addr 0x%x\n"},{"addr":"0xffe209e8","name":"aBootguardtcg2C_15","string":"BootGuardTCG2.c[%d] : For Invalid parameter\n"},{"addr":"0xffe209a8","name":"aBootguardtcg2C_14","string":"BootGuardTCG2.c[%d] : Err ActPcrBanks, No SHA1/SHA256 banks\n"}]} +int ReadUnaligned32(int Type, int a2) +{ + _DWORD *v2; // ecx + _DWORD *v3; // esi + int v4; // eax -{"addr":"0xffe1be6a","code":"int CreateBootGuardTPM20Event(\n int n17,\n int n7,\n int n7a,\n char *src,\n int n100,\n const char *Boot_Guard_Measured_S_CRTM,\n int n54)\n{\n _WORD *HobFromAddress; // eax\n _WORD *v11; // esi\n unsigned int n2; // eax\n int n100_1; // [esp+10h] [ebp-40h] BYREF\n char *p_src; // [esp+14h] [ebp-3Ch] BYREF\n _WORD *v15; // [esp+18h] [ebp-38h] BYREF\n _BYTE DigestedData[20]; // [esp+1Ch] [ebp-34h] BYREF\n char DigestBuffer[32]; // [esp+30h] [ebp-20h] BYREF\n\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : Enter CreateBootGuardTPM20Event(...)\\n\", 503);\n (*(void ( **)(_BYTE *, int, _DWORD))(*(_DWORD *)n17 + 84))(DigestedData, 20, 0); /*0xffe1be94*/\n (*(void ( **)(char *, int, _DWORD))(*(_DWORD *)n17 + 84))(DigestBuffer, 32, 0); /*0xffe1bea5*/\n if ( (*(int ( **)(int, _WORD **))(*(_DWORD *)n17 + 48))(n17, &v15) < 0 )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\\n\", 513);\n return -2147483634; /*0xffe1bed8*/\n }\n HobFromAddress = GetHobFromAddress((int)&unk_FFE2173C, v15); /*0xffe1bee6*/\n if ( !HobFromAddress )\n {\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\\n\", 521);\n return -2147483634; /*0xffe1befb*/\n }\n v11 = HobFromAddress + 12; /*0xffe1befd*/\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : TcgLog Addr 0x%x\\n\", 526, HobFromAddress + 12);\n p_src = src; /*0xffe1bf1d*/\n n2 = *((_DWORD *)v11 + 3); /*0xffe1bf21*/\n n100_1 = n100; /*0xffe1bf24*/\n if ( n2 < 2 ) /*0xffe1bf2b*/\n {\n DebugAssertPrint(1, &p_src, (int)&n100_1, (int)DigestedData); /*0xffe1bf8b*/\n }\n else if ( n2 == 2 ) /*0xffe1bf34*/\n {\n if ( (v11[16] & 1) != 0 && n100 ) /*0xffe1bf3e*/\n DebugAssertPrint(1, &p_src, (int)&n100_1, (int)DigestedData); /*0xffe1bf51*/\n if ( (v11[16] & 2) != 0 ) /*0xffe1bf5c*/\n {\n if ( n100 ) /*0xffe1bf60*/\n GetFirstGuidHob(1, (char *)&p_src, &n100_1, DigestBuffer); /*0xffe1bf73*/\n }\n }\n return LogBootGuardTpm20EventWrapper(n17, n7, n7a, DigestedData, DigestBuffer, Boot_Guard_Measured_S_CRTM, n54); /*0xffe1bfb4*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20a18","name":"aBootguardtcg2C_11","string":"BootGuardTCG2.c[%d] : Enter CreateBootGuardTPM20Event(...)\n"},{"addr":"0xffe208a0","name":"aBootguardtcg2C_0","string":"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs\n"},{"addr":"0xffe1d102","name":"GetHobFromAddress"},{"addr":"0xffe2173c","name":"unk_FFE2173C"},{"addr":"0xffe208d4","name":"aBootguardtcg2C_1","string":"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n"},{"addr":"0xffe20980","name":"aBootguardtcg2C_12","string":"BootGuardTCG2.c[%d] : TcgLog Addr 0x%x\n"},{"addr":"0xffe19c92","name":"DebugAssertPrint"},{"addr":"0xffe1d308","name":"GetFirstGuidHob"},{"addr":"0xffe1bce2","name":"LogBootGuardTpm20EventWrapper"}]} + v3 = v2; /*0xffe1cfdc*/ + if ( !v2 ) /*0xffe1cfe0*/ + { + v4 = AssertReport(); /*0xffe1cfe2*/ + if ( v4 ) /*0xffe1cfe9*/ + (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe1cffa*/ + "e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", + 219, + "Buffer != ((void *) 0)"); + } + *v3 = Type; /*0xffe1d008*/ + v3[1] = a2; /*0xffe1d00a*/ + return Type; /*0xffe1d00d*/ +} -{"addr":"0xffe1bfbc","code":"int LogBootGuardTpm20Event(int *n17, int a2)\n{\n int v4; // eax\n _DWORD v5[2]; // [esp+8h] [ebp-110h] BYREF\n __int16 v6; // [esp+10h] [ebp-108h]\n int v7; // [esp+12h] [ebp-106h]\n int n8; // [esp+16h] [ebp-102h]\n _BYTE v9[238]; // [esp+1Ah] [ebp-FEh] BYREF\n _DWORD v10[4]; // [esp+108h] [ebp-10h] BYREF\n\n v10[0] = 1416362782; /*0xffe1bfc8*/\n v10[1] = 1079319820; /*0xffe1bfcf*/\n v10[2] = -196170332; /*0xffe1bfd6*/\n v10[3] = 985143231; /*0xffe1bfdd*/\n if ( !a2 ) /*0xffe1bfe7*/\n return -2147483634; /*0xffe1bfe9*/\n v5[0] = 34; /*0xffe1bff2*/\n n8 = 8; /*0xffe1bffd*/\n v6 = 1; /*0xffe1c007*/\n v4 = *n17; /*0xffe1c010*/\n v5[1] = 14; /*0xffe1c01e*/\n v7 = 0; /*0xffe1c029*/\n (*(void ( **)(_BYTE *, _DWORD *, int))(v4 + 80))(v9, v10, 16); /*0xffe1c02f*/\n return (*(int ( **)(int, _DWORD, _DWORD, _BYTE *, _DWORD, int, _DWORD, _DWORD *))(a2 + 8))( /*0xffe1c04d*/\n a2,\n 0,\n 0,\n v9,\n 0,\n 16,\n 0,\n v5);\n}"} +void *__thiscall HobGetEnd(void *this) +{ + void *this_1; // eax -{"addr":"0xffe1c053","code":"int __thiscall LocateTcgPpi(int *this)\n{\n int v2; // eax\n int v3; // eax\n int v4; // esi\n _DWORD v6[8]; // [esp+10h] [ebp-128h] BYREF\n _BYTE v7[224]; // [esp+30h] [ebp-108h] BYREF\n _BYTE v8[4]; // [esp+110h] [ebp-28h] BYREF\n _DWORD v9[4]; // [esp+114h] [ebp-24h] BYREF\n int ( **v10)(_DWORD, int *, _DWORD *, int, _DWORD *, _BYTE *); // [esp+124h] [ebp-14h] BYREF\n _DWORD v11[4]; // [esp+128h] [ebp-10h] BYREF\n\n v11[0] = 1416362782; /*0xffe1c063*/\n v11[1] = 1079319820; /*0xffe1c06f*/\n v2 = *this; /*0xffe1c076*/\n v11[2] = -196170332; /*0xffe1c081*/\n v11[3] = 985143231; /*0xffe1c089*/\n v10 = 0; /*0xffe1c090*/\n v9[0] = 394082770; /*0xffe1c093*/\n v9[1] = 1086866360; /*0xffe1c09a*/\n v9[2] = 1362944410; /*0xffe1c0a1*/\n v9[3] = 513070744; /*0xffe1c0a8*/\n v6[0] = 0; /*0xffe1c0af*/\n v6[1] = 8; /*0xffe1c0b5*/\n v6[7] = 16; /*0xffe1c0bf*/\n (*(void ( **)(_BYTE *, _DWORD *, int))(v2 + 80))(v7, v11, 16); /*0xffe1c0c5*/\n v3 = (*(int ( **)(int *, _DWORD *, _DWORD, _DWORD, int ( ***)(_DWORD, int *, _DWORD *, int, _DWORD *, _BYTE *)))(*this + 32))( /*0xffe1c0d5*/\n this,\n v9,\n 0,\n 0,\n &v10);\n v4 = v3; /*0xffe1c0d8*/\n if ( v3 >= 0 ) /*0xffe1c0df*/\n return (*v10)(v10, this, v11, 16, v6, v8); /*0xffe1c112*/\n DebugPrintWrapper(0x80000000, \"[%d]: gTcgPpiguid NOT found %r \\n\", 645, v3);\n return v4; /*0xffe1c117*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20a54","name":"aDGtcgppiguidNo","string":"[%d]: gTcgPpiguid NOT found %r \n"}]} + if ( !this ) /*0xffe1d015*/ + DebugVPrint((int)"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c", 37, "Idtr != ((void *) 0)"); /*0xffe1d024*/ + this_1 = this; /*0xffe1d02a*/ + __sidt(this); /*0xffe1d02d*/ + return this_1; /*0xffe1d031*/ +} -{"addr":"0xffe1c11e","code":"int __thiscall DetectTpmDeviceType(int *this)\n{\n int PeiServicesPtr; // eax\n _WORD *HobFromAddress; // eax\n int Tpm12Status; // eax\n _DWORD Tpm12GuidData[4]; // [esp+Ch] [ebp-1Ch] BYREF\n int Tpm12PpiHandle; // [esp+1Ch] [ebp-Ch] BYREF\n _WORD *HobListPtr; // [esp+20h] [ebp-8h] BYREF\n int Tpm20PpiHandle; // [esp+24h] [ebp-4h] BYREF\n\n Tpm12GuidData[0] = 394082770; /*0xffe1c128*/\n Tpm12GuidData[1] = 1086866360; /*0xffe1c131*/\n Tpm20PpiHandle = 0; /*0xffe1c13b*/\n PeiServicesPtr = *this; /*0xffe1c13f*/\n Tpm12PpiHandle = 0; /*0xffe1c149*/\n Tpm12GuidData[2] = 1362944410; /*0xffe1c14c*/\n Tpm12GuidData[3] = 513070744; /*0xffe1c153*/\n if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(PeiServicesPtr + 32))(\n this,\n &unk_FFE2175C,\n 0,\n 0,\n &Tpm20PpiHandle) < 0 )\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : Can not locate Ami Tree Ppi, It may TPM 1.2 Device\\n\", 702);\n goto LABEL_11; /*0xffe1c16e*/\n }\n if ( (*(int ( **)(int *, _WORD **))(*this + 48))(this, &HobListPtr) < 0 )\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs, It may TPM 1.2 Device\\n\", 710);\n goto LABEL_11; /*0xffe1c18a*/\n }\n HobFromAddress = GetHobFromAddress((int)&unk_FFE2174C, HobListPtr); /*0xffe1c194*/\n if ( *((_BYTE *)HobFromAddress + 24) != 1 )\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : TrEEDeviceHob->Tpm20DeviceState = 0, It may TPM 1.2 Device\\n\", 725);\nLABEL_11:\n Tpm12Status = (*(int ( **)(int *, _DWORD *, _DWORD, _DWORD, int *))(*this + 32))( /*0xffe1c1ea*/\n this,\n Tpm12GuidData,\n 0,\n 0,\n &Tpm12PpiHandle);\n if ( Tpm12Status >= 0 )\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TPM 1.2 found\\n\", 743);\n return 1; /*0xffe1c244*/\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: gTcgPpiguid NOT found %r\\n\", 738, Tpm12Status);\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: No TPM\\n\", 739);\n return 0; /*0xffe1c22a*/\n }\n }\n if ( *((_BYTE *)HobFromAddress + 25) == 1 )\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TPM 2.0 found\\n\", 718);\n return 2; /*0xffe1c1b9*/\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: PTT found\\n\", 721);\n return 3; /*0xffe1c1d5*/\n }\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20a78","name":"aBootguardtcg2C_2","string":"BootGuardTCG2.c[%d] : Can not locate Ami Tree Ppi, It may TPM 1.2 Device\n"},{"addr":"0xffe2175c","name":"unk_FFE2175C"},{"addr":"0xffe20ac8","name":"aBootguardtcg2C_3","string":"BootGuardTCG2.c[%d] : Can not locate PEI HOB Logs, It may TPM 1.2 Device\n"},{"addr":"0xffe1d102","name":"GetHobFromAddress"},{"addr":"0xffe2174c","name":"unk_FFE2174C"},{"addr":"0xffe20b58","name":"aBootguardtcg2C_6","string":"BootGuardTCG2.c[%d] : TrEEDeviceHob->Tpm20DeviceState = 0, It may TPM 1.2 Device\n"},{"addr":"0xffe20bfc","name":"aBootguardtcg2C_9","string":"BootGuardTCG2.c[%d]: TPM 1.2 found\n"},{"addr":"0xffe20bac","name":"aBootguardtcg2C_7","string":"BootGuardTCG2.c[%d]: gTcgPpiguid NOT found %r\n"},{"addr":"0xffe20bdc","name":"aBootguardtcg2C_8","string":"BootGuardTCG2.c[%d]: No TPM\n"},{"addr":"0xffe20b14","name":"aBootguardtcg2C_4","string":"BootGuardTCG2.c[%d]: TPM 2.0 found\n"},{"addr":"0xffe20b38","name":"aBootguardtcg2C_5","string":"BootGuardTCG2.c[%d]: PTT found\n"}]} +int PeiServicesLocateHob() +{ + int Next; // eax + int v1; // eax + int v2; // eax + int v3; // eax + int v5; // [esp+4h] [ebp-4h] BYREF -{"addr":"0xffe1c24b","code":"int LogBootGuardTpm12Event(unsigned __int8 a1, _DWORD *a2)\n{\n int v2; // esi\n unsigned int v5; // edx\n unsigned int v6; // ecx\n int v7; // eax\n int n64; // [esp-Ch] [ebp-18h]\n const char *[BootGuardTCG2.c]_:_FindEntryInFit(%lx)_is_Invalid_n; // [esp-8h] [ebp-14h]\n int v11; // [esp-4h] [ebp-10h]\n\n v2 = 0; /*0xffe1c251*/\n if ( MEMORY[0xFFFFFFC0] == -1 || !MEMORY[0xFFFFFFC0] )\n {\n v11 = MEMORY[0xFFFFFFC0]; /*0xffe1c28f*/\n [BootGuardTCG2.c]_:_FindEntryInFit(%lx)_is_Invalid_n = \"[BootGuardTCG2.c] : FindEntryInFit(%lx) is Invalid\\n\";\n n64 = 0x80000000; /*0xffe1c295*/\n goto LABEL_10; /*0xffe1c295*/\n }\n v5 = *(_DWORD *)(MEMORY[0xFFFFFFC0] + 8); /*0xffe1c262*/\n v6 = 1; /*0xffe1c267*/\n if ( v5 <= 1 )\n {\nLABEL_7:\n v11 = a1; /*0xffe1c27c*/\n [BootGuardTCG2.c]_:_FindEntryInFit(%lx)_is_Invalid_n = \"[BootGuardTCG2.c] : Error, Did not find Tbl type = %x\\n\";\n n64 = 64; /*0xffe1c285*/\nLABEL_10:\n v2 = -2147483634; /*0xffe1c29a*/\n DebugPrintWrapper(n64, [BootGuardTCG2.c]_:_FindEntryInFit(%lx)_is_Invalid_n, v11); /*0xffe1c29f*/\n return v2; /*0xffe1c29f*/\n }\n v7 = MEMORY[0xFFFFFFC0] + 16; /*0xffe1c26c*/\n while ( *(_BYTE *)(v7 + 14) != a1 ) /*0xffe1c272*/\n {\n ++v6; /*0xffe1c274*/\n v7 += 16; /*0xffe1c275*/\n if ( v6 >= v5 ) /*0xffe1c27a*/\n goto LABEL_7; /*0xffe1c27a*/\n }\n *a2 = *(_DWORD *)v7; /*0xffe1c28b*/\n return v2; /*0xffe1c2a7*/\n}","refs":[{"addr":"0xffe20c20","name":"aBootguardtcg2C_17","string":"[BootGuardTCG2.c] : FindEntryInFit(%lx) is Invalid\n"},{"addr":"0xffe20c54","name":"aBootguardtcg2C_16","string":"[BootGuardTCG2.c] : Error, Did not find Tbl type = %x\n"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"}]} + Next = HobGetNext(); /*0xffe1d054*/ + v1 = (*(int ( **)(int, int *))(*(_DWORD *)Next + 48))(Next, &v5); /*0xffe1d060*/ + if ( v1 < 0 ) /*0xffe1d06c*/ + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v1); /*0xffe1d079*/ + v2 = AssertReport(); /*0xffe1d081*/ + if ( v2 ) /*0xffe1d088*/ + (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe1d092*/ + "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", + 50, + "!EFI_ERROR (Status)"); + } + if ( !v5 ) /*0xffe1d09c*/ + { + v3 = AssertReport(); /*0xffe1d09e*/ + if ( v3 ) /*0xffe1d0a5*/ + (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe1d0af*/ + "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", + 51, + "HobList != ((void *) 0)"); + } + return v5; /*0xffe1d0b8*/ +} -{"addr":"0xffe1c2ad","code":"int LogTpm20LocalityStartupEvent(int n17, char n2)\n{\n char Boot_Guard_Measured_S_CRTM[20]; // [esp+Ch] [ebp-14h] BYREF\n\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d] : Enter LogTpm20LocalityStartupEvent(...)\\n\", 842);\n if ( n2 ) /*0xffe1c2cf*/\n {\n (*(void ( **)(char *, int, _DWORD))(*(_DWORD *)n17 + 84))(Boot_Guard_Measured_S_CRTM, 16, 0); /*0xffe1c2db*/\n (*(void ( **)(char *, const char *, int))(*(_DWORD *)n17 + 80))( /*0xffe1c2ee*/\n Boot_Guard_Measured_S_CRTM,\n \"StartupLocality\",\n 16);\n Boot_Guard_Measured_S_CRTM[16] = 3; /*0xffe1c2f4*/\n CreateBootGuardTPM20Event(n17, 0, 3, 0, 0, Boot_Guard_Measured_S_CRTM, 17); /*0xffe1c308*/\n }\n return 0; /*0xffe1c310*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20c8c","name":"aBootguardtcg2C_10","string":"BootGuardTCG2.c[%d] : Enter LogTpm20LocalityStartupEvent(...)\n"},{"addr":"0xffe20ccc","name":"aStartuplocalit","string":"StartupLocality"},{"addr":"0xffe1be6a","name":"CreateBootGuardTPM20Event"}]} +_WORD *GetHobList(int a1, _WORD *a2) +{ + _WORD *v2; // esi + int v3; // eax -{"addr":"0xffe1c318","code":"int SkipLogAuthorityEvent(int n17, char n2)\n{\n int v4; // eax\n int v6; // [esp+Ch] [ebp-4h] BYREF\n\n v6 = 0; /*0xffe1c31d*/\n v4 = LogBootGuardTpm12Event(0xCu, &v6); /*0xffe1c32c*/\n if ( v4 >= 0 )\n {\n if ( (*(_DWORD *)(v6 + 28) & 2) != 0 )\n {\n if ( n2 != 1 && (n2 == 2 || n2 == 3) ) /*0xffe1c37b*/\n LogTpm20LocalityStartupEvent(n17, n2); /*0xffe1c381*/\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Skip Log Authority Event\\n\", 893);\n }\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TRACE ERROR - %r\\n\", 884, v4);\n }\n return 0; /*0xffe1c386*/\n}","refs":[{"addr":"0xffe1c24b","name":"LogBootGuardTpm12Event"},{"addr":"0xffe1c2ad","name":"LogTpm20LocalityStartupEvent"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20d04","name":"aBootguardtcg2C_19","string":"BootGuardTCG2.c[%d]: Skip Log Authority Event\n"},{"addr":"0xffe20cdc","name":"aBootguardtcg2C_18","string":"BootGuardTCG2.c[%d]: TRACE ERROR - %r\n"}]} + v2 = a2; /*0xffe1d0be*/ + if ( !a2 ) /*0xffe1d0c2*/ + { + v3 = AssertReport(); /*0xffe1d0c4*/ + if ( v3 ) /*0xffe1d0cb*/ + (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe1d0d9*/ + "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", + 82, + "HobStart != ((void *) 0)"); + } + while ( 1 ) /*0xffe1d0f2*/ + { + if ( *v2 == 0xFFFF ) /*0xffe1d0f8*/ + return 0; /*0xffe1d0fd*/ + if ( *v2 == 4 ) /*0xffe1d0ea*/ + break; /*0xffe1d0ea*/ + v2 = (_WORD *)((char *)v2 + (unsigned __int16)v2[1]); /*0xffe1d0f0*/ + } + return v2; /*0xffe1d0fc*/ +} -{"addr":"0xffe1c38e","code":"int LogAuthorityPCREvent(int n17, char n2)\n{\n int Tpm12Status; // eax\n int Tpm12Status_1; // edi\n int Tpm12Status_2; // eax\n int Tpm12Status_3; // eax\n int EventHandleSize_1; // esi\n int Tpm12EventHandle; // [esp+10h] [ebp-74h] BYREF\n int AcmStructPtr; // [esp+14h] [ebp-70h] BYREF\n int EventHandleSize; // [esp+18h] [ebp-6Ch] BYREF\n char BootGuardState[4]; // [esp+1Ch] [ebp-68h] BYREF\n char HashCtxBuf[32]; // [esp+20h] [ebp-64h] BYREF\n char DigestBuf[32]; // [esp+40h] [ebp-44h] BYREF\n char EventBuf[36]; // [esp+60h] [ebp-24h] BYREF\n\n EventHandleSize = 0; /*0xffe1c3a4*/\n Tpm12EventHandle = 0; /*0xffe1c3a8*/\n AcmStructPtr = 0; /*0xffe1c3ac*/\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] : Enter LogAuthorityPCREvent(...)\\n\");\n Tpm12Status = LogBootGuardTpm12Event(0xCu, &Tpm12EventHandle); /*0xffe1c3bd*/\n Tpm12Status_1 = Tpm12Status; /*0xffe1c3c2*/\n if ( Tpm12Status >= 0 )\n {\n if ( (*(_DWORD *)(Tpm12EventHandle + 28) & 4) != 0 )\n {\n BootGuardState[0] = ReadMsr(); /*0xffe1c40d*/\n DebugPrintWrapper(64, \"BP->RSTR:[%x]\\n\", (unsigned __int8)BootGuardState[0]); /*0xffe1c41b*/\n BootGuardState[1] = IsBootGuardCapable(); /*0xffe1c428*/\n DebugPrintWrapper(64, \"BP->TYPE:[%x]\\n\", (unsigned __int8)BootGuardState[1]); /*0xffe1c436*/\n Tpm12Status_2 = LogBootGuardTpm12Event(2u, &AcmStructPtr); /*0xffe1c444*/\n Tpm12Status_1 = Tpm12Status_2; /*0xffe1c449*/\n if ( Tpm12Status_2 >= 0 )\n {\n *(_WORD *)&BootGuardState[2] = IoWrite16((unsigned __int16 *)(AcmStructPtr + 28)); /*0xffe1c466*/\n DebugPrintWrapper(64, \"BP->ACM_SVN = [%x]\\n\", *(unsigned __int16 *)&BootGuardState[2]); /*0xffe1c475*/\n (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))(HashCtxBuf, -19725312, 32); /*0xffe1c48c*/\n Tpm12Status_3 = LogBootGuardTpm12Event(0xBu, &EventHandleSize); /*0xffe1c498*/\n Tpm12Status_1 = Tpm12Status_3; /*0xffe1c49d*/\n if ( Tpm12Status_3 >= 0 )\n {\n EventHandleSize_1 = EventHandleSize; /*0xffe1c4ae*/\n EventHandleSize = 256; /*0xffe1c4b8*/\n AcmStructPtr = EventHandleSize_1 + 58; /*0xffe1c4c4*/\n GetFirstGuidHob(1, (char *)&AcmStructPtr, &EventHandleSize, DigestBuf); /*0xffe1c4d2*/\n (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))(EventBuf, EventHandleSize_1 + 16, 32); /*0xffe1c4e5*/\n DebugPrintWrapper(64, \"BP Hash Structure, Size[%x]\", 100); /*0xffe1c4f4*/\n DebugPrintHexBytes(0x64u, (int)BootGuardState); /*0xffe1c503*/\n if ( n2 != 1 && (n2 == 2 || n2 == 3) ) /*0xffe1c515*/\n return CreateBootGuardTPM20Event( /*0xffe1c537*/\n n17,\n 7,\n -2147483647,\n BootGuardState,\n 100,\n L\"Boot Guard Measured S-CRTM\",\n 54);\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TRACE ERROR - %r\\n\", 989, Tpm12Status_3);\n }\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TRACE ERROR - %r\\n\", 976, Tpm12Status_2);\n }\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Skip Log Authority Event\\n\", 959);\n return 0; /*0xffe1c401*/\n }\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TRACE ERROR - %r\\n\", 951, Tpm12Status);\n }\n return Tpm12Status_1; /*0xffe1c53b*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20d34","name":"aBootguardtcg2C_37","string":"[BootGuardTCG2.c] : Enter LogAuthorityPCREvent(...)\n"},{"addr":"0xffe1c24b","name":"LogBootGuardTpm12Event"},{"addr":"0xffe1bade","name":"ReadMsr"},{"addr":"0xffe20d6c","name":"aBpRstrX","string":"BP->RSTR:[%x]\n"},{"addr":"0xffe1bb37","name":"IsBootGuardCapable"},{"addr":"0xffe20d7c","name":"aBpTypeX","string":"BP->TYPE:[%x]\n"},{"addr":"0xffe1d2aa","name":"IoWrite16"},{"addr":"0xffe20d8c","name":"aBpAcmSvnX","string":"BP->ACM_SVN = [%x]\n"},{"addr":"0xffe1d308","name":"GetFirstGuidHob"},{"addr":"0xffe20da0","name":"aBpHashStructur","string":"BP Hash Structure, Size[%x]"},{"addr":"0xffe1b9c6","name":"DebugPrintHexBytes"},{"addr":"0xffe1be6a","name":"CreateBootGuardTPM20Event"},{"addr":"0xffe21190","name":"Boot_Guard_Measured_S_CRTM","string":"\u6f42\u746f\u4720\u6175\u6472\u4d20\u6165\u7573\u6572\u2064\u2d53\u5243\u4d54"},{"addr":"0xffe20cdc","name":"aBootguardtcg2C_18","string":"BootGuardTCG2.c[%d]: TRACE ERROR - %r\n"},{"addr":"0xffe20d04","name":"aBootguardtcg2C_19","string":"BootGuardTCG2.c[%d]: Skip Log Authority Event\n"}]} +_WORD *GetHobFromAddress(int a1, _WORD *a2) +{ + _WORD *HobList; // eax + _WORD *HobList_1; // esi -{"addr":"0xffe1c543","code":"int LogDetailPCREvent(int n17, char n2)\n{\n int Tpm12Status; // eax\n int Tpm12EventHandle_1; // esi\n __int16 AcmSvnValue; // ax\n int Tpm12StatusB; // eax\n unsigned __int8 *KmStructPtr_1; // esi\n int Tpm12StatusC; // eax\n int BpmStructPtr_1; // edi\n int SegCountOffset; // esi\n int CallbackParam; // ecx\n char *src; // [esp+14h] [ebp-10h] BYREF\n int Tpm12EventHandle; // [esp+18h] [ebp-Ch] BYREF\n unsigned __int8 *KmStructPtr; // [esp+1Ch] [ebp-8h] BYREF\n int BpmStructPtr; // [esp+20h] [ebp-4h] BYREF\n\n src = 0; /*0xffe1c55b*/\n KmStructPtr = 0; /*0xffe1c55f*/\n BpmStructPtr = 0; /*0xffe1c563*/\n Tpm12EventHandle = 0; /*0xffe1c567*/\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] : Enter LogDetailPCREvent(...)\\n\");\n if ( (*(int ( **)(int, int, char **))(*(_DWORD *)n17 + 76))(n17, 804, &src) < 0 ) /*0xffe1c585*/\n return -2147483639; /*0xffe1c587*/\n DebugPrintWrapper(64, \"MSR[0x%x]:[%08x]\\n\", 314, (unsigned int)__readmsr(0x13Au)); /*0xffe1c5a5*/\n DebugPrintWrapper(64, \"ACM_STATUS:[%08x]\\n\", MEMORY[0xFED30328]); /*0xffe1c5b9*/\n *src = ReadMsr(); /*0xffe1c5ca*/\n DebugPrintWrapper(64, \"BP->RSTR:[%x]\\n\", (unsigned __int8)*src); /*0xffe1c5da*/\n src[1] = IsBootGuardCapable(); /*0xffe1c5eb*/\n DebugPrintWrapper(64, \"BP->TYPE:[%x]\\n\", (unsigned __int8)src[1]); /*0xffe1c5fd*/\n Tpm12Status = LogBootGuardTpm12Event(2u, &Tpm12EventHandle); /*0xffe1c60b*/\n if ( Tpm12Status >= 0 )\n {\n Tpm12EventHandle_1 = Tpm12EventHandle; /*0xffe1c62d*/\n AcmSvnValue = IoWrite16((unsigned __int16 *)(Tpm12EventHandle + 28)); /*0xffe1c634*/\n *((_WORD *)src + 1) = AcmSvnValue; /*0xffe1c63d*/\n DebugPrintWrapper(64, \"BP->ACM_SVN = [%x]\\n\", *((unsigned __int16 *)src + 1)); /*0xffe1c650*/\n (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))(src + 4, Tpm12EventHandle_1 + 388, 256); /*0xffe1c66f*/\n DebugPrintHexBytes(0x100u, (int)(src + 4)); /*0xffe1c67e*/\n Tpm12StatusB = LogBootGuardTpm12Event(0xBu, &KmStructPtr); /*0xffe1c689*/\n if ( Tpm12StatusB >= 0 )\n {\n KmStructPtr_1 = KmStructPtr; /*0xffe1c69a*/\n DebugPrintWrapper(64, \"\\nKmStructure: Addr[%lx]\\n\", KmStructPtr);\n ParseBootGuardStructureId(KmStructPtr_1); /*0xffe1c6af*/\n (*(void ( **)(char *, unsigned __int8 *, int))(*(_DWORD *)n17 + 80))(src + 260, KmStructPtr_1 + 321, 256); /*0xffe1c6c8*/\n DebugPrintHexBytes(0x100u, (int)(src + 260)); /*0xffe1c6da*/\n Tpm12StatusC = LogBootGuardTpm12Event(0xCu, &BpmStructPtr); /*0xffe1c6e5*/\n if ( Tpm12StatusC >= 0 )\n {\n BpmStructPtr_1 = BpmStructPtr; /*0xffe1c6f9*/\n DebugPrintWrapper(64, \"\\nBpmStructure: Addr[%lx]\\n\", BpmStructPtr);\n ParseBootGuardStructureId((unsigned __int8 *)BpmStructPtr_1); /*0xffe1c70e*/\n DebugPrintWrapper(64, \"BpmStructure->Ibb_Element.EntryPoint[%x]\\n\", *(_DWORD *)(BpmStructPtr_1 + 108)); /*0xffe1c71c*/\n DebugPrintWrapper( /*0xffe1c732*/\n 64,\n \"BpmStructure->Ibb_Element.SegmentCount[%x]\\n\",\n *(unsigned __int8 *)(BpmStructPtr_1 + 148));\n SegCountOffset = 12 * *(unsigned __int8 *)(BpmStructPtr_1 + 148); /*0xffe1c741*/\n DebugPrintWrapper(64, \"\\nBpmStructure->Bpm_Signature_Element.KeySignaturee\"); /*0xffe1c74a*/\n (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))( /*0xffe1c769*/\n src + 516,\n SegCountOffset + BpmStructPtr_1 + 431,\n 256);\n DebugPrintHexBytes(0x100u, (int)(src + 516)); /*0xffe1c77e*/\n DebugPrintWrapper(64, \"\\n\\nBpmStructure->Digest_of_Hashed_IBB_Segment:\"); /*0xffe1c789*/\n (*(void ( **)(char *, int, int))(*(_DWORD *)n17 + 80))(src + 772, BpmStructPtr_1 + 116, 32); /*0xffe1c7a0*/\n DebugPrintHexBytes(0x20u, (int)(src + 772)); /*0xffe1c7b3*/\n DebugPrintWrapper(64, \"BP Hash Structure, Size[%x]\", 804); /*0xffe1c7c4*/\n DebugPrintHexBytes(0x324u, (int)src); /*0xffe1c7d2*/\n if ( n2 == 1 ) /*0xffe1c7dd*/\n {\n CreateBootGuardTPM12Event(CallbackParam, src); /*0xffe1c7e9*/\n }\n else if ( n2 == 2 || n2 == 3 ) /*0xffe1c7f6*/\n {\n CreateBootGuardTPM20Event(n17, 0, 7, src, 804, \"Boot Guard Measured S-CRTM\", 27); /*0xffe1c80a*/\n }\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TRACE ERROR - %r\\n\", 1099, Tpm12StatusC);\n }\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TRACE ERROR - %r\\n\", 1087, Tpm12StatusB);\n }\n }\n else\n {\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: TRACE ERROR - %r\\n\", 1075, Tpm12Status);\n }\n return 0; /*0xffe1c814*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20dbc","name":"aBootguardtcg2C_36","string":"[BootGuardTCG2.c] : Enter LogDetailPCREvent(...)\n"},{"addr":"0xffe20df0","name":"aMsr0xX08x","string":"MSR[0x%x]:[%08x]\n"},{"addr":"0xffe20e04","name":"aAcmStatus08x","string":"ACM_STATUS:[%08x]\n"},{"addr":"0xffe1bade","name":"ReadMsr"},{"addr":"0xffe20d6c","name":"aBpRstrX","string":"BP->RSTR:[%x]\n"},{"addr":"0xffe1bb37","name":"IsBootGuardCapable"},{"addr":"0xffe20d7c","name":"aBpTypeX","string":"BP->TYPE:[%x]\n"},{"addr":"0xffe1c24b","name":"LogBootGuardTpm12Event"},{"addr":"0xffe1d2aa","name":"IoWrite16"},{"addr":"0xffe20d8c","name":"aBpAcmSvnX","string":"BP->ACM_SVN = [%x]\n"},{"addr":"0xffe1b9c6","name":"DebugPrintHexBytes"},{"addr":"0xffe20e18","name":"aKmstructureAdd","string":"\nKmStructure: Addr[%lx]\n"},{"addr":"0xffe1ba10","name":"ParseBootGuardStructureId"},{"addr":"0xffe20e34","name":"aBpmstructureAd","string":"\nBpmStructure: Addr[%lx]\n"},{"addr":"0xffe20e50","name":"aBpmstructureIb","string":"BpmStructure->Ibb_Element.EntryPoint[%x]\n"},{"addr":"0xffe20e7c","name":"aBpmstructureIb_0","string":"BpmStructure->Ibb_Element.SegmentCount[%x]\n"},{"addr":"0xffe20ea8","name":"aBpmstructureBp","string":"\nBpmStructure->Bpm_Signature_Element.KeySignaturee"},{"addr":"0xffe20edc","name":"aBpmstructureDi","string":"\n\nBpmStructure->Digest_of_Hashed_IBB_Segment:"},{"addr":"0xffe20da0","name":"aBpHashStructur","string":"BP Hash Structure, Size[%x]"},{"addr":"0xffe1bc2d","name":"CreateBootGuardTPM12Event"},{"addr":"0xffe1be6a","name":"CreateBootGuardTPM20Event"},{"addr":"0xffe211c8","name":"aBootGuardMeasu","string":"Boot Guard Measured S-CRTM"},{"addr":"0xffe20cdc","name":"aBootguardtcg2C_18","string":"BootGuardTCG2.c[%d]: TRACE ERROR - %r\n"}]} + while ( 1 ) /*0xffe1d11d*/ + { + HobList = GetHobList(a1, a2); /*0xffe1d11d*/ + HobList_1 = HobList; /*0xffe1d122*/ + if ( !HobList || HobIsSuitable(a1, (int)(HobList + 4)) ) /*0xffe1d10e*/ + break; /*0xffe1d10e*/ + a2 = (_WORD *)((char *)HobList_1 + (unsigned __int16)HobList_1[1]); /*0xffe1d11b*/ + } + return HobList_1; /*0xffe1d128*/ +} -{"addr":"0xffe1c81c","code":"int __thiscall LogTxtTpm12CRTMEvent(void *this)\n{\n int ReturnStatus; // esi\n int HashDigest_1; // edi\n unsigned int FitTotalEntries; // ebx\n unsigned int FitTableCopy_1; // eax\n _BYTE *EntryCursor; // ebp\n int TpmEventResult; // ecx\n int Type7Count; // ebp\n int Type7SearchPtr; // ecx\n unsigned int Type7Remaining; // edx\n int Type2DSearchIdx; // ecx\n int i; // eax\n int TpmEventResult_1; // [esp-4h] [ebp-90h]\n int TpmEventResult_2; // [esp-4h] [ebp-90h]\n int FitCountRemaining; // [esp+18h] [ebp-74h] BYREF\n unsigned int FitTableCopy; // [esp+1Ch] [ebp-70h]\n int HashDigest; // [esp+20h] [ebp-6Ch]\n int EventSizeArray[5]; // [esp+24h] [ebp-68h] BYREF\n int EventSizes[10]; // [esp+38h] [ebp-54h] BYREF\n char *EventDataArray[11]; // [esp+60h] [ebp-2Ch] BYREF\n\n ReturnStatus = 0; /*0xffe1c833*/\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Enter LogTxtTpm12CRTMEvent\\n\", 1175);\n HashDigest_1 = MEMORY[0xFFFFFFC0]; /*0xffe1c840*/\n HashDigest = MEMORY[0xFFFFFFC0]; /*0xffe1c842*/\n if ( MEMORY[0xFFFFFFC0] == -1 )\n {\n ReturnStatus = -2147483642; /*0xffe1c858*/\n DebugPrintWrapper(64, \"[%d] : FitEntryPointer(%lx) is empty\\n\", 1183, -1);\n }\n else if ( *MEMORY[0xFFFFFFC0] == 1414088287 && *(_DWORD *)(MEMORY[0xFFFFFFC0] + 4) == 538976351 )\n {\n FitTotalEntries = *(_DWORD *)(MEMORY[0xFFFFFFC0] + 8); /*0xffe1c883*/\n if ( FitTotalEntries > 1 )\n {\n FitTableCopy_1 = FitTotalEntries - 1; /*0xffe1c88f*/\n EntryCursor = (_BYTE *)(MEMORY[0xFFFFFFC0] + 16); /*0xffe1c892*/\n FitTableCopy = FitTotalEntries - 1; /*0xffe1c895*/\n do\n {\n if ( EntryCursor[14] == 2 )\n {\n FitCountRemaining = *(_DWORD *)(*(_DWORD *)EntryCursor + 20); /*0xffe1c8b2*/\n (*(void ( **)(int *, int, _DWORD))(*(_DWORD *)this + 84))(EventSizeArray, 20, 0); /*0xffe1c8b8*/\n EventSizeArray[0] = FitCountRemaining; /*0xffe1c8c2*/\n ReturnStatus = LogBootGuardEventInternal(TpmEventResult, EventSizeArray, \"FIT Type 0x02 Measured S-CRTM\", 30); /*0xffe1c8da*/\n if ( ReturnStatus < 0 )\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Error LogBootGuardTPM12Event(...)\\n\", 1219);\n FitTableCopy_1 = FitTableCopy; /*0xffe1c8f7*/\n }\n EntryCursor += 16; /*0xffe1c8fb*/\n FitTableCopy = --FitTableCopy_1; /*0xffe1c901*/\n }\n while ( FitTableCopy_1 );\n HashDigest_1 = HashDigest; /*0xffe1c907*/\n if ( ReturnStatus < 0 )\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Error TRACE CODE\\n\", 1227);\n }\n Type7Count = 0; /*0xffe1c923*/\n if ( FitTotalEntries > 1 )\n {\n Type7SearchPtr = HashDigest_1 + 24; /*0xffe1c92a*/\n Type7Remaining = FitTotalEntries - 1; /*0xffe1c92d*/\n do /*0xffe1c94d*/\n {\n if ( *(_BYTE *)(Type7SearchPtr + 6) == 7 ) /*0xffe1c934*/\n {\n EventDataArray[Type7Count] = *(char **)(Type7SearchPtr - 8); /*0xffe1c939*/\n EventSizes[Type7Count++] = 16 * *(_DWORD *)Type7SearchPtr; /*0xffe1c942*/\n }\n Type7SearchPtr += 16; /*0xffe1c947*/\n --Type7Remaining; /*0xffe1c94a*/\n }\n while ( Type7Remaining ); /*0xffe1c94d*/\n if ( Type7Count )\n {\n DebugAssertPrint(Type7Count, EventDataArray, (int)EventSizes, (int)EventSizeArray); /*0xffe1c963*/\n ReturnStatus = LogBootGuardEventInternal(TpmEventResult_1, EventSizeArray, \"FIT Type 0x07 Measured S-CRTM\", 30); /*0xffe1c982*/\n if ( ReturnStatus < 0 )\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Error LogBootGuardTPM12Event(...)\\n\", 1259);\n }\n }\n FitCountRemaining = 0; /*0xffe1c9a5*/\n Type2DSearchIdx = 1; /*0xffe1c9ac*/\n if ( FitTotalEntries > 1 )\n {\n for ( i = HashDigest_1 + 16; *(_BYTE *)(i + 14) != 45; i += 16 ) /*0xffe1c9b5*/\n {\n if ( ++Type2DSearchIdx >= FitTotalEntries ) /*0xffe1c9c4*/\n return ReturnStatus; /*0xffe1c9c4*/\n }\n FitCountRemaining = *(_DWORD *)i; /*0xffe1c9ce*/\n EventSizes[0] = 4; /*0xffe1c9d8*/\n EventDataArray[0] = (char *)&FitCountRemaining; /*0xffe1c9e0*/\n DebugAssertPrint(1, EventDataArray, (int)EventSizes, (int)EventSizeArray); /*0xffe1c9ef*/\n ReturnStatus = LogBootGuardEventInternal(TpmEventResult_2, EventSizeArray, \"FIT Type 0x2D Measured S-CRTM\", 30); /*0xffe1ca0a*/\n if ( ReturnStatus < 0 )\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Error LogBootGuardTPM12Event(...)\\n\", 1291);\n }\n }\n else\n {\n ReturnStatus = -2147483642; /*0xffe1ca2c*/\n DebugPrintWrapper(64, \"[%d] : [Type 0] FitEntry->TblAddress(%lx) is error\\n\", 1191, *MEMORY[0xFFFFFFC0]);\n }\n return ReturnStatus; /*0xffe1ca47*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20f0c","name":"aBootguardtcg2C_38","string":"BootGuardTCG2.c[%d]: Enter LogTxtTpm12CRTMEvent\n"},{"addr":"0xffe20f40","name":"aDFitentrypoint","string":"[%d] : FitEntryPointer(%lx) is empty\n"},{"addr":"0xffe1bb82","name":"LogBootGuardEventInternal"},{"addr":"0xffe21150","name":"FIT_Type_0x02_Measured_S_CRTM","string":"FIT Type 0x02 Measured S-CRTM"},{"addr":"0xffe20f9c","name":"aBootguardtcg2C_39","string":"BootGuardTCG2.c[%d]: Error LogBootGuardTPM12Event(...)\n"},{"addr":"0xffe20fd4","name":"aBootguardtcg2C_40","string":"BootGuardTCG2.c[%d]: Error TRACE CODE\n"},{"addr":"0xffe19c92","name":"DebugAssertPrint"},{"addr":"0xffe211e4","name":"aFitType0x07Mea","string":"FIT Type 0x07 Measured S-CRTM"},{"addr":"0xffe21170","name":"aFitType0x2dMea","string":"FIT Type 0x2D Measured S-CRTM"},{"addr":"0xffe20f68","name":"aDType0Fitentry","string":"[%d] : [Type 0] FitEntry->TblAddress(%lx) is error\n"}]} +_WORD *GetSystemConfiguration() +{ + _WORD *Hob; // eax -{"addr":"0xffe1ca51","code":"int __thiscall LogTxtTpm20CRTMEvent(void *this)\n{\n int ThisPtr; // ebp\n int FitTableBase; // esi\n int ReturnStatus; // esi\n unsigned int FitTotalEntries; // ebx\n int FitEntryCursor; // edi\n int FinalEventStatus; // esi\n unsigned int RemainingEntries; // ebp\n int EntryArrayIndex; // ebx\n int EntryAddress; // eax\n bool IsError; // sf\n int FitEntryIndex_1; // edi\n int Type7SearchPtr; // ecx\n unsigned int Type7Remaining; // edx\n unsigned int FitTotalEntries_1; // ecx\n int *Type2DSearchPtr; // eax\n int FitEntryValue; // [esp+14h] [ebp-A0h] BYREF\n int ThisCopy; // [esp+18h] [ebp-9Ch]\n int EventResult; // [esp+1Ch] [ebp-98h]\n int FitEntryIndex; // [esp+20h] [ebp-94h]\n int FitTablePtr; // [esp+24h] [ebp-90h]\n unsigned int FitEntryCount; // [esp+28h] [ebp-8Ch]\n _BYTE HashBuffer[20]; // [esp+2Ch] [ebp-88h] BYREF\n int EventSizes[10]; // [esp+40h] [ebp-74h] BYREF\n char *EventDataPtrs[10]; // [esp+68h] [ebp-4Ch] BYREF\n char DigestBuffer[36]; // [esp+90h] [ebp-24h] BYREF\n\n EventResult = 0; /*0xffe1ca57*/\n ThisPtr = (int)this; /*0xffe1ca65*/\n ThisCopy = (int)this; /*0xffe1ca6e*/\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Enter LogTxtTpm20CRTMEvent\\n\", 1317);\n FitTableBase = MEMORY[0xFFFFFFC0]; /*0xffe1ca7d*/\n FitTablePtr = MEMORY[0xFFFFFFC0]; /*0xffe1ca7f*/\n if ( MEMORY[0xFFFFFFC0] == -1 )\n {\n ReturnStatus = -2147483642; /*0xffe1ca96*/\n DebugPrintWrapper(64, \"[%d] : FitEntryPointer(%lx) is empty\\n\", 1325, -1);\n }\n else if ( *MEMORY[0xFFFFFFC0] == 1414088287 && *(_DWORD *)(MEMORY[0xFFFFFFC0] + 4) == 538976351 )\n {\n FitTotalEntries = *(_DWORD *)(MEMORY[0xFFFFFFC0] + 8); /*0xffe1cac4*/\n FitEntryIndex = 0; /*0xffe1cac7*/\n FitEntryCount = FitTotalEntries; /*0xffe1cacc*/\n if ( FitTotalEntries > 1 )\n {\n FitEntryCursor = MEMORY[0xFFFFFFC0] + 16; /*0xffe1cad9*/\n FinalEventStatus = EventResult; /*0xffe1cadc*/\n RemainingEntries = FitTotalEntries - 1; /*0xffe1cae0*/\n EntryArrayIndex = FitEntryIndex; /*0xffe1cae3*/\n do\n {\n if ( *(_BYTE *)(FitEntryCursor + 14) == 2 )\n {\n EntryAddress = *(_DWORD *)FitEntryCursor; /*0xffe1caf1*/\n EventSizes[EntryArrayIndex] = 4; /*0xffe1caf7*/\n FitEntryValue = *(_DWORD *)(EntryAddress + 20); /*0xffe1cb02*/\n EventDataPtrs[EntryArrayIndex++] = (char *)&FitEntryValue; /*0xffe1cb0a*/\n GetFirstGuidHob(EntryArrayIndex, (char *)EventDataPtrs, EventSizes, DigestBuffer); /*0xffe1cb1e*/\n DebugAssertPrint(EntryArrayIndex, EventDataPtrs, (int)EventSizes, (int)HashBuffer); /*0xffe1cb33*/\n FinalEventStatus = LogBootGuardTpm20EventWrapper( /*0xffe1cb59*/\n ThisCopy,\n 0,\n 7,\n HashBuffer,\n DigestBuffer,\n \"FIT Type 0x02 Measured S-CRTM\",\n 30);\n if ( FinalEventStatus < 0 )\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Error LogBootGuardTPM20Event(...)\\n\", 1366);\n }\n FitEntryCursor += 16; /*0xffe1cb76*/\n --RemainingEntries; /*0xffe1cb79*/\n }\n while ( RemainingEntries );\n FitTotalEntries = FitEntryCount; /*0xffe1cb82*/\n IsError = FinalEventStatus < 0; /*0xffe1cb86*/\n FitTableBase = FitTablePtr; /*0xffe1cb88*/\n if ( IsError )\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Error TRACE CODE\\n\", 1374);\n ThisPtr = ThisCopy; /*0xffe1cba2*/\n }\n FitEntryIndex_1 = 0; /*0xffe1cba6*/\n if ( FitTotalEntries > 1 )\n {\n Type7SearchPtr = FitTableBase + 24; /*0xffe1cbb1*/\n Type7Remaining = FitTotalEntries - 1; /*0xffe1cbb4*/\n do /*0xffe1cbd4*/\n {\n if ( *(_BYTE *)(Type7SearchPtr + 6) == 7 ) /*0xffe1cbbb*/\n {\n EventDataPtrs[FitEntryIndex_1] = *(char **)(Type7SearchPtr - 8); /*0xffe1cbc0*/\n EventSizes[FitEntryIndex_1++] = 16 * *(_DWORD *)Type7SearchPtr; /*0xffe1cbc9*/\n }\n Type7SearchPtr += 16; /*0xffe1cbce*/\n --Type7Remaining; /*0xffe1cbd1*/\n }\n while ( Type7Remaining ); /*0xffe1cbd4*/\n if ( FitEntryIndex_1 )\n {\n GetFirstGuidHob(FitEntryIndex_1, (char *)EventDataPtrs, EventSizes, DigestBuffer); /*0xffe1cbed*/\n DebugAssertPrint(FitEntryIndex_1, EventDataPtrs, (int)EventSizes, (int)HashBuffer); /*0xffe1cc02*/\n if ( LogBootGuardTpm20EventWrapper(ThisPtr, 0, 7, HashBuffer, DigestBuffer, \"FIT Type 0x07 Measured S-CRTM\", 30) < 0 )\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Error LogBootGuardTPM20Event(...)\\n\", 1408);\n }\n }\n FitEntryValue = 0; /*0xffe1cc41*/\n FitTotalEntries_1 = 1; /*0xffe1cc49*/\n if ( FitTotalEntries > 1 ) /*0xffe1cc4d*/\n {\n Type2DSearchPtr = (int *)(FitTableBase + 16); /*0xffe1cc4f*/\n while ( *((_BYTE *)Type2DSearchPtr + 14) != 45 ) /*0xffe1cc56*/\n {\n ++FitTotalEntries_1; /*0xffe1cc58*/\n Type2DSearchPtr += 4; /*0xffe1cc59*/\n if ( FitTotalEntries_1 >= FitTotalEntries ) /*0xffe1cc5e*/\n goto LABEL_28; /*0xffe1cc5e*/\n }\n FitEntryValue = *Type2DSearchPtr; /*0xffe1cc64*/\n }\nLABEL_28:\n EventSizes[0] = 4; /*0xffe1cc68*/\n EventDataPtrs[0] = (char *)&FitEntryValue; /*0xffe1cc74*/\n GetFirstGuidHob(1, (char *)EventDataPtrs, EventSizes, DigestBuffer); /*0xffe1cc8b*/\n DebugAssertPrint(1, EventDataPtrs, (int)EventSizes, (int)HashBuffer); /*0xffe1cca0*/\n ReturnStatus = LogBootGuardTpm20EventWrapper( /*0xffe1ccc4*/\n ThisPtr,\n 0,\n 7,\n HashBuffer,\n DigestBuffer,\n \"FIT Type 0x2D Measured S-CRTM\",\n 30);\n if ( ReturnStatus < 0 )\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Error LogBootGuardTPM20Event(...)\\n\", 1445);\n }\n else\n {\n ReturnStatus = -2147483642; /*0xffe1ccf1*/\n DebugPrintWrapper(64, \"[%d] : [Type 0] FitEntry->TblAddress(%lx) is error\\n\", 1333, *MEMORY[0xFFFFFFC0]);\n }\n return ReturnStatus; /*0xffe1ccfe*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20ffc","name":"aBootguardtcg2C_41","string":"BootGuardTCG2.c[%d]: Enter LogTxtTpm20CRTMEvent\n"},{"addr":"0xffe20f40","name":"aDFitentrypoint","string":"[%d] : FitEntryPointer(%lx) is empty\n"},{"addr":"0xffe1d308","name":"GetFirstGuidHob"},{"addr":"0xffe19c92","name":"DebugAssertPrint"},{"addr":"0xffe1bce2","name":"LogBootGuardTpm20EventWrapper"},{"addr":"0xffe21150","name":"FIT_Type_0x02_Measured_S_CRTM","string":"FIT Type 0x02 Measured S-CRTM"},{"addr":"0xffe21030","name":"aBootguardtcg2C_42","string":"BootGuardTCG2.c[%d]: Error LogBootGuardTPM20Event(...)\n"},{"addr":"0xffe20fd4","name":"aBootguardtcg2C_40","string":"BootGuardTCG2.c[%d]: Error TRACE CODE\n"},{"addr":"0xffe211e4","name":"aFitType0x07Mea","string":"FIT Type 0x07 Measured S-CRTM"},{"addr":"0xffe21170","name":"aFitType0x2dMea","string":"FIT Type 0x2D Measured S-CRTM"},{"addr":"0xffe20f68","name":"aDType0Fitentry","string":"[%d] : [Type 0] FitEntry->TblAddress(%lx) is error\n"}]} + Hob = (_WORD *)PeiServicesLocateHob(); /*0xffe1d12f*/ + return GetHobFromAddress((int)&unk_FFE21668, Hob); /*0xffe1d141*/ +} -{"addr":"0xffe1cd0b","code":"int BootGuardTcg2MeasureCRTMVersion(int *n17)\n{\n char n2; // bl\n unsigned __int64 v2; // rax\n int v3; // eax\n int v4; // eax\n int v5; // eax\n int v6; // eax\n int v7; // eax\n int v8; // eax\n int v10[3]; // [esp+Ch] [ebp-Ch] BYREF\n\n v10[0] = 0; /*0xffe1cd25*/\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: Enter BootGuardTcg2MeasureCRTMVersion\\n\", 1465);\n n2 = DetectTpmDeviceType(n17); /*0xffe1cd3d*/\n if ( (*(int ( **)(int *, void *, _DWORD, _DWORD, int *))(*n17 + 32))(n17, &unk_FFE2175C, 0, 0, v10) < 0 ) /*0xffe1cd54*/\n v10[0] = 0; /*0xffe1cd56*/\n if ( MEMORY[0xFED300A4] < 0 )\n {\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Bit 63 success in 0xFED300A0\\n\"); /*0xffe1cd95*/\nLABEL_7:\n if ( CheckBootGuardCapabilityMsr() == 1 && CheckNemMeasureBootStatus() >= 0 ) /*0xffe1cdb0*/\n {\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Start the LogDetailPCREvent\\n\"); /*0xffe1cdbd*/\n v3 = SkipLogAuthorityEvent((int)n17, n2); /*0xffe1cdc8*/\n if ( v3 < 0 ) /*0xffe1cdd4*/\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v3); /*0xffe1cddd*/\n v4 = AssertReport(); /*0xffe1cde5*/\n if ( v4 ) /*0xffe1cdec*/\n (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe1cdfd*/\n \"e:\\\\hs\\\\PurleyPlatPkg\\\\BootGuard\\\\BootGuardTCG2\\\\BootGuardTCG2.c\",\n 1495,\n \"!EFI_ERROR (Status)\");\n }\n v5 = LogDetailPCREvent((int)n17, n2); /*0xffe1ce07*/\n if ( v5 < 0 ) /*0xffe1ce0e*/\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v5); /*0xffe1ce17*/\n v6 = AssertReport(); /*0xffe1ce1f*/\n if ( v6 ) /*0xffe1ce26*/\n (*(void ( **)(const char *, int, const char *))(v6 + 4))( /*0xffe1ce37*/\n \"e:\\\\hs\\\\PurleyPlatPkg\\\\BootGuard\\\\BootGuardTCG2\\\\BootGuardTCG2.c\",\n 1497,\n \"!EFI_ERROR (Status)\");\n }\n v7 = LogAuthorityPCREvent((int)n17, n2); /*0xffe1ce41*/\n if ( v7 < 0 ) /*0xffe1ce48*/\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v7); /*0xffe1ce55*/\n v8 = AssertReport(); /*0xffe1ce5d*/\n if ( v8 ) /*0xffe1ce64*/\n (*(void ( **)(const char *, int, const char *))(v8 + 4))( /*0xffe1ce79*/\n \"e:\\\\hs\\\\PurleyPlatPkg\\\\BootGuard\\\\BootGuardTCG2\\\\BootGuardTCG2.c\",\n 1499,\n \"!EFI_ERROR (Status)\");\n }\n goto LABEL_27; /*0xffe1ce7c*/\n }\n if ( LogTpm20LocalityStartupEvent((int)n17, n2) < 0 )\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\\n\", 1507);\n if ( n2 == 1 )\n {\n if ( LogTxtTpm12CRTMEvent(n17) >= 0 )\n {\nLABEL_27:\n DebugPrintWrapper(64, \"BootGuardTCG2.c[%d]: End of BootGuardTcg2MeasureCRTMVersion\\n\", 1524);\n goto LABEL_28; /*0xffe1cefa*/\n }\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\\n\", 1513);\n }\n if ( (n2 == 2 || n2 == 3) && LogTxtTpm20CRTMEvent(n17) < 0 )\n DebugPrintWrapper(0x80000000, \"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\\n\", 1520);\n goto LABEL_27; /*0xffe1cee6*/\n }\n DebugPrintWrapper(64, \"[BootGuardTCG2.c] Bit 63 fail in 0xFED300A0\\n\"); /*0xffe1cd73*/\n v2 = __readmsr(0x13Au); /*0xffe1cd7f*/\n if ( (v2 & 0x20) != 0 ) /*0xffe1cd86*/\n goto LABEL_7; /*0xffe1cd86*/\nLABEL_28:\n if ( n2 != 1 && (n2 == 2 || n2 == 3) ) /*0xffe1cf18*/\n LogBootGuardTpm20Event(n17, v10[0]); /*0xffe1cf20*/\n else\n LocateTcgPpi(n17); /*0xffe1cf09*/\n return 0; /*0xffe1cf25*/\n}","refs":[{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe21068","name":"aBootguardtcg2C_20","string":"BootGuardTCG2.c[%d]: Enter BootGuardTcg2MeasureCRTMVersion\n"},{"addr":"0xffe1c11e","name":"DetectTpmDeviceType"},{"addr":"0xffe2175c","name":"unk_FFE2175C"},{"addr":"0xffe205c0","name":"aBootguardtcg2C_22","string":"[BootGuardTCG2.c] Bit 63 success in 0xFED300A0\n"},{"addr":"0xffe210a4","name":"aBootguardtcg2C_35","string":"[BootGuardTCG2.c] Start the LogDetailPCREvent\n"},{"addr":"0xffe1c318","name":"SkipLogAuthorityEvent"},{"addr":"0xffe20048","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe210d4","name":"aEHsPurleyplatp","string":"e:\\hs\\PurleyPlatPkg\\BootGuard\\BootGuardTCG2\\BootGuardTCG2.c"},{"addr":"0xffe2006c","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe1c543","name":"LogDetailPCREvent"},{"addr":"0xffe1c38e","name":"LogAuthorityPCREvent"},{"addr":"0xffe1b974","name":"CheckBootGuardCapabilityMsr"},{"addr":"0xffe1ba55","name":"CheckNemMeasureBootStatus"},{"addr":"0xffe208d4","name":"aBootguardtcg2C_1","string":"BootGuardTCG2.c[%d] : Can not Find TCG HOB Logs\n"},{"addr":"0xffe1c2ad","name":"LogTpm20LocalityStartupEvent"},{"addr":"0xffe21110","name":"aBootguardtcg2C_43","string":"BootGuardTCG2.c[%d]: End of BootGuardTcg2MeasureCRTMVersion\n"},{"addr":"0xffe1c81c","name":"LogTxtTpm12CRTMEvent"},{"addr":"0xffe1ca51","name":"LogTxtTpm20CRTMEvent"},{"addr":"0xffe20590","name":"aBootguardtcg2C_21","string":"[BootGuardTCG2.c] Bit 63 fail in 0xFED300A0\n"},{"addr":"0xffe1bfbc","name":"LogBootGuardTpm20Event"},{"addr":"0xffe1c053","name":"LocateTcgPpi"}]} +int GetNextHob(int a1, int a2) +{ + int Next; // eax + int v4; // eax + int v6; // [esp+4h] [ebp-4h] BYREF -{"addr":"0xffe1cf2e","code":"int HobGetBaseAddress()\n{\n unsigned __int8 v0; // al\n char n3; // al\n char n3_1; // cl\n\n v0 = __inbyte(0x70u); /*0xffe1cf34*/\n __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe1cf39*/\n n3 = __inbyte(0x71u); /*0xffe1cf40*/\n n3_1 = n3; /*0xffe1cf41*/\n if ( (unsigned __int8)n3 <= 3u ) /*0xffe1cf46*/\n {\nLABEL_4:\n if ( !n3_1 ) /*0xffe1cf61*/\n return 0; /*0xffe1cf61*/\n goto LABEL_5; /*0xffe1cf61*/\n }\n n3_1 = n3; /*0xffe1cf48*/\n if ( !n3 ) /*0xffe1cf50*/\n {\n n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe1cf5c*/\n goto LABEL_4; /*0xffe1cf5c*/\n }\nLABEL_5:\n if ( n3_1 != -1 )\n return n3_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe1cf79*/\n}","refs":[{"addr":"0xffe2177d","name":"n3"}]} + Next = HobGetNext(); /*0xffe1d149*/ + if ( (*(int ( **)(int, int, int, int *))(*(_DWORD *)Next + 52))(Next, 4, a2, &v6) < 0 ) /*0xffe1d161*/ + v6 = 0; /*0xffe1d163*/ + if ( !v6 ) /*0xffe1d16b*/ + { + v4 = AssertReport(); /*0xffe1d16d*/ + if ( v4 ) /*0xffe1d174*/ + (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe1d185*/ + "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", + 250, + "Hob != ((void *) 0)"); + } + return v6; /*0xffe1d15e*/ +} -{"addr":"0xffe1cf7d","code":"int HobGetNext()\n{\n int v0; // esi\n _BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF\n int v3; // [esp+6h] [ebp-6h]\n\n HobGetEnd(v2); /*0xffe1cf86*/\n v0 = *(_DWORD *)(v3 - 4); /*0xffe1cf8e*/\n if ( !v0 ) /*0xffe1cf93*/\n DebugVPrint( /*0xffe1cfa2*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n \"PeiServices != ((void *) 0)\");\n return v0; /*0xffe1cfaa*/\n}","refs":[{"addr":"0xffe1d00f","name":"HobGetEnd"},{"addr":"0xffe19c74","name":"DebugVPrint"},{"addr":"0xffe21220","name":"aEHsMdepkgLibra_0","string":"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c"},{"addr":"0xffe21204","name":"Idtr____((void__)_0)","string":"PeiServices != ((void *) 0)"}]} +int BuildGuidHob(int a1, unsigned int n0xFFE0) +{ + int v3; // eax + int result; // eax + int v5; // esi -{"addr":"0xffe1cfaf","code":"__int64 __thiscall HobGetType(void *this)\n{\n int v2; // eax\n\n if ( !this ) /*0xffe1cfb4*/\n {\n v2 = AssertReport(); /*0xffe1cfb6*/\n if ( v2 ) /*0xffe1cfbd*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe1cfce*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\Unaligned.c\",\n 192,\n \"Buffer != ((void *) 0)\");\n }\n return *(_QWORD *)this; /*0xffe1cfd9*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe21270","name":"aEHsMdepkgLibra_4","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c"},{"addr":"0xffe20360","name":"aBufferVoid0","string":"Buffer != ((void *) 0)"}]} + if ( n0xFFE0 > 0xFFE0 ) /*0xffe1d19b*/ + { + v3 = AssertReport(); /*0xffe1d19d*/ + if ( v3 ) /*0xffe1d1a4*/ + (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe1d1b5*/ + "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", + 421, + "DataLength <= (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE))"); + } + result = GetNextHob(a1, n0xFFE0 + 24); /*0xffe1d1be*/ + v5 = result; /*0xffe1d1c3*/ + if ( result ) /*0xffe1d1c7*/ + { + GetHobLength(result + 8, (int)&unk_FFE21668); /*0xffe1d1d3*/ + return v5 + 24; /*0xffe1d1d8*/ + } + return result; /*0xffe1d1c9*/ +} -{"addr":"0xffe1cfdb","code":"int ReadUnaligned32(int Type, int a2)\n{\n _DWORD *v2; // ecx\n _DWORD *v3; // esi\n int v4; // eax\n\n v3 = v2; /*0xffe1cfdc*/\n if ( !v2 ) /*0xffe1cfe0*/\n {\n v4 = AssertReport(); /*0xffe1cfe2*/\n if ( v4 ) /*0xffe1cfe9*/\n (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe1cffa*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\Unaligned.c\",\n 219,\n \"Buffer != ((void *) 0)\");\n }\n *v3 = Type; /*0xffe1d008*/\n v3[1] = a2; /*0xffe1d00a*/\n return Type; /*0xffe1d00d*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe21270","name":"aEHsMdepkgLibra_4","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c"},{"addr":"0xffe20360","name":"aBufferVoid0","string":"Buffer != ((void *) 0)"}]} +void *GetEndOfHobList(void *buf, unsigned int count) +{ + int v4; // eax -{"addr":"0xffe1d00f","code":"void *__thiscall HobGetEnd(void *this)\n{\n void *this_1; // eax\n\n if ( !this ) /*0xffe1d015*/\n DebugVPrint((int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\", 37, \"Idtr != ((void *) 0)\"); /*0xffe1d024*/\n this_1 = this; /*0xffe1d02a*/\n __sidt(this); /*0xffe1d02d*/\n return this_1; /*0xffe1d031*/\n}","refs":[{"addr":"0xffe19c74","name":"DebugVPrint"},{"addr":"0xffe212b4","name":"aEHsMdepkgLibra_1","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c"},{"addr":"0xffe2129c","name":"aIdtrVoid0","string":"Idtr != ((void *) 0)"}]} + if ( count - 1 > -1 - (int)buf ) /*0xffe1d1ee*/ + { + v4 = AssertReport(); /*0xffe1d1f0*/ + if ( v4 ) /*0xffe1d1f7*/ + (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe1d205*/ + "e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\SetMemWrapper.c", + 54, + "(Length - 1) <= (0xFFFFFFFF - (UINTN)Buffer)"); + } + return ZeroMem(buf, count, 0); /*0xffe1d217*/ +} -{"addr":"0xffe1d04f","code":"int PeiServicesLocateHob()\n{\n int Next; // eax\n int v1; // eax\n int v2; // eax\n int v3; // eax\n int v5; // [esp+4h] [ebp-4h] BYREF\n\n Next = HobGetNext(); /*0xffe1d054*/\n v1 = (*(int ( **)(int, int *))(*(_DWORD *)Next + 48))(Next, &v5); /*0xffe1d060*/\n if ( v1 < 0 ) /*0xffe1d06c*/\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v1); /*0xffe1d079*/\n v2 = AssertReport(); /*0xffe1d081*/\n if ( v2 ) /*0xffe1d088*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe1d092*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 50,\n \"!EFI_ERROR (Status)\");\n }\n if ( !v5 ) /*0xffe1d09c*/\n {\n v3 = AssertReport(); /*0xffe1d09e*/\n if ( v3 ) /*0xffe1d0a5*/\n (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe1d0af*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 51,\n \"HobList != ((void *) 0)\");\n }\n return v5; /*0xffe1d0b8*/\n}","refs":[{"addr":"0xffe1cf7d","name":"HobGetNext"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20048","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe212e0","name":"aEHsMdepkgLibra_2","string":"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe2006c","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe21308","name":"aHoblistVoid0","string":"HobList != ((void *) 0)"}]} +int GetHobLength(int a1, int a2) +{ + __int64 Type; // rax + __int64 Type_1; // rax -{"addr":"0xffe1d0bd","code":"_WORD *GetHobList(int a1, _WORD *a2)\n{\n _WORD *v2; // esi\n int v3; // eax\n\n v2 = a2; /*0xffe1d0be*/\n if ( !a2 ) /*0xffe1d0c2*/\n {\n v3 = AssertReport(); /*0xffe1d0c4*/\n if ( v3 ) /*0xffe1d0cb*/\n (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe1d0d9*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 82,\n \"HobStart != ((void *) 0)\");\n }\n while ( 1 ) /*0xffe1d0f2*/\n {\n if ( *v2 == 0xFFFF ) /*0xffe1d0f8*/\n return 0; /*0xffe1d0fd*/\n if ( *v2 == 4 ) /*0xffe1d0ea*/\n break; /*0xffe1d0ea*/\n v2 = (_WORD *)((char *)v2 + (unsigned __int16)v2[1]); /*0xffe1d0f0*/\n }\n return v2; /*0xffe1d0fc*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe212e0","name":"aEHsMdepkgLibra_2","string":"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe21320","name":"aHobstartVoid0","string":"HobStart != ((void *) 0)"}]} + Type = HobGetType((void *)a2); /*0xffe1d223*/ + ReadUnaligned32(Type, SHIDWORD(Type)); /*0xffe1d22c*/ + Type_1 = HobGetType((void *)(a2 + 8)); /*0xffe1d234*/ + ReadUnaligned32(Type_1, SHIDWORD(Type_1)); /*0xffe1d23e*/ + return a1; /*0xffe1d248*/ +} -{"addr":"0xffe1d102","code":"_WORD *GetHobFromAddress(int a1, _WORD *a2)\n{\n _WORD *HobList; // eax\n _WORD *HobList_1; // esi\n\n while ( 1 ) /*0xffe1d11d*/\n {\n HobList = GetHobList(a1, a2); /*0xffe1d11d*/\n HobList_1 = HobList; /*0xffe1d122*/\n if ( !HobList || HobIsSuitable(a1, (int)(HobList + 4)) ) /*0xffe1d10e*/\n break; /*0xffe1d10e*/\n a2 = (_WORD *)((char *)HobList_1 + (unsigned __int16)HobList_1[1]); /*0xffe1d11b*/\n }\n return HobList_1; /*0xffe1d128*/\n}","refs":[{"addr":"0xffe1d0bd","name":"GetHobList"},{"addr":"0xffe1d24b","name":"HobIsSuitable"}]} +bool HobIsSuitable(int a1, int a2) +{ + __int64 Type; // rax + int Type_1; // ebp + __int64 Type_3; // rax + int Type_2; // edi + __int64 v8; // kr00_8 + __int64 v9; // rax + int v11; // [esp+10h] [ebp-Ch] + int v12; // [esp+14h] [ebp-8h] -{"addr":"0xffe1d12e","code":"_WORD *GetSystemConfiguration()\n{\n _WORD *Hob; // eax\n\n Hob = (_WORD *)PeiServicesLocateHob(); /*0xffe1d12f*/\n return GetHobFromAddress((int)&unk_FFE21668, Hob); /*0xffe1d141*/\n}","refs":[{"addr":"0xffe1d04f","name":"PeiServicesLocateHob"},{"addr":"0xffe1d102","name":"GetHobFromAddress"},{"addr":"0xffe21668","name":"unk_FFE21668"}]} + Type = HobGetType((void *)a1); /*0xffe1d256*/ + v12 = HIDWORD(Type); /*0xffe1d25d*/ + Type_1 = Type; /*0xffe1d261*/ + Type_3 = HobGetType((void *)a2); /*0xffe1d263*/ + v11 = HIDWORD(Type_3); /*0xffe1d26b*/ + Type_2 = Type_3; /*0xffe1d26f*/ + v8 = HobGetType((void *)(a1 + 8)); /*0xffe1d27d*/ + v9 = HobGetType((void *)(a2 + 8)); /*0xffe1d27f*/ + return Type_1 == Type_2 && v12 == v11 && v8 == v9; /*0xffe1d2a2*/ +} -{"addr":"0xffe1d142","code":"int GetNextHob(int a1, int a2)\n{\n int Next; // eax\n int v4; // eax\n int v6; // [esp+4h] [ebp-4h] BYREF\n\n Next = HobGetNext(); /*0xffe1d149*/\n if ( (*(int ( **)(int, int, int, int *))(*(_DWORD *)Next + 52))(Next, 4, a2, &v6) < 0 ) /*0xffe1d161*/\n v6 = 0; /*0xffe1d163*/\n if ( !v6 ) /*0xffe1d16b*/\n {\n v4 = AssertReport(); /*0xffe1d16d*/\n if ( v4 ) /*0xffe1d174*/\n (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe1d185*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 250,\n \"Hob != ((void *) 0)\");\n }\n return v6; /*0xffe1d15e*/\n}","refs":[{"addr":"0xffe1cf7d","name":"HobGetNext"},{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe212e0","name":"aEHsMdepkgLibra_2","string":"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe2133c","name":"aHobVoid0","string":"Hob != ((void *) 0)"}]} +int IoWrite16(unsigned __int16 *a1) +{ + int v2; // eax -{"addr":"0xffe1d192","code":"int BuildGuidHob(int a1, unsigned int n0xFFE0)\n{\n int v3; // eax\n int result; // eax\n int v5; // esi\n\n if ( n0xFFE0 > 0xFFE0 ) /*0xffe1d19b*/\n {\n v3 = AssertReport(); /*0xffe1d19d*/\n if ( v3 ) /*0xffe1d1a4*/\n (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe1d1b5*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 421,\n \"DataLength <= (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE))\");\n }\n result = GetNextHob(a1, n0xFFE0 + 24); /*0xffe1d1be*/\n v5 = result; /*0xffe1d1c3*/\n if ( result ) /*0xffe1d1c7*/\n {\n GetHobLength(result + 8, (int)&unk_FFE21668); /*0xffe1d1d3*/\n return v5 + 24; /*0xffe1d1d8*/\n }\n return result; /*0xffe1d1c9*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe212e0","name":"aEHsMdepkgLibra_2","string":"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe21350","name":"aDatalength0xff","string":"DataLength <= (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE))"},{"addr":"0xffe1d142","name":"GetNextHob"},{"addr":"0xffe1d21b","name":"GetHobLength"},{"addr":"0xffe21668","name":"unk_FFE21668"}]} + if ( ((unsigned __int8)a1 & 1) != 0 ) /*0xffe1d2b0*/ + { + v2 = AssertReport(); /*0xffe1d2b2*/ + if ( v2 ) /*0xffe1d2b9*/ + (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe1d2ca*/ + "e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", + 151, + "(Address & 1) == 0"); + } + return *a1; /*0xffe1d2d6*/ +} -{"addr":"0xffe1d1dd","code":"void *GetEndOfHobList(void *buf, unsigned int count)\n{\n int v4; // eax\n\n if ( count - 1 > -1 - (int)buf ) /*0xffe1d1ee*/\n {\n v4 = AssertReport(); /*0xffe1d1f0*/\n if ( v4 ) /*0xffe1d1f7*/\n (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe1d205*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\SetMemWrapper.c\",\n 54,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)Buffer)\");\n }\n return ZeroMem(buf, count, 0); /*0xffe1d217*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe213b4","name":"aEHsMdepkgLibra_3","string":"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\SetMemWrapper.c"},{"addr":"0xffe21384","name":"aLength10xfffff_1","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)Buffer)"},{"addr":"0xffe19268","name":"ZeroMem"}]} +void *GetFirstGuidHob(int FitEntryIndex, unsigned __int8 **p_src, int *p_n256, char *DigestBuffer) +{ + int v6; // edi + _DWORD buf[28]; // [esp+10h] [ebp-70h] BYREF -{"addr":"0xffe1d21b","code":"int GetHobLength(int a1, int a2)\n{\n __int64 Type; // rax\n __int64 Type_1; // rax\n\n Type = HobGetType((void *)a2); /*0xffe1d223*/\n ReadUnaligned32(Type, SHIDWORD(Type)); /*0xffe1d22c*/\n Type_1 = HobGetType((void *)(a2 + 8)); /*0xffe1d234*/\n ReadUnaligned32(Type_1, SHIDWORD(Type_1)); /*0xffe1d23e*/\n return a1; /*0xffe1d248*/\n}","refs":[{"addr":"0xffe1cfaf","name":"HobGetType"},{"addr":"0xffe1cfdb","name":"ReadUnaligned32"}]} + PeiPcdLocateProtocol(buf); /*0xffe1d318*/ + if ( FitEntryIndex ) /*0xffe1d31f*/ + { + v6 = (char *)p_n256 - (char *)p_src; /*0xffe1d324*/ + do /*0xffe1d33a*/ + { + PeiPcdGetSize((int)buf, *p_src, *(unsigned int *)((char *)p_src + v6)); /*0xffe1d32e*/ + ++p_src; /*0xffe1d333*/ + --FitEntryIndex; /*0xffe1d337*/ + } + while ( FitEntryIndex ); /*0xffe1d33a*/ + } + PeiPcdGetPtr(buf, DigestBuffer, FitEntryIndex); /*0xffe1d342*/ + return GetEndOfHobList(buf, 0x70u); /*0xffe1d352*/ +} -{"addr":"0xffe1d24b","code":"bool HobIsSuitable(int a1, int a2)\n{\n __int64 Type; // rax\n int Type_1; // ebp\n __int64 Type_3; // rax\n int Type_2; // edi\n __int64 v8; // kr00_8\n __int64 v9; // rax\n int v11; // [esp+10h] [ebp-Ch]\n int v12; // [esp+14h] [ebp-8h]\n\n Type = HobGetType((void *)a1); /*0xffe1d256*/\n v12 = HIDWORD(Type); /*0xffe1d25d*/\n Type_1 = Type; /*0xffe1d261*/\n Type_3 = HobGetType((void *)a2); /*0xffe1d263*/\n v11 = HIDWORD(Type_3); /*0xffe1d26b*/\n Type_2 = Type_3; /*0xffe1d26f*/\n v8 = HobGetType((void *)(a1 + 8)); /*0xffe1d27d*/\n v9 = HobGetType((void *)(a2 + 8)); /*0xffe1d27f*/\n return Type_1 == Type_2 && v12 == v11 && v8 == v9; /*0xffe1d2a2*/\n}","refs":[{"addr":"0xffe1cfaf","name":"HobGetType"}]} +int PeiPcdGetSize(int buf, unsigned __int8 *src, unsigned int n0x40) +{ + unsigned int n0x40_1; // ebx -{"addr":"0xffe1d2aa","code":"int IoWrite16(unsigned __int16 *a1)\n{\n int v2; // eax\n\n if ( ((unsigned __int8)a1 & 1) != 0 ) /*0xffe1d2b0*/\n {\n v2 = AssertReport(); /*0xffe1d2b2*/\n if ( v2 ) /*0xffe1d2b9*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe1d2ca*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseIoLibIntrinsic\\\\IoLib.c\",\n 151,\n \"(Address & 1) == 0\");\n }\n return *a1; /*0xffe1d2d6*/\n}","refs":[{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe213f0","name":"aEHsMdepkgLibra_5","string":"e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c"},{"addr":"0xffe21420","name":"aAddress10","string":"(Address & 1) == 0"}]} + if ( *(_DWORD *)(buf + 40) > 0x40u ) /*0xffe1fbba*/ + return -1; /*0xffe1fbbc*/ + while ( 1 ) /*0xffe1fc22*/ + { + do /*0xffe1fc22*/ + { + while ( 1 ) /*0xffe1fc40*/ + { + if ( !n0x40 ) /*0xffe1fc42*/ + return 0; /*0xffe1fc44*/ + if ( *(_DWORD *)(buf + 40) || n0x40 < 0x40 ) /*0xffe1fbd5*/ + break; /*0xffe1fbd5*/ + if ( GetNextGuidHob((_DWORD *)buf, src) < 0 ) /*0xffe1fbe2*/ + return -1; /*0xffe1fbe2*/ + *(_QWORD *)buf += 512LL; /*0xffe1fbe4*/ + src += 64; /*0xffe1fbee*/ + n0x40 -= 64; /*0xffe1fbf1*/ + } + n0x40_1 = 64 - *(_DWORD *)(buf + 40); /*0xffe1fbf9*/ + if ( n0x40 < n0x40_1 ) /*0xffe1fbfe*/ + n0x40_1 = n0x40; /*0xffe1fc00*/ + if ( n0x40_1 ) /*0xffe1fc04*/ + CopyMem((char *)(buf + *(_DWORD *)(buf + 40) + 44), (char *)src, n0x40_1); /*0xffe1fc11*/ + *(_DWORD *)(buf + 40) += n0x40_1; /*0xffe1fc17*/ + src += n0x40_1; /*0xffe1fc1a*/ + n0x40 -= n0x40_1; /*0xffe1fc1c*/ + } + while ( *(_DWORD *)(buf + 40) != 64 ); /*0xffe1fc22*/ + if ( GetNextGuidHob((_DWORD *)buf, (unsigned __int8 *)(buf + 44)) < 0 ) /*0xffe1fc30*/ + break; /*0xffe1fc30*/ + *(_QWORD *)buf += 512LL; /*0xffe1fc32*/ + *(_DWORD *)(buf + 40) = 0; /*0xffe1fc3c*/ + } + return -1; /*0xffe1fc48*/ +} -{"addr":"0xffe1d308","code":"void *GetFirstGuidHob(int FitEntryIndex, unsigned __int8 **p_src, int *p_n256, char *DigestBuffer)\n{\n int v6; // edi\n _DWORD buf[28]; // [esp+10h] [ebp-70h] BYREF\n\n PeiPcdLocateProtocol(buf); /*0xffe1d318*/\n if ( FitEntryIndex ) /*0xffe1d31f*/\n {\n v6 = (char *)p_n256 - (char *)p_src; /*0xffe1d324*/\n do /*0xffe1d33a*/\n {\n PeiPcdGetSize((int)buf, *p_src, *(unsigned int *)((char *)p_src + v6)); /*0xffe1d32e*/\n ++p_src; /*0xffe1d333*/\n --FitEntryIndex; /*0xffe1d337*/\n }\n while ( FitEntryIndex ); /*0xffe1d33a*/\n }\n PeiPcdGetPtr(buf, DigestBuffer, FitEntryIndex); /*0xffe1d342*/\n return GetEndOfHobList(buf, 0x70u); /*0xffe1d352*/\n}","refs":[{"addr":"0xffe1fb6d","name":"PeiPcdLocateProtocol"},{"addr":"0xffe1fbb0","name":"PeiPcdGetSize"},{"addr":"0xffe1fc50","name":"PeiPcdGetPtr"},{"addr":"0xffe1d1dd","name":"GetEndOfHobList"}]} +// local variable allocation has failed, the output may be wrong! +int __usercall PeiPcdGetPtr@(_DWORD *buf@, _BYTE *DigestBuffer@, int FitEntryIndex@) +{ + unsigned int n0x40; // ecx + bool v7; // cf + unsigned int n0x40_1; // eax + __int64 v9; // rax + __int64 v10; // rax + _BYTE v11[12]; // [esp-4h] [ebp-Ch] OVERLAPPED -Output truncated. Run: curl -o .ida-mcp/62d296de-21e8-425c-90e7-8ef9503344f0.json http://127.0.0.1:13379/output/62d296de-21e8-425c-90e7-8ef9503344f0.json + n0x40 = buf[10]; /*0xffe1fc56*/ + if ( n0x40 >= 0x40 ) /*0xffe1fc5c*/ + return -1; /*0xffe1fc5e*/ + *(_DWORD *)v11 = FitEntryIndex; /*0xffe1fc66*/ + v7 = __CFADD__(8 *n0x40, *buf); /*0xffe1fc6c*/ + *buf += 8 *n0x40; /*0xffe1fc6c*/ + buf[1] += v7; /*0xffe1fc71*/ + *((_BYTE *)buf + n0x40 + 44) = 0x80; /*0xffe1fc74*/ + n0x40_1 = ++buf[10]; /*0xffe1fc7c*/ + if ( n0x40_1 > 0x38 ) /*0xffe1fc82*/ + { + while ( n0x40_1 < 0x40 ) /*0xffe1fc93*/ + { + *((_BYTE *)buf + n0x40_1 + 44) = 0; /*0xffe1fc86*/ + n0x40_1 = ++buf[10]; /*0xffe1fc8d*/ + } + GetNextGuidHob(buf, (unsigned __int8 *)buf + 44); /*0xffe1fc9a*/ + buf[10] = 0; /*0xffe1fc9f*/ + } + while ( buf[10] < 0x38u ) /*0xffe1fcb2*/ + *((_BYTE *)buf + buf[10]++ + 44) = 0; /*0xffe1fca7*/ + *((_BYTE *)buf + 100) = *((_BYTE *)buf + 7); /*0xffe1fcb9*/ + *((_BYTE *)buf + 101) = *((_BYTE *)buf + 6); /*0xffe1fcbf*/ + v9 = *(_QWORD *)v11 % *(_QWORD *)&v11[8]; /*0xffe1fcc7*/ + *((_BYTE *)buf + 102) = v9; /*0xffe1fccc*/ + v10 = *(_QWORD *)v11 % *(_QWORD *)&v11[8]; /*0xffe1fcd6*/ + *((_BYTE *)buf + 103) = v10; /*0xffe1fcdb*/ + *((_BYTE *)buf + 104) = HIBYTE(*buf); /*0xffe1fced*/ + *((_BYTE *)buf + 105) = BYTE2(*buf); /*0xffe1fcfc*/ + *((_BYTE *)buf + 106) = BYTE1(*(_QWORD *)buf); /*0xffe1fd0b*/ + *((_BYTE *)buf + 107) = *(_BYTE *)buf; /*0xffe1fd12*/ + GetNextGuidHob(buf, (unsigned __int8 *)buf + 44); /*0xffe1fd15*/ + *DigestBuffer = *((_BYTE *)buf + 11); /*0xffe1fd1d*/ + DigestBuffer[1] = *((_BYTE *)buf + 10); /*0xffe1fd22*/ + DigestBuffer[2] = *((_BYTE *)buf + 9); /*0xffe1fd28*/ + DigestBuffer[3] = *((_BYTE *)buf + 8); /*0xffe1fd2e*/ + DigestBuffer[4] = *((_BYTE *)buf + 15); /*0xffe1fd34*/ + DigestBuffer[5] = *((_BYTE *)buf + 14); /*0xffe1fd3a*/ + DigestBuffer[6] = *((_BYTE *)buf + 13); /*0xffe1fd40*/ + DigestBuffer[7] = *((_BYTE *)buf + 12); /*0xffe1fd46*/ + DigestBuffer[8] = *((_BYTE *)buf + 19); /*0xffe1fd4c*/ + DigestBuffer[9] = *((_BYTE *)buf + 18); /*0xffe1fd52*/ + DigestBuffer[10] = *((_BYTE *)buf + 17); /*0xffe1fd58*/ + DigestBuffer[11] = *((_BYTE *)buf + 16); /*0xffe1fd5e*/ + DigestBuffer[12] = *((_BYTE *)buf + 23); /*0xffe1fd64*/ + DigestBuffer[13] = *((_BYTE *)buf + 22); /*0xffe1fd6a*/ + DigestBuffer[14] = *((_BYTE *)buf + 21); /*0xffe1fd70*/ + DigestBuffer[15] = *((_BYTE *)buf + 20); /*0xffe1fd76*/ + DigestBuffer[16] = *((_BYTE *)buf + 27); /*0xffe1fd7c*/ + DigestBuffer[17] = *((_BYTE *)buf + 26); /*0xffe1fd82*/ + DigestBuffer[18] = *((_BYTE *)buf + 25); /*0xffe1fd88*/ + DigestBuffer[19] = *((_BYTE *)buf + 24); /*0xffe1fd8e*/ + DigestBuffer[20] = *((_BYTE *)buf + 31); /*0xffe1fd94*/ + DigestBuffer[21] = *((_BYTE *)buf + 30); /*0xffe1fd9a*/ + DigestBuffer[22] = *((_BYTE *)buf + 29); /*0xffe1fda0*/ + DigestBuffer[23] = *((_BYTE *)buf + 28); /*0xffe1fda6*/ + DigestBuffer[24] = *((_BYTE *)buf + 35); /*0xffe1fdac*/ + DigestBuffer[25] = *((_BYTE *)buf + 34); /*0xffe1fdb2*/ + DigestBuffer[26] = *((_BYTE *)buf + 33); /*0xffe1fdb8*/ + DigestBuffer[27] = *((_BYTE *)buf + 32); /*0xffe1fdbe*/ + DigestBuffer[28] = *((_BYTE *)buf + 39); /*0xffe1fdc4*/ + DigestBuffer[29] = *((_BYTE *)buf + 38); /*0xffe1fdca*/ + DigestBuffer[30] = *((_BYTE *)buf + 37); /*0xffe1fdd0*/ + DigestBuffer[31] = *((_BYTE *)buf + 36); /*0xffe1fdd6*/ + return 0; /*0xffe1fddc*/ +} -{"addr":"0xffe1fb6d","code":"int __thiscall PeiPcdLocateProtocol(_DWORD *this)\n{\n *(this + 10) = 0; /*0xffe1fb6f*/\n *this = 0; /*0xffe1fb72*/\n *(this + 1) = 0; /*0xffe1fb74*/\n *(this + 2) = 1779033703; /*0xffe1fb77*/\n *(this + 3) = -1150833019; /*0xffe1fb7e*/\n *(this + 4) = 1013904242; /*0xffe1fb85*/\n *(this + 5) = -1521486534; /*0xffe1fb8c*/\n *(this + 6) = 1359893119; /*0xffe1fb93*/\n *(this + 7) = -1694144372; /*0xffe1fb9a*/\n *(this + 8) = 528734635; /*0xffe1fba1*/\n *(this + 9) = 1541459225; /*0xffe1fba8*/\n return 0; /*0xffe1fbaf*/\n}"} +int PeiPcdSetSku(int n2, int n50563599, int n2a, int a4, int a5) +{ + int Next; // eax + int v9; // eax -{"addr":"0xffe1fbb0","code":"int PeiPcdGetSize(int buf, unsigned __int8 *src, unsigned int n0x40)\n{\n unsigned int n0x40_1; // ebx\n\n if ( *(_DWORD *)(buf + 40) > 0x40u ) /*0xffe1fbba*/\n return -1; /*0xffe1fbbc*/\n while ( 1 ) /*0xffe1fc22*/\n {\n do /*0xffe1fc22*/\n {\n while ( 1 ) /*0xffe1fc40*/\n {\n if ( !n0x40 ) /*0xffe1fc42*/\n return 0; /*0xffe1fc44*/\n if ( *(_DWORD *)(buf + 40) || n0x40 < 0x40 ) /*0xffe1fbd5*/\n break; /*0xffe1fbd5*/\n if ( GetNextGuidHob((_DWORD *)buf, src) < 0 ) /*0xffe1fbe2*/\n return -1; /*0xffe1fbe2*/\n *(_QWORD *)buf += 512LL; /*0xffe1fbe4*/\n src += 64; /*0xffe1fbee*/\n n0x40 -= 64; /*0xffe1fbf1*/\n }\n n0x40_1 = 64 - *(_DWORD *)(buf + 40); /*0xffe1fbf9*/\n if ( n0x40 < n0x40_1 ) /*0xffe1fbfe*/\n n0x40_1 = n0x40; /*0xffe1fc00*/\n if ( n0x40_1 ) /*0xffe1fc04*/\n CopyMem((char *)(buf + *(_DWORD *)(buf + 40) + 44), (char *)src, n0x40_1); /*0xffe1fc11*/\n *(_DWORD *)(buf + 40) += n0x40_1; /*0xffe1fc17*/\n src += n0x40_1; /*0xffe1fc1a*/\n n0x40 -= n0x40_1; /*0xffe1fc1c*/\n }\n while ( *(_DWORD *)(buf + 40) != 64 ); /*0xffe1fc22*/\n if ( GetNextGuidHob((_DWORD *)buf, (unsigned __int8 *)(buf + 44)) < 0 ) /*0xffe1fc30*/\n break; /*0xffe1fc30*/\n *(_QWORD *)buf += 512LL; /*0xffe1fc32*/\n *(_DWORD *)(buf + 40) = 0; /*0xffe1fc3c*/\n }\n return -1; /*0xffe1fc48*/\n}","refs":[{"addr":"0xffe1d359","name":"GetNextGuidHob"},{"addr":"0xffe19baa","name":"CopyMem"}]} + if ( (unsigned __int8)n2 != 2 && (unsigned __int8)n2 != 3 ) /*0xffe1fdf0*/ + return -2147483645; /*0xffe1fdf2*/ + Next = HobGetNext(); /*0xffe1fdf9*/ + v9 = (*(int ( **)(int, int, int, _DWORD, int, int))(*(_DWORD *)Next + 88))(Next, n2, n50563599, 0, a4, a5); /*0xffe1fe0d*/ + return v9 != -1610612734 ? v9 : 0; +} -{"addr":"0xffe1fc50","code":"// local variable allocation has failed, the output may be wrong!\nint __usercall PeiPcdGetPtr@(_DWORD *buf@, _BYTE *DigestBuffer@, int FitEntryIndex@)\n{\n unsigned int n0x40; // ecx\n bool v7; // cf\n unsigned int n0x40_1; // eax\n __int64 v9; // rax\n __int64 v10; // rax\n _BYTE v11[12]; // [esp-4h] [ebp-Ch] OVERLAPPED\n\n n0x40 = buf[10]; /*0xffe1fc56*/\n if ( n0x40 >= 0x40 ) /*0xffe1fc5c*/\n return -1; /*0xffe1fc5e*/\n *(_DWORD *)v11 = FitEntryIndex; /*0xffe1fc66*/\n v7 = __CFADD__(8 *n0x40, *buf); /*0xffe1fc6c*/\n *buf += 8 *n0x40; /*0xffe1fc6c*/\n buf[1] += v7; /*0xffe1fc71*/\n *((_BYTE *)buf + n0x40 + 44) = 0x80; /*0xffe1fc74*/\n n0x40_1 = ++buf[10]; /*0xffe1fc7c*/\n if ( n0x40_1 > 0x38 ) /*0xffe1fc82*/\n {\n while ( n0x40_1 < 0x40 ) /*0xffe1fc93*/\n {\n *((_BYTE *)buf + n0x40_1 + 44) = 0; /*0xffe1fc86*/\n n0x40_1 = ++buf[10]; /*0xffe1fc8d*/\n }\n GetNextGuidHob(buf, (unsigned __int8 *)buf + 44); /*0xffe1fc9a*/\n buf[10] = 0; /*0xffe1fc9f*/\n }\n while ( buf[10] < 0x38u ) /*0xffe1fcb2*/\n *((_BYTE *)buf + buf[10]++ + 44) = 0; /*0xffe1fca7*/\n *((_BYTE *)buf + 100) = *((_BYTE *)buf + 7); /*0xffe1fcb9*/\n *((_BYTE *)buf + 101) = *((_BYTE *)buf + 6); /*0xffe1fcbf*/\n v9 = *(_QWORD *)v11 % *(_QWORD *)&v11[8]; /*0xffe1fcc7*/\n *((_BYTE *)buf + 102) = v9; /*0xffe1fccc*/\n v10 = *(_QWORD *)v11 % *(_QWORD *)&v11[8]; /*0xffe1fcd6*/\n *((_BYTE *)buf + 103) = v10; /*0xffe1fcdb*/\n *((_BYTE *)buf + 104) = HIBYTE(*buf); /*0xffe1fced*/\n *((_BYTE *)buf + 105) = BYTE2(*buf); /*0xffe1fcfc*/\n *((_BYTE *)buf + 106) = BYTE1(*(_QWORD *)buf); /*0xffe1fd0b*/\n *((_BYTE *)buf + 107) = *(_BYTE *)buf; /*0xffe1fd12*/\n GetNextGuidHob(buf, (unsigned __int8 *)buf + 44); /*0xffe1fd15*/\n *DigestBuffer = *((_BYTE *)buf + 11); /*0xffe1fd1d*/\n DigestBuffer[1] = *((_BYTE *)buf + 10); /*0xffe1fd22*/\n DigestBuffer[2] = *((_BYTE *)buf + 9); /*0xffe1fd28*/\n DigestBuffer[3] = *((_BYTE *)buf + 8); /*0xffe1fd2e*/\n DigestBuffer[4] = *((_BYTE *)buf + 15); /*0xffe1fd34*/\n DigestBuffer[5] = *((_BYTE *)buf + 14); /*0xffe1fd3a*/\n DigestBuffer[6] = *((_BYTE *)buf + 13); /*0xffe1fd40*/\n DigestBuffer[7] = *((_BYTE *)buf + 12); /*0xffe1fd46*/\n DigestBuffer[8] = *((_BYTE *)buf + 19); /*0xffe1fd4c*/\n DigestBuffer[9] = *((_BYTE *)buf + 18); /*0xffe1fd52*/\n DigestBuffer[10] = *((_BYTE *)buf + 17); /*0xffe1fd58*/\n DigestBuffer[11] = *((_BYTE *)buf + 16); /*0xffe1fd5e*/\n DigestBuffer[12] = *((_BYTE *)buf + 23); /*0xffe1fd64*/\n DigestBuffer[13] = *((_BYTE *)buf + 22); /*0xffe1fd6a*/\n DigestBuffer[14] = *((_BYTE *)buf + 21); /*0xffe1fd70*/\n DigestBuffer[15] = *((_BYTE *)buf + 20); /*0xffe1fd76*/\n DigestBuffer[16] = *((_BYTE *)buf + 27); /*0xffe1fd7c*/\n DigestBuffer[17] = *((_BYTE *)buf + 26); /*0xffe1fd82*/\n DigestBuffer[18] = *((_BYTE *)buf + 25); /*0xffe1fd88*/\n DigestBuffer[19] = *((_BYTE *)buf + 24); /*0xffe1fd8e*/\n DigestBuffer[20] = *((_BYTE *)buf + 31); /*0xffe1fd94*/\n DigestBuffer[21] = *((_BYTE *)buf + 30); /*0xffe1fd9a*/\n DigestBuffer[22] = *((_BYTE *)buf + 29); /*0xffe1fda0*/\n DigestBuffer[23] = *((_BYTE *)buf + 28); /*0xffe1fda6*/\n DigestBuffer[24] = *((_BYTE *)buf + 35); /*0xffe1fdac*/\n DigestBuffer[25] = *((_BYTE *)buf + 34); /*0xffe1fdb2*/\n DigestBuffer[26] = *((_BYTE *)buf + 33); /*0xffe1fdb8*/\n DigestBuffer[27] = *((_BYTE *)buf + 32); /*0xffe1fdbe*/\n DigestBuffer[28] = *((_BYTE *)buf + 39); /*0xffe1fdc4*/\n DigestBuffer[29] = *((_BYTE *)buf + 38); /*0xffe1fdca*/\n DigestBuffer[30] = *((_BYTE *)buf + 37); /*0xffe1fdd0*/\n DigestBuffer[31] = *((_BYTE *)buf + 36); /*0xffe1fdd6*/\n return 0; /*0xffe1fddc*/\n}","refs":[{"addr":"0xffe1d359","name":"GetNextGuidHob"}]} +int __thiscall PeiGetPcdPtr(void *this) +{ + int ( **PcdProtocol)(int); // eax -{"addr":"0xffe1fddf","code":"int PeiPcdSetSku(int n2, int n50563599, int n2a, int a4, int a5)\n{\n int Next; // eax\n int v9; // eax\n\n if ( (unsigned __int8)n2 != 2 && (unsigned __int8)n2 != 3 ) /*0xffe1fdf0*/\n return -2147483645; /*0xffe1fdf2*/\n Next = HobGetNext(); /*0xffe1fdf9*/\n v9 = (*(int ( **)(int, int, int, _DWORD, int, int))(*(_DWORD *)Next + 88))(Next, n2, n50563599, 0, a4, a5); /*0xffe1fe0d*/\n return v9 != -1610612734 ? v9 : 0;\n}","refs":[{"addr":"0xffe1cf7d","name":"HobGetNext"}]} + PcdProtocol = (int ( **)(int))PeiPcdLibLocatePcdProtocol(this); /*0xffe1fe24*/ + return PcdProtocol[4](5); /*0xffe1fe2f*/ +} -{"addr":"0xffe1fe24","code":"int __thiscall PeiGetPcdPtr(void *this)\n{\n int ( **PcdProtocol)(int); // eax\n\n PcdProtocol = (int ( **)(int))PeiPcdLibLocatePcdProtocol(this); /*0xffe1fe24*/\n return PcdProtocol[4](5); /*0xffe1fe2f*/\n}","refs":[{"addr":"0xffe1fe41","name":"PeiPcdLibLocatePcdProtocol"}]} +int __thiscall PeiWriteIoPort(void *this) +{ + int v1; // ebx + int v2; // eax -{"addr":"0xffe1fe30","code":"int __thiscall PeiWriteIoPort(void *this)\n{\n int v1; // ebx\n int v2; // eax\n\n v1 = PeiGetPcdPtr(this) + 1024064; /*0xffe1d2d9*/\n if ( (v1 & 1) != 0 ) /*0xffe1d2de*/\n {\n v2 = AssertReport(); /*0xffe1d2e0*/\n if ( v2 ) /*0xffe1d2e7*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe1d2f8*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseIoLibIntrinsic\\\\IoLib.c\",\n 183,\n \"(Address & 1) == 0\");\n }\n *(_WORD *)v1 = 1280; /*0xffe1d303*/\n return 1280; /*0xffe1d307*/\n}","refs":[{"addr":"0xffe1fe24","name":"PeiGetPcdPtr"},{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe213f0","name":"aEHsMdepkgLibra_5","string":"e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c"},{"addr":"0xffe21420","name":"aAddress10","string":"(Address & 1) == 0"}]} + v1 = PeiGetPcdPtr(this) + 1024064; /*0xffe1d2d9*/ + if ( (v1 & 1) != 0 ) /*0xffe1d2de*/ + { + v2 = AssertReport(); /*0xffe1d2e0*/ + if ( v2 ) /*0xffe1d2e7*/ + (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe1d2f8*/ + "e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", + 183, + "(Address & 1) == 0"); + } + *(_WORD *)v1 = 1280; /*0xffe1d303*/ + return 1280; /*0xffe1d307*/ +} -{"addr":"0xffe1fe41","code":"void *__thiscall PeiPcdLibLocatePcdProtocol(void *this)\n{\n int Next; // eax\n int v2; // eax\n int v3; // eax\n void *this_1; // [esp+0h] [ebp-4h]\n\n this_1 = this; /*0xffe1fe44*/\n Next = HobGetNext(); /*0xffe1fe45*/\n v2 = (*(int (__stdcall **)(int))(*(_DWORD *)Next + 32))(Next); /*0xffe1fe5a*/\n if ( v2 < 0 ) /*0xffe1fe62*/\n {\n DebugPrintWrapper(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v2); /*0xffe1fe6f*/\n v3 = AssertReport(); /*0xffe1fe77*/\n if ( v3 ) /*0xffe1fe7e*/\n (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe1fe8c*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiPcdLib\\\\PeiPcdLib.c\",\n 49,\n \"!EFI_ERROR (Status)\");\n }\n return this_1; /*0xffe1fe97*/\n}","refs":[{"addr":"0xffe1cf7d","name":"HobGetNext"},{"addr":"0xffe19c4a","name":"DebugPrintWrapper"},{"addr":"0xffe20048","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe19c19","name":"AssertReport"},{"addr":"0xffe21434","name":"aEHsMdepkgLibra_6","string":"e:\\hs\\MdePkg\\Library\\PeiPcdLib\\PeiPcdLib.c"},{"addr":"0xffe2006c","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"}]} +void *__thiscall PeiPcdLibLocatePcdProtocol(void *this) +{ + int Next; // eax + int v2; // eax + int v3; // eax + void *this_1; // [esp+0h] [ebp-4h] -{"addr":"0xffe2000c","code":"unsigned __int64 __usercall _umoddi3@(unsigned __int8 n0x40@, unsigned __int64 a2@)\n{\n if ( n0x40 >= 0x40u ) /*0xffe2000f*/\n return 0; /*0xffe20026*/\n else\n return a2 >> n0x40; /*0xffe20019*/\n}"} + this_1 = this; /*0xffe1fe44*/ + Next = HobGetNext(); /*0xffe1fe45*/ + v2 = (*(int (__stdcall **)(int))(*(_DWORD *)Next + 32))(Next); /*0xffe1fe5a*/ + if ( v2 < 0 ) /*0xffe1fe62*/ + { + DebugPrintWrapper(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0xffe1fe6f*/ + v3 = AssertReport(); /*0xffe1fe77*/ + if ( v3 ) /*0xffe1fe7e*/ + (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe1fe8c*/ + "e:\\hs\\MdePkg\\Library\\PeiPcdLib\\PeiPcdLib.c", + 49, + "!EFI_ERROR (Status)"); + } + return this_1; /*0xffe1fe97*/ +} diff --git a/AmiModulePkg/TCG2/Common/AmiTcgPlatformPei/AmiTcgPlatformPeiBeforeMem/AmiTcgPlatformPeiBeforeMem.c b/AmiModulePkg/TCG2/Common/AmiTcgPlatformPei/AmiTcgPlatformPeiBeforeMem/AmiTcgPlatformPeiBeforeMem.c index 81db28b..0383994 100644 --- a/AmiModulePkg/TCG2/Common/AmiTcgPlatformPei/AmiTcgPlatformPeiBeforeMem/AmiTcgPlatformPeiBeforeMem.c +++ b/AmiModulePkg/TCG2/Common/AmiTcgPlatformPei/AmiTcgPlatformPeiBeforeMem/AmiTcgPlatformPeiBeforeMem.c @@ -1,39 +1,274 @@ -// -// AmiTcgPlatformPeiBeforeMem.efi - Full Decompilation -// Source: IDA Pro MCP port 13378 -// Functions: 15 -// - #include #include -{"addr":"0xffe18704","code":"void *SetMem(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe18711*/\n return buf; /*0xffe18717*/\n}"} +void *SetMem(void *buf, unsigned int count, char value) +{ + memset(buf, value, count); + return buf; +} -{"addr":"0xffe18724","code":"int SetMem32(int Buffer, int Count, int ValueLow, int ValueHigh)\n{\n do /*0xffe1873d*/\n {\n *(_DWORD *)(Buffer + 8 *Count - 8) = ValueLow; /*0xffe18735*/\n *(_DWORD *)(Buffer + 8 *Count-- - 4) = ValueHigh; /*0xffe18739*/\n }\n while ( Count ); /*0xffe1873d*/\n return Buffer; /*0xffe18741*/\n}"} +int SetMem32(int Buffer, int Count, int ValueLow, int ValueHigh) +{ + do { + *(_DWORD *)(Buffer + 8 * Count - 8) = ValueLow; + *(_DWORD *)(Buffer + 8 * Count-- - 4) = ValueHigh; + } while (Count); -{"addr":"0xffe18744","code":"void *SetMem64(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe18751*/\n return buf; /*0xffe18757*/\n}"} + return Buffer; +} -{"addr":"0xffe18764","code":"char *CopyMem(char *dst, char *src, unsigned int count)\n{\n unsigned int count_1; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count_1 = count; /*0xffe1876e*/\n if ( src < dst && &src[count - 1] >= dst ) /*0xffe1877c*/\n {\n src_1 = &src[count - 1]; /*0xffe18790*/\n dst_1 = &dst[count - 1]; /*0xffe18792*/\n }\n else\n {\n count_1 = count & 3; /*0xffe18780*/\n qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe18789*/\n src_1 = &src[4 * (count >> 2)]; /*0xffe18789*/\n dst_1 = &dst[4 * (count >> 2)]; /*0xffe18789*/\n }\n qmemcpy(dst_1, src_1, count_1); /*0xffe18799*/\n return dst; /*0xffe187a0*/\n}"} +void *SetMem64(void *buf, unsigned int count, int value) +{ + memset32(buf, value, count); + return buf; +} -{"addr":"0xffe187c4","code":"EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n void *PeiServices; // ecx\n void *PeiServices2; // ecx\n void *v4; // ecx\n int PcdPointer; // eax\n\n if ( *(char *)(GetPcdPointer(PeiServices) + 1024068) >= 0 ) /*0xffe187d4*/\n {\n WriteCmosTpmStatus(PeiServices2); /*0xffe187d6*/\n PcdPointer = GetPcdPointer(v4); /*0xffe187db*/\n *(_BYTE *)(PcdPointer + 1024068) |= 0x80u; /*0xffe187e6*/\n }\n return (*(int ( **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 24))( /*0xffe187fa*/\n SystemTable,\n &unk_FFE18E14);\n}","refs":[{"addr":"0xffe18a07","name":"WriteCmosTpmStatus"},{"addr":"0xffe189fb","name":"GetPcdPointer"},{"addr":"0xffe18e14","name":"unk_FFE18E14"}]} +char *CopyMem(char *dst, char *src, unsigned int count) +{ + unsigned int count_1; + char *dst_1; + char *src_1; -{"addr":"0xffe187fc","code":"int PlatformTcgPolicyInstallOrLocate(int PeiServices)\n{\n int PeiServices_1; // esi\n int Status; // eax\n int Status_1; // esi\n int ReportPpi; // eax\n int TpmSpecDetected; // [esp+8h] [ebp-4h] BYREF\n\n PeiServices_1 = PeiServices; /*0xffe18801*/\n (*(void ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)PeiServices + 32))( /*0xffe18815*/\n PeiServices,\n &unk_FFE18DF4,\n 0,\n 0,\n &PeiServices);\n if ( (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)PeiServices_1 + 32))( /*0xffe1882e*/\n PeiServices_1,\n &unk_FFE18DD4,\n 0,\n 0,\n &PeiServices) >= 0 )\n return (*(int ( **)(int))PeiServices)(PeiServices_1); /*0xffe18834*/\n Status = (*(int ( **)(int, int *))(*(_DWORD *)PeiServices_1 + 40))(PeiServices_1, &TpmSpecDetected); /*0xffe18840*/\n Status_1 = Status; /*0xffe18843*/\n if ( Status < 0 ) /*0xffe18849*/\n {\n DebugAssert(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", Status); /*0xffe18856*/\n ReportPpi = LocateReportStatusCodePpi(); /*0xffe1885e*/\n if ( ReportPpi ) /*0xffe18865*/\n (*(void ( **)(const char *, int, const char *))(ReportPpi + 4))( /*0xffe18873*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\TCG2\\\\Common\\\\AmiTcgPlatformPei\\\\AmiTcgPlatformPeiBeforeMem.c\",\n 119,\n \"!EFI_ERROR (Status)\");\n }\n if ( TpmSpecDetected == 17 || TpmSpecDetected == 32 ) /*0xffe18883*/\n return Status_1; /*0xffe18889*/\n else\n return 0; /*0xffe18885*/\n}","refs":[{"addr":"0xffe18df4","name":"unk_FFE18DF4"},{"addr":"0xffe18dd4","name":"unk_FFE18DD4"},{"addr":"0xffe188c2","name":"DebugAssert"},{"addr":"0xffe18891","name":"LocateReportStatusCodePpi"}]} + count_1 = count; + if (src < dst && &src[count - 1] >= dst) { + src_1 = &src[count - 1]; + dst_1 = &dst[count - 1]; + } else { + count_1 = count & 3; + qmemcpy(dst, src, 4 * (count >> 2)); + src_1 = &src[4 * (count >> 2)]; + dst_1 = &dst[4 * (count >> 2)]; + } + qmemcpy(dst_1, src_1, count_1); + return dst; +} -{"addr":"0xffe18891","code":"int LocateReportStatusCodePpi()\n{\n int PeiServices; // eax\n _BYTE Status[4]; // [esp+0h] [ebp-8h] BYREF\n int ReportPpi; // [esp+4h] [ebp-4h] BYREF\n\n PeiServices = GetPeiServicesTablePointer(); /*0xffe18896*/\n if ( (*(int ( **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)PeiServices + 32))( /*0xffe188b5*/\n PeiServices,\n &unk_FFE18DC4,\n 0,\n Status,\n &ReportPpi) >= 0 )\n return ReportPpi; /*0xffe188bb*/\n else\n return 0; /*0xffe188b7*/\n}","refs":[{"addr":"0xffe189a6","name":"GetPeiServicesTablePointer"},{"addr":"0xffe18dc4","name":"unk_FFE18DC4"}]} +EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) +{ + void *PeiServices; + void *PeiServices2; + void *v4; + int PcdPointer; -{"addr":"0xffe188c2","code":"int DebugAssert(int Expression, const char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...)\n{\n int Status; // eax\n int ( **Status_1)(int, const char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n);\n Status = LocateReportStatusCodePpi(); /*0xffe188c3*/\n Status_1 = (int ( **)(int, const char *, char *))Status; /*0xffe188c8*/\n if ( Status ) /*0xffe188cc*/\n {\n Status = CheckTpmPresenceViaCmos(); /*0xffe188ce*/\n if ( (Status & Expression) != 0 ) /*0xffe188d9*/\n return (*Status_1)(Expression, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); /*0xffe188e5*/\n }\n return Status; /*0xffe188ea*/\n}","refs":[{"addr":"0xffe18891","name":"LocateReportStatusCodePpi"},{"addr":"0xffe1890a","name":"CheckTpmPresenceViaCmos"}]} + if (*(char *)(GetPcdPointer(PeiServices) + 1024068) >= 0) { + WriteCmosTpmStatus(PeiServices2); + PcdPointer = GetPcdPointer(v4); + *(_BYTE *)(PcdPointer + 1024068) |= 0x80u; + } -{"addr":"0xffe188ec","code":"int ReportStatusCodeWithProtocol(\n int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n int n48,\n int PeiServices____((void__)_0))\n{\n int ReportPpi; // eax\n\n ReportPpi = LocateReportStatusCodePpi(); /*0xffe188f2*/\n if ( ReportPpi ) /*0xffe188f9*/\n return (*(int ( **)(int, int, int))(ReportPpi + 4))( /*0xffe18901*/\n e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n n48,\n PeiServices____((void__)_0));\n return ReportPpi; /*0xffe18907*/\n}","refs":[{"addr":"0xffe18891","name":"LocateReportStatusCodePpi"}]} + return (*(int (**)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 24))( + SystemTable, + &unk_FFE18E14); +} -{"addr":"0xffe1890a","code":"int CheckTpmPresenceViaCmos()\n{\n unsigned __int8 CmosReg; // al\n char TpmStatus; // al\n char TpmStatus_1; // cl\n\n CmosReg = __inbyte(0x70u); /*0xffe18910*/\n __outbyte(0x70u, CmosReg & 0x80 | 0x4A); /*0xffe18915*/\n TpmStatus = __inbyte(0x71u); /*0xffe1891c*/\n TpmStatus_1 = TpmStatus; /*0xffe1891d*/\n if ( (unsigned __int8)TpmStatus <= 3u ) /*0xffe18922*/\n {\nLABEL_4:\n if ( !TpmStatus_1 ) /*0xffe1893d*/\n return 0; /*0xffe1893d*/\n goto LABEL_5; /*0xffe1893d*/\n }\n TpmStatus_1 = n3; /*0xffe18924*/\n if ( !n3 ) /*0xffe1892c*/\n {\n TpmStatus_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe18938*/\n goto LABEL_4; /*0xffe18938*/\n }\nLABEL_5:\n if ( TpmStatus_1 != -1 )\n return TpmStatus_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe18955*/\n}","refs":[{"addr":"0xffe18e24","name":"TpmDetectResult"}]} +int PlatformTcgPolicyInstallOrLocate(int PeiServices) +{ + int PeiServices_1; + int Status; + int Status_1; + int ReportPpi; + int TpmSpecDetected; -{"addr":"0xffe189a6","code":"int GetPeiServicesTablePointer()\n{\n int PeiServices; // esi\n _BYTE Idtr[2]; // [esp+4h] [ebp-8h] BYREF\n int IdtrBase; // [esp+6h] [ebp-6h]\n\n ReadIdtr(Idtr); /*0xffe189af*/\n PeiServices = *(_DWORD *)(IdtrBase - 4); /*0xffe189b7*/\n if ( !PeiServices ) /*0xffe189bc*/\n ReportStatusCodeWithProtocol( /*0xffe189cb*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n (int)\"PeiServices != ((void *) 0)\");\n return PeiServices; /*0xffe189d3*/\n}","refs":[{"addr":"0xffe189d8","name":"ReadIdtr"},{"addr":"0xffe188ec","name":"ReportStatusCodeWithProtocol"}]} + PeiServices_1 = PeiServices; + (*(void (**)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)PeiServices + 32))( + PeiServices, + &unk_FFE18DF4, + 0, + 0, + &PeiServices); -{"addr":"0xffe189d8","code":"void *__thiscall ReadIdtr(void *this)\n{\n void *this_1; // eax\n\n if ( !this ) /*0xffe189de*/\n ReportStatusCodeWithProtocol( /*0xffe189ed*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\",\n 37,\n (int)\"Idtr != ((void *) 0)\");\n this_1 = this; /*0xffe189f3*/\n __sidt(this); /*0xffe189f6*/\n return this_1; /*0xffe189fa*/\n}","refs":[{"addr":"0xffe188ec","name":"ReportStatusCodeWithProtocol"}]} + if ((*(int (**)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)PeiServices_1 + 32))( + PeiServices_1, + &unk_FFE18DD4, + 0, + 0, + &PeiServices) >= 0) { + return (*(int (**)(int))PeiServices)(PeiServices_1); + } -{"addr":"0xffe189fb","code":"int __thiscall GetPcdPointer(void *this)\n{\n int ( **Bool)(int); // eax\n\n Bool = (int ( **)(int))PeiPcdGetBool(this); /*0xffe189fb*/\n return Bool[4](5); /*0xffe18a06*/\n}","refs":[{"addr":"0xffe18a18","name":"PeiPcdGetBool"}]} + Status = (*(int (**)(int, int *))(*(_DWORD *)PeiServices_1 + 40))(PeiServices_1, &TpmSpecDetected); + Status_1 = Status; + if (Status < 0) { + DebugAssert(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); + ReportPpi = LocateReportStatusCodePpi(); + if (ReportPpi) { + (*(void (**)(const char *, int, const char *))(ReportPpi + 4))( + "e:\\hs\\AmiModulePkg\\TCG2\\Common\\AmiTcgPlatformPei\\AmiTcgPlatformPeiBeforeMem.c", + 119, + "!EFI_ERROR (Status)"); + } + } -{"addr":"0xffe18a07","code":"int __thiscall WriteCmosTpmStatus(void *this)\n{\n int v1; // ebx\n int ReportStatusCodePpi; // eax\n\n v1 = GetPcdPointer(this) + 1024064; /*0xffe18977*/\n if ( (v1 & 1) != 0 ) /*0xffe1897c*/\n {\n ReportStatusCodePpi = LocateReportStatusCodePpi(); /*0xffe1897e*/\n if ( ReportStatusCodePpi ) /*0xffe18985*/\n (*(void ( **)(const char *, int, const char *))(ReportStatusCodePpi + 4))( /*0xffe18996*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseIoLibIntrinsic\\\\IoLib.c\",\n 183,\n \"(Address & 1) == 0\");\n }\n *(_WORD *)v1 = 1280; /*0xffe189a1*/\n return 1280; /*0xffe189a5*/\n}","refs":[{"addr":"0xffe189fb","name":"GetPcdPointer"},{"addr":"0xffe18891","name":"LocateReportStatusCodePpi"}]} + if (TpmSpecDetected == 17 || TpmSpecDetected == 32) { + return Status_1; + } -{"addr":"0xffe18a18","code":"void *__thiscall PeiPcdGetBool(void *PcdToken)\n{\n int PeiServices; // eax\n int Status; // eax\n int ReportPpi; // eax\n void *PcdToken_1; // [esp+0h] [ebp-4h]\n\n PcdToken_1 = PcdToken; /*0xffe18a1b*/\n PeiServices = GetPeiServicesTablePointer(); /*0xffe18a1c*/\n Status = (*(int (__stdcall **)(int))(*(_DWORD *)PeiServices + 32))(PeiServices); /*0xffe18a31*/\n if ( Status < 0 ) /*0xffe18a39*/\n {\n DebugAssert(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", Status); /*0xffe18a46*/\n ReportPpi = LocateReportStatusCodePpi(); /*0xffe18a4e*/\n if ( ReportPpi ) /*0xffe18a55*/\n (*(void ( **)(const char *, int, const char *))(ReportPpi + 4))( /*0xffe18a63*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiPcdLib\\\\PeiPcdLib.c\",\n 49,\n \"!EFI_ERROR (Status)\");\n }\n return PcdToken_1; /*0xffe18a6e*/\n}","refs":[{"addr":"0xffe189a6","name":"GetPeiServicesTablePointer"},{"addr":"0xffe188c2","name":"DebugAssert"},{"addr":"0xffe18891","name":"LocateReportStatusCodePpi"}]} + return 0; +} +int LocateReportStatusCodePpi() +{ + int PeiServices; + _BYTE Status[4]; + int ReportPpi; + + PeiServices = GetPeiServicesTablePointer(); + if ((*(int (**)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)PeiServices + 32))( + PeiServices, + &unk_FFE18DC4, + 0, + Status, + &ReportPpi) >= 0) { + return ReportPpi; + } + + return 0; +} + +int DebugAssert(int Expression, const char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...) +{ + int Status; + int (**Status_1)(int, const char *, char *); + va_list va; + + va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n); + Status = LocateReportStatusCodePpi(); + Status_1 = (int (**)(int, const char *, char *))Status; + if (Status) { + Status = CheckTpmPresenceViaCmos(); + if ((Status & Expression) != 0) { + return (*Status_1)(Expression, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); + } + } + return Status; +} + +int ReportStatusCodeWithProtocol( + int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ, + int n48, + int PeiServices____((void__)_0)) +{ + int ReportPpi; + + ReportPpi = LocateReportStatusCodePpi(); + if (ReportPpi) { + return (*(int (**)(int, int, int))(ReportPpi + 4))( + e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ, + n48, + PeiServices____((void__)_0)); + } + return ReportPpi; +} + +int CheckTpmPresenceViaCmos() +{ + unsigned __int8 CmosReg; + char TpmStatus; + char TpmStatus_1; + + CmosReg = __inbyte(0x70u); + __outbyte(0x70u, CmosReg & 0x80 | 0x4A); + TpmStatus = __inbyte(0x71u); + TpmStatus_1 = TpmStatus; + if ((unsigned __int8)TpmStatus <= 3u) { +LABEL_4: + if (!TpmStatus_1) { + return 0; + } + goto LABEL_5; + } + + TpmStatus_1 = n3; + if (!n3) { + TpmStatus_1 = MEMORY[0xFDAF0490] & 2 | 1; + goto LABEL_4; + } + +LABEL_5: + if (TpmStatus_1 != -1) { + return TpmStatus_1 != 1 ? -2147483578 : -2147483644; + } + return 0; +} + +int GetPeiServicesTablePointer() +{ + int PeiServices; + _BYTE Idtr[2]; + int IdtrBase; + + ReadIdtr(Idtr); + PeiServices = *(_DWORD *)(IdtrBase - 4); + if (!PeiServices) { + ReportStatusCodeWithProtocol( + (int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c", + 48, + (int)"PeiServices != ((void *) 0)"); + } + return PeiServices; +} + +void *__thiscall ReadIdtr(void *this) +{ + void *this_1; + + if (!this) { + ReportStatusCodeWithProtocol( + (int)"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c", + 37, + (int)"Idtr != ((void *) 0)"); + } + this_1 = this; + __sidt(this); + return this_1; +} + +int __thiscall GetPcdPointer(void *this) +{ + int (**Bool)(int); + + Bool = (int (**)(int))PeiPcdGetBool(this); + return Bool[4](5); +} + +int __thiscall WriteCmosTpmStatus(void *this) +{ + int v1; + int ReportStatusCodePpi; + + v1 = GetPcdPointer(this) + 1024064; + if ((v1 & 1) != 0) { + ReportStatusCodePpi = LocateReportStatusCodePpi(); + if (ReportStatusCodePpi) { + (*(void (**)(const char *, int, const char *))(ReportStatusCodePpi + 4))( + "e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", + 183, + "(Address & 1) == 0"); + } + } + *(_WORD *)v1 = 1280; + return 1280; +} + +void *__thiscall PeiPcdGetBool(void *PcdToken) +{ + int PeiServices; + int Status; + int ReportPpi; + void *PcdToken_1; + + PcdToken_1 = PcdToken; + PeiServices = GetPeiServicesTablePointer(); + Status = (*(int (__stdcall **)(int))(*(_DWORD *)PeiServices + 32))(PeiServices); + if (Status < 0) { + DebugAssert(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); + ReportPpi = LocateReportStatusCodePpi(); + if (ReportPpi) { + (*(void (**)(const char *, int, const char *))(ReportPpi + 4))( + "e:\\hs\\MdePkg\\Library\\PeiPcdLib\\PeiPcdLib.c", + 49, + "!EFI_ERROR (Status)"); + } + } + return PcdToken_1; +} diff --git a/AmiModulePkg/TCG2/Common/TcgDxe/TcgDxe/TcgDxe.h b/AmiModulePkg/TCG2/Common/TcgDxe/TcgDxe/TcgDxe.h index 808a7f5..213d0a3 100644 --- a/AmiModulePkg/TCG2/Common/TcgDxe/TcgDxe/TcgDxe.h +++ b/AmiModulePkg/TCG2/Common/TcgDxe/TcgDxe/TcgDxe.h @@ -526,7 +526,7 @@ unsigned int n107 ); -{"addr":"0x35b0","code":"void * +void * EFIAPI Sha1Transform( _DWORD *Sha1Context, diff --git a/AmiModulePkg/TCG2/Common/TcgPlatformSetupPeiPolicy/TcgPlatformSetupPeiPolicy/TcgPlatformSetupPeiPolicy.c b/AmiModulePkg/TCG2/Common/TcgPlatformSetupPeiPolicy/TcgPlatformSetupPeiPolicy/TcgPlatformSetupPeiPolicy.c index 202ee80..3725c78 100644 --- a/AmiModulePkg/TCG2/Common/TcgPlatformSetupPeiPolicy/TcgPlatformSetupPeiPolicy/TcgPlatformSetupPeiPolicy.c +++ b/AmiModulePkg/TCG2/Common/TcgPlatformSetupPeiPolicy/TcgPlatformSetupPeiPolicy/TcgPlatformSetupPeiPolicy.c @@ -1,35 +1,245 @@ -// -// TcgPlatformSetupPeiPolicy.efi - Full Decompilation -// Source: IDA Pro MCP port 13376 -// Functions: 13 -// - #include #include -{"addr":"0xffe179d4","code":"int CompareMem(_BYTE *DestBuffer, _BYTE *a2, int Length)\n{\n bool v6; // zf\n\n do /*0xffe179e2*/\n {\n if ( !Length ) /*0xffe179e2*/\n break; /*0xffe179e2*/\n v6 = *DestBuffer++ == *a2++; /*0xffe179e2*/\n --Length; /*0xffe179e2*/\n }\n while ( v6 ); /*0xffe179e2*/\n return (unsigned __int8)*(DestBuffer - 1) - (unsigned __int8)*(a2 - 1); /*0xffe179ee*/\n}"} +int CompareMem(_BYTE *DestBuffer, _BYTE *a2, int Length) +{ + bool v6; -{"addr":"0xffe179f4","code":"void *SetMem(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe17a01*/\n return buf; /*0xffe17a07*/\n}"} + do { + if (!Length) { + break; + } + v6 = *DestBuffer++ == *a2++; + --Length; + } while (v6); -{"addr":"0xffe17a14","code":"int CopyMemBackwards(int DstBase, int Count, int LoVal, int HiVal)\n{\n do /*0xffe17a2d*/\n {\n *(_DWORD *)(DstBase + 8 *Count - 8) = LoVal; /*0xffe17a25*/\n *(_DWORD *)(DstBase + 8 *Count-- - 4) = HiVal; /*0xffe17a29*/\n }\n while ( Count ); /*0xffe17a2d*/\n return DstBase; /*0xffe17a31*/\n}"} + return (unsigned __int8)*(DestBuffer - 1) - (unsigned __int8)*(a2 - 1); +} -{"addr":"0xffe17a34","code":"void *SetMem32(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe17a41*/\n return buf; /*0xffe17a47*/\n}"} +void *SetMem(void *buf, unsigned int count, char value) +{ + memset(buf, value, count); + return buf; +} -{"addr":"0xffe17a54","code":"char *CopyMem(char *dst, char *src, unsigned int count)\n{\n unsigned int count_1; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count_1 = count; /*0xffe17a5e*/\n if ( src < dst && &src[count - 1] >= dst ) /*0xffe17a6c*/\n {\n src_1 = &src[count - 1]; /*0xffe17a80*/\n dst_1 = &dst[count - 1]; /*0xffe17a82*/\n }\n else\n {\n count_1 = count & 3; /*0xffe17a70*/\n qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe17a79*/\n src_1 = &src[4 * (count >> 2)]; /*0xffe17a79*/\n dst_1 = &dst[4 * (count >> 2)]; /*0xffe17a79*/\n }\n qmemcpy(dst_1, src_1, count_1); /*0xffe17a89*/\n return dst; /*0xffe17a90*/\n}"} +int CopyMemBackwards(int DstBase, int Count, int LoVal, int HiVal) +{ + do { + *(_DWORD *)(DstBase + 8 * Count - 8) = LoVal; + *(_DWORD *)(DstBase + 8 * Count-- - 4) = HiVal; + } while (Count); -{"addr":"0xffe17ab4","code":"// bad sp value at call has been detected, the output may be wrong!\nEFI_STATUS TcgPlatformSetupPolicyEntry(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n int ( **TpmProtocol)(); // esi\n int PeiServices; // eax\n int Status; // eax\n int Status_1; // esi\n int DebugOutputInterface; // eax\n _DWORD *PolicyDataPtr; // edi\n char TpmDeviceSelect; // [esp-333h] [ebp-333h]\n char TpmIntStsPolarity; // [esp-332h] [ebp-332h]\n char TpmDeviceEnable; // [esp-32Eh] [ebp-32Eh]\n char TpmPtpIrqEnable; // [esp-32Dh] [ebp-32Dh]\n char TpmSubOwner; // [esp-32Ch] [ebp-32Ch]\n char Tpm2AcpiRev; // [esp-32Ah] [ebp-32Ah]\n char TpmClearOwner; // [esp-327h] [ebp-327h]\n char TpmIntType; // [esp-326h] [ebp-326h]\n char TpmFlags1; // [esp-325h] [ebp-325h]\n char TpmFlags2; // [esp-324h] [ebp-324h]\n char TpmFlags3; // [esp-323h] [ebp-323h]\n char TpmFlags4; // [esp-322h] [ebp-322h]\n char TpmInterfaceType; // [esp-321h] [ebp-321h]\n char TpmMiscFlags; // [esp-320h] [ebp-320h]\n unsigned __int8 TpmTypeBits0; // [esp-31Ah] [ebp-31Ah]\n unsigned __int8 TpmTypeBits1; // [esp-319h] [ebp-319h]\n unsigned __int8 TpmTypeBits2; // [esp-318h] [ebp-318h]\n unsigned __int8 TpmTypeBits3; // [esp-317h] [ebp-317h]\n unsigned __int8 TpmTypeBits4; // [esp-316h] [ebp-316h]\n _DWORD PpiBuffer[2]; // [esp-10h] [ebp-10h] BYREF\n int PolicyData; // [esp-8h] [ebp-8h] BYREF\n\n PpiBuffer[1] = 814; /*0xffe17bb6*/\n PeiServices = SystemTable->Hdr.Signature; /*0xffe17bc9*/\n PolicyData = 0; /*0xffe17bcc*/\n if ( (*(int ( **)(EFI_SYSTEM_TABLE *, void *, _DWORD, _DWORD, _DWORD *))(PeiServices + 32))( /*0xffe17bf3*/\n SystemTable,\n &unk_FFE182E4,\n 0,\n 0,\n PpiBuffer) < 0\n || (*(int ( **)(EFI_SYSTEM_TABLE *, int, int, int *))(LODWORD(SystemTable->Hdr.Signature) + 52))(\n SystemTable,\n 4,\n 51,\n &PolicyData) < 0 )\n {\n return 0; /*0xffe17bd9*/\n }\n PpiBuffer[0] = TpmProtocol; /*0xffe17bf5*/\n Status = (*TpmProtocol)(); /*0xffe17c10*/\n Status_1 = Status; /*0xffe17c12*/\n if ( Status < 0 ) /*0xffe17c19*/\n {\n DebugPrint(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", Status); /*0xffe17c26*/\n DebugOutputInterface = GetDebugOutputInterface(); /*0xffe17c2e*/\n if ( DebugOutputInterface ) /*0xffe17c35*/\n (*(void ( **)(const char *, int, const char *))(DebugOutputInterface + 4))( /*0xffe17c46*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\TCG2\\\\Common\\\\TcgPlatformSetupPeiPolicy\\\\TcgPlatformSetupPeiPolicy.c\",\n 213,\n \"!EFI_ERROR (Status)\");\n }\n if ( PolicyData ) /*0xffe17c51*/\n {\n if ( Status_1 >= 0 ) /*0xffe17c59*/\n {\n (*(void ( **)(int, int, _DWORD))(LODWORD(SystemTable->Hdr.Signature) + 84))(PolicyData + 24, 27, 0); /*0xffe17c68*/\n PolicyDataPtr = (_DWORD *)(PolicyData + 8); /*0xffe17c76*/\n *(_DWORD *)(PolicyData + 8) = *(_DWORD *)byte_FFE18304; /*0xffe17c79*/\n *++PolicyDataPtr = unk_FFE18308; /*0xffe17c7a*/\n *++PolicyDataPtr = unk_FFE1830C; /*0xffe17c7b*/\n PolicyDataPtr[1] = unk_FFE18310; /*0xffe17c7c*/\n *(_BYTE *)(PolicyData + 24) = TpmDeviceEnable; /*0xffe17c86*/\n *(_BYTE *)(PolicyData + 25) = TpmDeviceSelect; /*0xffe17c92*/\n *(_BYTE *)(PolicyData + 26) = Tpm2AcpiRev; /*0xffe17c9e*/\n *(_BYTE *)(PolicyData + 27) = TpmIntStsPolarity; /*0xffe17caa*/\n *(_BYTE *)(PolicyData + 42) = TpmClearOwner; /*0xffe17cb6*/\n *(_BYTE *)(PolicyData + 29) = TpmIntType; /*0xffe17cc2*/\n *(_BYTE *)(PolicyData + 45) = TpmFlags3; /*0xffe17cce*/\n *(_BYTE *)(PolicyData + 44) = TpmFlags2; /*0xffe17cda*/\n *(_BYTE *)(PolicyData + 43) = TpmFlags1; /*0xffe17ce6*/\n *(_BYTE *)(PolicyData + 46) = TpmFlags4; /*0xffe17cf2*/\n *(_BYTE *)(PolicyData + 30) = TpmInterfaceType; /*0xffe17cfe*/\n *(_BYTE *)(PolicyData + 36) = TpmSubOwner; /*0xffe17d0a*/\n *(_BYTE *)(PolicyData + 35) = TpmPtpIrqEnable; /*0xffe17d16*/\n *(_DWORD *)(PolicyData + 47) = TpmTypeBits0 | TpmTypeBits1 | TpmTypeBits2 | TpmTypeBits3 | (16 *TpmTypeBits4); /*0xffe17d4a*/\n *(_BYTE *)(PolicyData + 39) = TpmMiscFlags; /*0xffe17d56*/\n }\n }\n return (*(int ( **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 24))( /*0xffe17d6c*/\n SystemTable,\n &unk_FFE18324);\n}","refs":[{"addr":"0xffe182e4","name":"unk_FFE182E4"},{"addr":"0xffe17e36","name":"DebugPrint"},{"addr":"0xffe17f40","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe17e05","name":"GetDebugOutputInterface"},{"addr":"0xffe17f7c","name":"aEHsAmimodulepk","string":"e:\\hs\\AmiModulePkg\\TCG2\\Common\\TcgPlatformSetupPeiPolicy\\TcgPlatformSetupPeiPolicy.c"},{"addr":"0xffe17f64","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe18304","name":"DestBuffer"},{"addr":"0xffe18308","name":"unk_FFE18308"},{"addr":"0xffe1830c","name":"unk_FFE1830C"},{"addr":"0xffe18310","name":"unk_FFE18310"},{"addr":"0xffe18324","name":"unk_FFE18324"}]} + return DstBase; +} -{"addr":"0xffe17d6d","code":"int CompareMemWithDebug(_BYTE *DestBuffer, int Length)\n{\n int DebugOutputInterface; // eax\n int Status; // eax\n int Status2; // eax\n\n if ( DestBuffer == ::DestBuffer ) /*0xffe17d79*/\n return 0; /*0xffe17d7b*/\n if ( !DestBuffer ) /*0xffe17d84*/\n {\n DebugOutputInterface = GetDebugOutputInterface(); /*0xffe17d86*/\n if ( DebugOutputInterface ) /*0xffe17d8d*/\n (*(void ( **)(const char *, int, const char *))(DebugOutputInterface + 4))( /*0xffe17d9b*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CompareMemWrapper.c\",\n 60,\n \"DestinationBuffer != ((void *) 0)\");\n }\n if ( Length - 1 > (unsigned int)(-1 - (_DWORD)DestBuffer) ) /*0xffe17daf*/\n {\n Status = GetDebugOutputInterface(); /*0xffe17db1*/\n if ( Status ) /*0xffe17db8*/\n (*(void ( **)(const char *, int, const char *))(Status + 4))( /*0xffe17dc6*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CompareMemWrapper.c\",\n 62,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)\");\n }\n if ( Length - 1 > (unsigned int)(-1 - (_DWORD)::DestBuffer) ) /*0xffe17dd6*/\n {\n Status2 = GetDebugOutputInterface(); /*0xffe17dd8*/\n if ( Status2 ) /*0xffe17ddf*/\n (*(void ( **)(const char *, int, const char *))(Status2 + 4))( /*0xffe17ded*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CompareMemWrapper.c\",\n 63,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)\");\n }\n return CompareMem(DestBuffer, ::DestBuffer, Length); /*0xffe17e02*/\n}","refs":[{"addr":"0xffe18304","name":"DestBuffer"},{"addr":"0xffe17e05","name":"GetDebugOutputInterface"},{"addr":"0xffe17ff8","name":"aEHsMdepkgLibra_1","string":"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CompareMemWrapper.c"},{"addr":"0xffe17fd4","name":"aDestinationbuf","string":"DestinationBuffer != ((void *) 0)"},{"addr":"0xffe18038","name":"aLength10xfffff","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)"},{"addr":"0xffe18070","name":"aLength10xfffff_0","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)"},{"addr":"0xffe179d4","name":"CompareMem"}]} +void *SetMem32(void *buf, unsigned int count, int value) +{ + memset32(buf, value, count); + return buf; +} -{"addr":"0xffe17e05","code":"int GetDebugOutputInterface()\n{\n int PeiServicesTablePointer; // eax\n _BYTE GuidBuffer[4]; // [esp+0h] [ebp-8h] BYREF\n int DebugInterface; // [esp+4h] [ebp-4h] BYREF\n\n PeiServicesTablePointer = GetPeiServicesTablePointer(); /*0xffe17e0a*/\n if ( (*(int ( **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)PeiServicesTablePointer + 32))( /*0xffe17e29*/\n PeiServicesTablePointer,\n &unk_FFE182F4,\n 0,\n GuidBuffer,\n &DebugInterface) >= 0 )\n return DebugInterface; /*0xffe17e2f*/\n else\n return 0; /*0xffe17e2b*/\n}","refs":[{"addr":"0xffe17ecd","name":"GetPeiServicesTablePointer"},{"addr":"0xffe182f4","name":"unk_FFE182F4"}]} +char *CopyMem(char *dst, char *src, unsigned int count) +{ + unsigned int count_1; + char *dst_1; + char *src_1; -{"addr":"0xffe17e36","code":"int DebugPrint(int a1, const char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...)\n{\n int DebugInterface_1; // eax\n int ( **DebugInterface)(int, const char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n);\n DebugInterface_1 = GetDebugOutputInterface(); /*0xffe17e37*/\n DebugInterface = (int ( **)(int, const char *, char *))DebugInterface_1; /*0xffe17e3c*/\n if ( DebugInterface_1 ) /*0xffe17e40*/\n {\n DebugInterface_1 = GetTpmState(); /*0xffe17e42*/\n if ( (DebugInterface_1 & a1) != 0 ) /*0xffe17e4d*/\n return (*DebugInterface)(a1, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); /*0xffe17e59*/\n }\n return DebugInterface_1; /*0xffe17e5e*/\n}","refs":[{"addr":"0xffe17e05","name":"GetDebugOutputInterface"},{"addr":"0xffe17e7e","name":"GetTpmState"}]} + count_1 = count; + if (src < dst && &src[count - 1] >= dst) { + src_1 = &src[count - 1]; + dst_1 = &dst[count - 1]; + } else { + count_1 = count & 3; + qmemcpy(dst, src, 4 * (count >> 2)); + src_1 = &src[4 * (count >> 2)]; + dst_1 = &dst[4 * (count >> 2)]; + } + qmemcpy(dst_1, src_1, count_1); + return dst; +} -{"addr":"0xffe17e60","code":"int DebugOutputString(\n int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n int n48,\n int PeiServices____((void__)_0))\n{\n int DebugInterface; // eax\n\n DebugInterface = GetDebugOutputInterface(); /*0xffe17e66*/\n if ( DebugInterface ) /*0xffe17e6d*/\n return (*(int ( **)(int, int, int))(DebugInterface + 4))( /*0xffe17e75*/\n e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n n48,\n PeiServices____((void__)_0));\n return DebugInterface; /*0xffe17e7b*/\n}","refs":[{"addr":"0xffe17e05","name":"GetDebugOutputInterface"}]} +int GetDebugOutputInterface(void) +{ + int PeiServicesTablePointer; + _BYTE GuidBuffer[4]; + int DebugInterface; -{"addr":"0xffe17e7e","code":"int GetTpmState()\n{\n unsigned __int8 CmosIndex; // al\n char TpmStateRead; // al\n char TpmStateRead_1; // cl\n\n CmosIndex = __inbyte(0x70u); /*0xffe17e84*/\n __outbyte(0x70u, CmosIndex & 0x80 | 0x4A); /*0xffe17e89*/\n TpmStateRead = __inbyte(0x71u); /*0xffe17e90*/\n TpmStateRead_1 = TpmStateRead; /*0xffe17e91*/\n if ( (unsigned __int8)TpmStateRead <= 3u ) /*0xffe17e96*/\n {\nLABEL_4:\n if ( !TpmStateRead_1 ) /*0xffe17eb1*/\n return 0; /*0xffe17eb1*/\n goto LABEL_5; /*0xffe17eb1*/\n }\n TpmStateRead_1 = n3; /*0xffe17e98*/\n if ( !n3 ) /*0xffe17ea0*/\n {\n TpmStateRead_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe17eac*/\n goto LABEL_4; /*0xffe17eac*/\n }\nLABEL_5:\n if ( TpmStateRead_1 != -1 )\n return TpmStateRead_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe17ec9*/\n}","refs":[{"addr":"0xffe18338","name":"n3"}]} + PeiServicesTablePointer = GetPeiServicesTablePointer(); + if ((*(int (**)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)PeiServicesTablePointer + 32))( + PeiServicesTablePointer, &unk_FFE182F4, 0, GuidBuffer, &DebugInterface) >= 0) { + return DebugInterface; + } + return 0; +} -{"addr":"0xffe17ecd","code":"int GetPeiServicesTablePointer()\n{\n int PeiServices; // esi\n _BYTE IdtrStorage[2]; // [esp+4h] [ebp-8h] BYREF\n int IdtrBase; // [esp+6h] [ebp-6h]\n\n ReadIdtr(IdtrStorage); /*0xffe17ed6*/\n PeiServices = *(_DWORD *)(IdtrBase - 4); /*0xffe17ede*/\n if ( !PeiServices ) /*0xffe17ee3*/\n DebugOutputString( /*0xffe17ef2*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n (int)\"PeiServices != ((void *) 0)\");\n return PeiServices; /*0xffe17efa*/\n}","refs":[{"addr":"0xffe17eff","name":"ReadIdtr"},{"addr":"0xffe17e60","name":"DebugOutputString"},{"addr":"0xffe180c4","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c"},{"addr":"0xffe180a4","name":"aPeiservicesVoi","string":"PeiServices != ((void *) 0)"}]} +int GetTpmState(void) +{ + unsigned __int8 CmosIndex; + char TpmStateRead; + char TpmStateRead_1; -{"addr":"0xffe17eff","code":"void *__thiscall ReadIdtr(void *Idtr)\n{\n void *Idtr_1; // eax\n\n if ( !Idtr ) /*0xffe17f05*/\n DebugOutputString((int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\", 37, (int)\"Idtr != ((void *) 0)\"); /*0xffe17f14*/\n Idtr_1 = Idtr; /*0xffe17f1a*/\n __sidt(Idtr); /*0xffe17f1d*/\n return Idtr_1; /*0xffe17f21*/\n}","refs":[{"addr":"0xffe17e60","name":"DebugOutputString"},{"addr":"0xffe1812c","name":"aEHsMdepkgLibra_0","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c"},{"addr":"0xffe18114","name":"aIdtrVoid0","string":"Idtr != ((void *) 0)"}]} + CmosIndex = __inbyte(0x70u); + __outbyte(0x70u, CmosIndex & 0x80 | 0x4A); + TpmStateRead = __inbyte(0x71u); + TpmStateRead_1 = TpmStateRead; + if ((unsigned __int8)TpmStateRead <= 3u) { +LABEL_4: + if (!TpmStateRead_1) { + return 0; + } + goto LABEL_5; + } + TpmStateRead_1 = n3; + if (!n3) { + TpmStateRead_1 = MEMORY[0xFDAF0490] & 2 | 1; + goto LABEL_4; + } +LABEL_5: + if (TpmStateRead_1 != -1) { + return TpmStateRead_1 != 1 ? -2147483578 : -2147483644; + } + return 0; +} +int DebugPrint(int a1, const char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...) +{ + int DebugInterface_1; + int (**DebugInterface)(int, const char *, char *); + va_list va; + + va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n); + DebugInterface_1 = GetDebugOutputInterface(); + DebugInterface = (int (**)(int, const char *, char *))DebugInterface_1; + if (DebugInterface_1) { + DebugInterface_1 = GetTpmState(); + if ((DebugInterface_1 & a1) != 0) { + return (*DebugInterface)(a1, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); + } + } + return DebugInterface_1; +} + +int DebugOutputString(int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ, int n48, + int PeiServices____((void__)_0)) +{ + int DebugInterface; + + DebugInterface = GetDebugOutputInterface(); + if (DebugInterface) { + return (*(int (**)(int, int, int))(DebugInterface + 4))(e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ, + n48, PeiServices____((void__)_0)); + } + return DebugInterface; +} + +int GetPeiServicesTablePointer(void) +{ + int PeiServices; + _BYTE IdtrStorage[2]; + int IdtrBase; + + ReadIdtr(IdtrStorage); + PeiServices = *(_DWORD *)(IdtrBase - 4); + if (!PeiServices) { + DebugOutputString((int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c", + 48, (int)"PeiServices != ((void *) 0)"); + } + return PeiServices; +} + +void *__thiscall ReadIdtr(void *Idtr) +{ + void *Idtr_1; + + if (!Idtr) { + DebugOutputString((int)"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c", 37, + (int)"Idtr != ((void *) 0)"); + } + Idtr_1 = Idtr; + __sidt(Idtr); + return Idtr_1; +} + +// bad sp value at call has been detected, the output may be wrong! +EFI_STATUS TcgPlatformSetupPolicyEntry(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) +{ + int (**TpmProtocol)(); + int PeiServices; + int Status; + int Status_1; + int DebugOutputInterface; + _DWORD *PolicyDataPtr; + char TpmDeviceSelect; + char TpmIntStsPolarity; + char TpmDeviceEnable; + char TpmPtpIrqEnable; + char TpmSubOwner; + char Tpm2AcpiRev; + char TpmClearOwner; + char TpmIntType; + char TpmFlags1; + char TpmFlags2; + char TpmFlags3; + char TpmFlags4; + char TpmInterfaceType; + char TpmMiscFlags; + unsigned __int8 TpmTypeBits0; + unsigned __int8 TpmTypeBits1; + unsigned __int8 TpmTypeBits2; + unsigned __int8 TpmTypeBits3; + unsigned __int8 TpmTypeBits4; + _DWORD PpiBuffer[2]; + int PolicyData; + + PpiBuffer[1] = 814; + PeiServices = SystemTable->Hdr.Signature; + PolicyData = 0; + if ((*(int (**)(EFI_SYSTEM_TABLE *, void *, _DWORD, _DWORD, _DWORD *))(PeiServices + 32))(SystemTable, + &unk_FFE182E4, 0, 0, + PpiBuffer) < 0 || + (*(int (**)(EFI_SYSTEM_TABLE *, int, int, int *))(LODWORD(SystemTable->Hdr.Signature) + 52))(SystemTable, 4, 51, + &PolicyData) < 0) { + return 0; + } + + PpiBuffer[0] = TpmProtocol; + Status = (*TpmProtocol)(); + Status_1 = Status; + if (Status < 0) { + DebugPrint(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", Status); + DebugOutputInterface = GetDebugOutputInterface(); + if (DebugOutputInterface) { + (*(void (**)(const char *, int, const char *))(DebugOutputInterface + 4))( + "e:\\hs\\AmiModulePkg\\TCG2\\Common\\TcgPlatformSetupPeiPolicy\\TcgPlatformSetupPeiPolicy.c", 213, + "!EFI_ERROR (Status)"); + } + } + if (PolicyData) { + if (Status_1 >= 0) { + (*(void (**)(int, int, _DWORD))(LODWORD(SystemTable->Hdr.Signature) + 84))(PolicyData + 24, 27, 0); + PolicyDataPtr = (_DWORD *)(PolicyData + 8); + *(_DWORD *)(PolicyData + 8) = *(_DWORD *)byte_FFE18304; + *++PolicyDataPtr = unk_FFE18308; + *++PolicyDataPtr = unk_FFE1830C; + PolicyDataPtr[1] = unk_FFE18310; + *(_BYTE *)(PolicyData + 24) = TpmDeviceEnable; + *(_BYTE *)(PolicyData + 25) = TpmDeviceSelect; + *(_BYTE *)(PolicyData + 26) = Tpm2AcpiRev; + *(_BYTE *)(PolicyData + 27) = TpmIntStsPolarity; + *(_BYTE *)(PolicyData + 42) = TpmClearOwner; + *(_BYTE *)(PolicyData + 29) = TpmIntType; + *(_BYTE *)(PolicyData + 45) = TpmFlags3; + *(_BYTE *)(PolicyData + 44) = TpmFlags2; + *(_BYTE *)(PolicyData + 43) = TpmFlags1; + *(_BYTE *)(PolicyData + 46) = TpmFlags4; + *(_BYTE *)(PolicyData + 30) = TpmInterfaceType; + *(_BYTE *)(PolicyData + 36) = TpmSubOwner; + *(_BYTE *)(PolicyData + 35) = TpmPtpIrqEnable; + *(_DWORD *)(PolicyData + 47) = + TpmTypeBits0 | TpmTypeBits1 | TpmTypeBits2 | TpmTypeBits3 | (16 * TpmTypeBits4); + *(_BYTE *)(PolicyData + 39) = TpmMiscFlags; + } + } + return (*(int (**)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 24))(SystemTable, + &unk_FFE18324); +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f6ec.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f6ec.c index c617e8b..271339e 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f6ec.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f6ec.c @@ -1,2 +1,5 @@ -// 0xffd7f6ec -{"addr":"0xffd7f6ec","code":"void *__cdecl FillBuffer(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffd7f6f9*/\n return buf; /*0xffd7f6ff*/\n}"} +void *__cdecl FillBuffer(void *buf, unsigned int count, char value) +{ + memset(buf, value, count); /*0xffd7f6f9*/ + return buf; /*0xffd7f6ff*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f72c.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f72c.c index ae68b9a..3340b17 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f72c.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f72c.c @@ -1,2 +1,22 @@ -// 0xffd7f72c -{"addr":"0xffd7f72c","code":"char *__cdecl sub_FFD7F72C(char *dst, char *src, unsigned int count_1)\n{\n unsigned int count; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count = count_1; /*0xffd7f736*/\n if ( src < dst && &src[count_1 - 1] >= dst ) /*0xffd7f744*/\n {\n src_1 = &src[count_1 - 1]; /*0xffd7f758*/\n dst_1 = &dst[count_1 - 1]; /*0xffd7f75a*/\n }\n else\n {\n count = count_1 & 3; /*0xffd7f748*/\n qmemcpy(dst, src, 4 * (count_1 >> 2)); /*0xffd7f751*/\n src_1 = &src[4 * (count_1 >> 2)]; /*0xffd7f751*/\n dst_1 = &dst[4 * (count_1 >> 2)]; /*0xffd7f751*/\n }\n qmemcpy(dst_1, src_1, count); /*0xffd7f761*/\n return dst; /*0xffd7f768*/\n}"} \ No newline at end of file +char *__cdecl sub_FFD7F72C(char *dst, char *src, unsigned int count_1) +{ + unsigned int count; // edx + char *dst_1; // edi + char *src_1; // esi + + count = count_1; /*0xffd7f736*/ + if ( src < dst && &src[count_1 - 1] >= dst ) /*0xffd7f744*/ + { + src_1 = &src[count_1 - 1]; /*0xffd7f758*/ + dst_1 = &dst[count_1 - 1]; /*0xffd7f75a*/ + } + else + { + count = count_1 & 3; /*0xffd7f748*/ + qmemcpy(dst, src, 4 * (count_1 >> 2)); /*0xffd7f751*/ + src_1 = &src[4 * (count_1 >> 2)]; /*0xffd7f751*/ + dst_1 = &dst[4 * (count_1 >> 2)]; /*0xffd7f751*/ + } + qmemcpy(dst_1, src_1, count); /*0xffd7f761*/ + return dst; /*0xffd7f768*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f76c.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f76c.c index 3626b7e..221ac75 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f76c.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f76c.c @@ -1,2 +1,10 @@ -// 0xffd7f76c -{"addr":"0xffd7f76c","code":"int __cdecl StoreDwordPairs(int a1, int a2, int a3, int a4)\n{\n do /*0xffd7f785*/\n {\n *(_DWORD *)(a1 + 8 * a2 - 8) = a3; /*0xffd7f77d*/\n *(_DWORD *)(a1 + 8 * a2-- - 4) = a4; /*0xffd7f781*/\n }\n while ( a2 ); /*0xffd7f785*/\n return a1; /*0xffd7f789*/\n}"} +int __cdecl StoreDwordPairs(int a1, int a2, int a3, int a4) +{ + do /*0xffd7f785*/ + { + *(_DWORD *)(a1 + 8 * a2 - 8) = a3; /*0xffd7f77d*/ + *(_DWORD *)(a1 + 8 * a2-- - 4) = a4; /*0xffd7f781*/ + } + while ( a2 ); /*0xffd7f785*/ + return a1; /*0xffd7f789*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f78c.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f78c.c index 0da2ac4..3c1c7d7 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f78c.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f78c.c @@ -1,2 +1,5 @@ -// 0xffd7f78c -{"addr":"0xffd7f78c","code":"void *__cdecl FillBuffer32(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffd7f799*/\n return buf; /*0xffd7f79f*/\n}"} +void *__cdecl FillBuffer32(void *buf, unsigned int count, int value) +{ + memset32(buf, value, count); /*0xffd7f799*/ + return buf; /*0xffd7f79f*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f7a1.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f7a1.c index a2e28ab..7d9f521 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f7a1.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f7a1.c @@ -1,2 +1,45 @@ -// 0xffd7f7a1 -{"addr":"0xffd7f7a1","code":"EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n int v2; // eax\n int v3; // ecx\n void *v4; // ecx\n int v5; // ecx\n int v6; // eax\n int v7; // eax\n int v8; // eax\n unsigned __int64 v10; // [esp-Ch] [ebp-10h]\n\n if ( (sub_FFD9165B(1024068) & 0x80u) == 0 ) /*0xffd7f7b0*/\n {\n sub_FFD9168B(); /*0xffd7f7b2*/\n v2 = sub_FFD9164F(); /*0xffd7f7b7*/\n *(_BYTE *)(v2 + 1024068) |= 0x80u; /*0xffd7f7c3*/\n }\n DebugPrint(64, (int)\"SiInitPrePolicy() Start\\n\"); /*0xffd7f88f*/\n TraceHubInitialize(0); /*0xffd7f898*/\n RecordPerformanceEntry(v3, __rdtsc()); /*0xffd7f8a3*/\n PrintPchInfo(); /*0xffd7f8a8*/\n DebugPrint(64, (int)\"PchInitPrePolicy() - Start\\n\"); /*0xffd7f8b4*/\n PchWdtInit(); /*0xffd7f8b9*/\n InstallPchResetPpi(); /*0xffd7f8be*/\n InstallPchSpiPpi(); /*0xffd7f8c3*/\n PchInitPreMem(); /*0xffd7f8c8*/\n sub_FFD8B940(v4); /*0xffd7f8cd*/\n DebugPrint(64, (int)\"PchInitPrePolicy() - End\\n\"); /*0xffd7f8d9*/\n v10 = __rdtsc(); /*0xffd7f8e5*/\n EndPerformanceMeasurement(v5, v10, HIDWORD(v10)); /*0xffd7f8e7*/\n v6 = sub_FFD8AD54(); /*0xffd7f8ec*/\n v7 = (*(int (__cdecl **)(int, void *))(*(_DWORD *)v6 + 36))(v6, &unk_FFD97FEC); /*0xffd7f8f9*/\n if ( v7 < 0 ) /*0xffd7f901*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v7); /*0xffd7f90e*/\n v8 = GetReportStatusCodePpi(); /*0xffd7f916*/\n if ( v8 ) /*0xffd7f91d*/\n (*(void (__cdecl **)(const char *, int, const char *))(v8 + 4))( /*0xffd7f92e*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\SiInit\\\\Pei\\\\SiInitPreMem.c\",\n 155,\n \"!EFI_ERROR (Status)\");\n }\n DebugPrint(64, (int)\"SiInitPrePolicy() - End\\n\"); /*0xffd7f93b*/\n return 0; /*0xffd7f947*/\n}","refs":[{"addr":"0xffd9168b","name":"sub_FFD9168B"},{"addr":"0xffd9164f","name":"sub_FFD9164F"},{"addr":"0xffd9165b","name":"sub_FFD9165B"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd919e8","name":"aSiinitprepolic","string":"SiInitPrePolicy() Start\n"},{"addr":"0xffd7fd72","name":"TraceHubInitialize"},{"addr":"0xffd7fbc7","name":"RecordPerformanceEntry"},{"addr":"0xffd816c4","name":"PrintPchInfo"},{"addr":"0xffd92c9c","name":"aPchinitprepoli","string":"PchInitPrePolicy() - Start\n"},{"addr":"0xffd87eed","name":"PchWdtInit"},{"addr":"0xffd880d2","name":"InstallPchResetPpi"},{"addr":"0xffd87d42","name":"InstallPchSpiPpi"},{"addr":"0xffd8155f","name":"PchInitPreMem"},{"addr":"0xffd8b940","name":"sub_FFD8B940"},{"addr":"0xffd92cb8","name":"aPchinitprepoli_0","string":"PchInitPrePolicy() - End\n"},{"addr":"0xffd7fc48","name":"EndPerformanceMeasurement"},{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd97fec","name":"unk_FFD97FEC"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd91988","name":"aEHsPurleysktpk","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\SiInit\\Pei\\SiInitPreMem.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffd91a04","name":"aSiinitprepolic_0","string":"SiInitPrePolicy() - End\n"}]} \ No newline at end of file +EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) +{ + int v2; // eax + int v3; // ecx + void *v4; // ecx + int v5; // ecx + int v6; // eax + int v7; // eax + int v8; // eax + unsigned __int64 v10; // [esp-Ch] [ebp-10h] + + if ( (sub_FFD9165B(1024068) & 0x80u) == 0 ) /*0xffd7f7b0*/ + { + sub_FFD9168B(); /*0xffd7f7b2*/ + v2 = sub_FFD9164F(); /*0xffd7f7b7*/ + *(_BYTE *)(v2 + 1024068) |= 0x80u; /*0xffd7f7c3*/ + } + DebugPrint(64, (int)"SiInitPrePolicy() Start\n"); /*0xffd7f88f*/ + TraceHubInitialize(0); /*0xffd7f898*/ + RecordPerformanceEntry(v3, __rdtsc()); /*0xffd7f8a3*/ + PrintPchInfo(); /*0xffd7f8a8*/ + DebugPrint(64, (int)"PchInitPrePolicy() - Start\n"); /*0xffd7f8b4*/ + PchWdtInit(); /*0xffd7f8b9*/ + InstallPchResetPpi(); /*0xffd7f8be*/ + InstallPchSpiPpi(); /*0xffd7f8c3*/ + PchInitPreMem(); /*0xffd7f8c8*/ + sub_FFD8B940(v4); /*0xffd7f8cd*/ + DebugPrint(64, (int)"PchInitPrePolicy() - End\n"); /*0xffd7f8d9*/ + v10 = __rdtsc(); /*0xffd7f8e5*/ + EndPerformanceMeasurement(v5, v10, HIDWORD(v10)); /*0xffd7f8e7*/ + v6 = sub_FFD8AD54(); /*0xffd7f8ec*/ + v7 = (*(int (__cdecl **)(int, void *))(*(_DWORD *)v6 + 36))(v6, &unk_FFD97FEC); /*0xffd7f8f9*/ + if ( v7 < 0 ) /*0xffd7f901*/ + { + DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v7); /*0xffd7f90e*/ + v8 = GetReportStatusCodePpi(); /*0xffd7f916*/ + if ( v8 ) /*0xffd7f91d*/ + (*(void (__cdecl **)(const char *, int, const char *))(v8 + 4))( /*0xffd7f92e*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\SiInit\\Pei\\SiInitPreMem.c", + 155, + "!EFI_ERROR (Status)"); + } + DebugPrint(64, (int)"SiInitPrePolicy() - End\n"); /*0xffd7f93b*/ + return 0; /*0xffd7f947*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f948.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f948.c index 34a493f..e8fb73a 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f948.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f948.c @@ -1,2 +1,7 @@ -// 0xffd7f948 -{"addr":"0xffd7f948","code":"int __thiscall InstallPpi(void *this)\n{\n int v2; // eax\n\n v2 = sub_FFD8AD54(); /*0xffd7f94b*/\n return (*(int (__cdecl **)(int, void *))(*(_DWORD *)v2 + 24))(v2, this); /*0xffd7f959*/\n}","refs":[{"addr":"0xffd8ad54","name":"sub_FFD8AD54"}]} \ No newline at end of file +int __thiscall InstallPpi(void *this) +{ + int v2; // eax + + v2 = sub_FFD8AD54(); /*0xffd7f94b*/ + return (*(int (__cdecl **)(int, void *))(*(_DWORD *)v2 + 24))(v2, this); /*0xffd7f959*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f95b.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f95b.c index eeba7f7..97cf2c8 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f95b.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f95b.c @@ -1,2 +1,7 @@ -// 0xffd7f95b -{"addr":"0xffd7f95b","code":"int __fastcall sub_FFD7F95B(int a1, int a2, int a3, int a4)\n{\n int v6; // eax\n\n v6 = sub_FFD8AD54(); /*0xffd7f962*/\n return (*(int (__cdecl **)(int, int, int, int, int))(*(_DWORD *)v6 + 32))(v6, a1, a2, a3, a4); /*0xffd7f97a*/\n}","refs":[{"addr":"0xffd8ad54","name":"sub_FFD8AD54"}]} \ No newline at end of file +int __fastcall sub_FFD7F95B(int a1, int a2, int a3, int a4) +{ + int v6; // eax + + v6 = sub_FFD8AD54(); /*0xffd7f962*/ + return (*(int (__cdecl **)(int, int, int, int, int))(*(_DWORD *)v6 + 32))(v6, a1, a2, a3, a4); /*0xffd7f97a*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f97e.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f97e.c index cddfde9..5388ed2 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f97e.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f97e.c @@ -1,2 +1,12 @@ -// 0xffd7f97e -{"addr":"0xffd7f97e","code":"int GetReportStatusCodePpi()\n{\n int v0; // eax\n _BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF\n int v3; // [esp+4h] [ebp-4h] BYREF\n\n v0 = sub_FFD8AD54(); /*0xffd7f983*/\n if ( (*(int (__cdecl **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)v0 + 32))(v0, &unk_FFD97EAC, 0, v2, &v3) >= 0 ) /*0xffd7f9a2*/\n return v3; /*0xffd7f9a8*/\n else\n return 0; /*0xffd7f9a4*/\n}","refs":[{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd97eac","name":"unk_FFD97EAC"}]} \ No newline at end of file +int GetReportStatusCodePpi() +{ + int v0; // eax + _BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF + int v3; // [esp+4h] [ebp-4h] BYREF + + v0 = sub_FFD8AD54(); /*0xffd7f983*/ + if ( (*(int (__cdecl **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)v0 + 32))(v0, &unk_FFD97EAC, 0, v2, &v3) >= 0 ) /*0xffd7f9a2*/ + return v3; /*0xffd7f9a8*/ + else + return 0; /*0xffd7f9a4*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9af.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9af.c index 372555d..0b76fb9 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9af.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9af.c @@ -1,2 +1,17 @@ -// 0xffd7f9af -{"addr":"0xffd7f9af","code":"int DebugPrint(int a1, int a2, ...)\n{\n int result; // eax\n int (__cdecl **v3)(int, int, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, a2);\n result = GetReportStatusCodePpi(); /*0xffd7f9b0*/\n v3 = (int (__cdecl **)(int, int, char *))result; /*0xffd7f9b5*/\n if ( result ) /*0xffd7f9b9*/\n {\n result = sub_FFD8AD05(); /*0xffd7f9bb*/\n if ( (result & a1) != 0 ) /*0xffd7f9c6*/\n return (*v3)(a1, a2, (char *)va); /*0xffd7f9d2*/\n }\n return result; /*0xffd7f9d7*/\n}","refs":[{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd8ad05","name":"sub_FFD8AD05"}]} \ No newline at end of file +int DebugPrint(int a1, int a2, ...) +{ + int result; // eax + int (__cdecl **v3)(int, int, char *); // esi + va_list va; // [esp+10h] [ebp+Ch] BYREF + + va_start(va, a2); + result = GetReportStatusCodePpi(); /*0xffd7f9b0*/ + v3 = (int (__cdecl **)(int, int, char *))result; /*0xffd7f9b5*/ + if ( result ) /*0xffd7f9b9*/ + { + result = sub_FFD8AD05(); /*0xffd7f9bb*/ + if ( (result & a1) != 0 ) /*0xffd7f9c6*/ + return (*v3)(a1, a2, (char *)va); /*0xffd7f9d2*/ + } + return result; /*0xffd7f9d7*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9d9.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9d9.c index 5ecead6..30f74cb 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9d9.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9d9.c @@ -1,2 +1,9 @@ -// 0xffd7f9d9 -{"addr":"0xffd7f9d9","code":"int __fastcall sub_FFD7F9D9(int a1, int a2, const char *PeiServices____((void__)_0))\n{\n int result; // eax\n\n result = GetReportStatusCodePpi(); /*0xffd7f9df*/\n if ( result ) /*0xffd7f9e6*/\n return (*(int (__cdecl **)(int, int, const char *))(result + 4))(a1, a2, PeiServices____((void__)_0)); /*0xffd7f9ee*/\n return result; /*0xffd7f9f4*/\n}","refs":[{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"}]} \ No newline at end of file +int __fastcall sub_FFD7F9D9(int a1, int a2, const char *PeiServices____((void__)_0)) +{ + int result; // eax + + result = GetReportStatusCodePpi(); /*0xffd7f9df*/ + if ( result ) /*0xffd7f9e6*/ + return (*(int (__cdecl **)(int, int, const char *))(result + 4))(a1, a2, PeiServices____((void__)_0)); /*0xffd7f9ee*/ + return result; /*0xffd7f9f4*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9f7.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9f7.c index e496bda..c47a75c 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9f7.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7f9f7.c @@ -1,2 +1,20 @@ -// 0xffd7f9f7 -{"addr":"0xffd7f9f7","code":"int __fastcall StallForTicks(unsigned int a1)\n{\n unsigned int v1; // esi\n int n0x400000; // edi\n int v3; // ebx\n int result; // eax\n\n v1 = a1 >> 22; /*0xffd7fa04*/\n n0x400000 = a1 & 0x3FFFFF; /*0xffd7fa07*/\n do /*0xffd7fa3f*/\n {\n v3 = n0x400000 + (sub_FFD8CD6B(1288) & 0xFFFFFF); /*0xffd7fa1c*/\n n0x400000 = 0x400000; /*0xffd7fa1e*/\n while ( ((v3 - sub_FFD8CD6B(1288)) & 0x800000) == 0 ) /*0xffd7fa38*/\n _mm_pause(); /*0xffd7fa25*/\n result = v1--; /*0xffd7fa3a*/\n }\n while ( result ); /*0xffd7fa3f*/\n return result; /*0xffd7fa41*/\n}"} +int __fastcall StallForTicks(unsigned int a1) +{ + unsigned int v1; // esi + int n0x400000; // edi + int v3; // ebx + int result; // eax + + v1 = a1 >> 22; /*0xffd7fa04*/ + n0x400000 = a1 & 0x3FFFFF; /*0xffd7fa07*/ + do /*0xffd7fa3f*/ + { + v3 = n0x400000 + (sub_FFD8CD6B(1288) & 0xFFFFFF); /*0xffd7fa1c*/ + n0x400000 = 0x400000; /*0xffd7fa1e*/ + while ( ((v3 - sub_FFD8CD6B(1288)) & 0x800000) == 0 ) /*0xffd7fa38*/ + _mm_pause(); /*0xffd7fa25*/ + result = v1--; /*0xffd7fa3a*/ + } + while ( result ); /*0xffd7fa3f*/ + return result; /*0xffd7fa41*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fa46.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fa46.c index bfa4b5d..0608b8d 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fa46.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fa46.c @@ -1,2 +1,11 @@ -// 0xffd7fa46 -{"addr":"0xffd7fa46","code":"unsigned int __fastcall StallMicroseconds(unsigned int a1)\n{\n unsigned int v2; // eax\n unsigned __int64 v3; // rtt\n\n v2 = (3579545 * (unsigned __int64)a1) >> 32; /*0xffd7fa6c*/\n LODWORD(v3) = 3579545 * a1; /*0xffd7fa7c*/\n HIDWORD(v3) = v2 % 0xF4240; /*0xffd7fa7c*/\n StallForTicks(v3 / 0xF4240, v2 / 0xF4240); /*0xffd7fa81*/\n return a1; /*0xffd7fa88*/\n}","refs":[{"addr":"0xffd7f9f7","name":"StallForTicks"}]} +unsigned int __fastcall StallMicroseconds(unsigned int a1) +{ + unsigned int v2; // eax + unsigned __int64 v3; // rtt + + v2 = (3579545 * (unsigned __int64)a1) >> 32; /*0xffd7fa6c*/ + LODWORD(v3) = 3579545 * a1; /*0xffd7fa7c*/ + HIDWORD(v3) = v2 % 0xF4240; /*0xffd7fa7c*/ + StallForTicks(v3 / 0xF4240, v2 / 0xF4240); /*0xffd7fa81*/ + return a1; /*0xffd7fa88*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fa8d.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fa8d.c index 98e9c05..bf02cb6 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fa8d.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fa8d.c @@ -1,2 +1,57 @@ -// 0xffd7fa8d -{"addr":"0xffd7fa8d","code":"int __fastcall GetPerformanceLogBuffer(int *a1, int *a2)\n{\n int v4; // eax\n int v5; // eax\n int v6; // eax\n int v7; // edi\n int v8; // eax\n int result; // eax\n int v10; // eax\n int v11; // eax\n\n if ( !a1 ) /*0xffd7fa9d*/\n {\n v4 = GetReportStatusCodePpi(); /*0xffd7fa9f*/\n if ( v4 ) /*0xffd7faa6*/\n (*(void (__cdecl **)(const char *, int, const char *))(v4 + 4))( /*0xffd7fab0*/\n \"e:\\\\hs\\\\MdeModulePkg\\\\Library\\\\PeiPerformanceLib\\\\PeiPerformanceLib.c\",\n 57,\n \"PeiPerformanceLog != ((void *) 0)\");\n }\n if ( !a2 ) /*0xffd7fab8*/\n {\n v5 = GetReportStatusCodePpi(); /*0xffd7faba*/\n if ( v5 ) /*0xffd7fac1*/\n (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd7facb*/\n \"e:\\\\hs\\\\MdeModulePkg\\\\Library\\\\PeiPerformanceLib\\\\PeiPerformanceLib.c\",\n 58,\n \"PeiPerformanceIdArray != ((void *) 0)\");\n }\n v6 = sub_FFD8CE7C(&unk_FFD97F9C); /*0xffd7fad8*/\n if ( v6 ) /*0xffd7fadf*/\n {\n *a1 = v6 + 24; /*0xffd7fae9*/\n v7 = sub_FFD8CE7C(&unk_FFD97ECC); /*0xffd7faf0*/\n if ( !v7 ) /*0xffd7faf4*/\n {\n v8 = GetReportStatusCodePpi(); /*0xffd7faf6*/\n if ( v8 ) /*0xffd7fafd*/\n (*(void (__cdecl **)(const char *, int, const char *))(v8 + 4))( /*0xffd7fb07*/\n \"e:\\\\hs\\\\MdeModulePkg\\\\Library\\\\PeiPerformanceLib\\\\PeiPerformanceLib.c\",\n 72,\n \"GuidHob != ((void *) 0)\");\n }\n result = v7 + 24; /*0xffd7fb0d*/\n }\n else\n {\n v10 = sub_FFD8CF46(&unk_FFD97F9C, 40008); /*0xffd7fb1b*/\n *a1 = v10; /*0xffd7fb22*/\n *a1 = sub_FFD8D4C8(v10, 40008); /*0xffd7fb2b*/\n v11 = sub_FFD8CF46(&unk_FFD97ECC, 4000); /*0xffd7fb39*/\n *a2 = v11; /*0xffd7fb40*/\n result = sub_FFD8D4C8(v11, 4000); /*0xffd7fb44*/\n }\n *a2 = result; /*0xffd7fb4a*/\n return result; /*0xffd7fb49*/\n}","refs":[{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd91a5c","name":"aEHsMdemodulepk","string":"e:\\hs\\MdeModulePkg\\Library\\PeiPerformanceLib\\PeiPerformanceLib.c"},{"addr":"0xffd91a38","name":"aPeiperformance","string":"PeiPerformanceLog != ((void *) 0)"},{"addr":"0xffd91aa0","name":"aPeiperformance_0","string":"PeiPerformanceIdArray != ((void *) 0)"},{"addr":"0xffd8ce7c","name":"sub_FFD8CE7C"},{"addr":"0xffd97f9c","name":"unk_FFD97F9C"},{"addr":"0xffd97ecc","name":"unk_FFD97ECC"},{"addr":"0xffd91ac8","name":"aGuidhobVoid0","string":"GuidHob != ((void *) 0)"},{"addr":"0xffd8cf46","name":"sub_FFD8CF46"},{"addr":"0xffd8d4c8","name":"sub_FFD8D4C8"}]} \ No newline at end of file +int __fastcall GetPerformanceLogBuffer(int *a1, int *a2) +{ + int v4; // eax + int v5; // eax + int v6; // eax + int v7; // edi + int v8; // eax + int result; // eax + int v10; // eax + int v11; // eax + + if ( !a1 ) /*0xffd7fa9d*/ + { + v4 = GetReportStatusCodePpi(); /*0xffd7fa9f*/ + if ( v4 ) /*0xffd7faa6*/ + (*(void (__cdecl **)(const char *, int, const char *))(v4 + 4))( /*0xffd7fab0*/ + "e:\\hs\\MdeModulePkg\\Library\\PeiPerformanceLib\\PeiPerformanceLib.c", + 57, + "PeiPerformanceLog != ((void *) 0)"); + } + if ( !a2 ) /*0xffd7fab8*/ + { + v5 = GetReportStatusCodePpi(); /*0xffd7faba*/ + if ( v5 ) /*0xffd7fac1*/ + (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd7facb*/ + "e:\\hs\\MdeModulePkg\\Library\\PeiPerformanceLib\\PeiPerformanceLib.c", + 58, + "PeiPerformanceIdArray != ((void *) 0)"); + } + v6 = sub_FFD8CE7C(&unk_FFD97F9C); /*0xffd7fad8*/ + if ( v6 ) /*0xffd7fadf*/ + { + *a1 = v6 + 24; /*0xffd7fae9*/ + v7 = sub_FFD8CE7C(&unk_FFD97ECC); /*0xffd7faf0*/ + if ( !v7 ) /*0xffd7faf4*/ + { + v8 = GetReportStatusCodePpi(); /*0xffd7faf6*/ + if ( v8 ) /*0xffd7fafd*/ + (*(void (__cdecl **)(const char *, int, const char *))(v8 + 4))( /*0xffd7fb07*/ + "e:\\hs\\MdeModulePkg\\Library\\PeiPerformanceLib\\PeiPerformanceLib.c", + 72, + "GuidHob != ((void *) 0)"); + } + result = v7 + 24; /*0xffd7fb0d*/ + } + else + { + v10 = sub_FFD8CF46(&unk_FFD97F9C, 40008); /*0xffd7fb1b*/ + *a1 = v10; /*0xffd7fb22*/ + *a1 = sub_FFD8D4C8(v10, 40008); /*0xffd7fb2b*/ + v11 = sub_FFD8CF46(&unk_FFD97ECC, 4000); /*0xffd7fb39*/ + *a2 = v11; /*0xffd7fb40*/ + result = sub_FFD8D4C8(v11, 4000); /*0xffd7fb44*/ + } + *a2 = result; /*0xffd7fb4a*/ + return result; /*0xffd7fb49*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fb51.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fb51.c index 6fd5251..9332fbe 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fb51.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fb51.c @@ -1,2 +1,33 @@ -// 0xffd7fb51 -{"addr":"0xffd7fb51","code":"int __thiscall FindLatestPerformanceEntry(unsigned int *this)\n{\n int v2; // esi\n unsigned int v3; // eax\n int v4; // ebx\n int v5; // ebp\n unsigned int v7; // [esp+8h] [ebp-4h]\n\n v2 = 0; /*0xffd7fb56*/\n v3 = *this; /*0xffd7fb58*/\n v7 = *this; /*0xffd7fb5a*/\n if ( *this ) /*0xffd7fb58*/\n {\n while ( 1 ) /*0xffd7fb68*/\n {\n v4 = v3 - v2 - 1; /*0xffd7fb68*/\n v5 = 40 * v4; /*0xffd7fb69*/\n if ( !*((_QWORD *)this + 5 * v4 + 5) /*0xffd7fba8*/\n && *(_UNKNOWN **)((char *)this + v5 + 8) == &unk_FFD97F8C\n && *(unsigned int *)((char *)this + v5 + 12) == (*(this + 10 * v4 + 11) | *(this + 10 * v4 + 10))\n && !sub_FFD8D0FF(7)\n && !sub_FFD8D0FF(7) )\n {\n break; /*0xffd7fba8*/\n }\n v3 = v7; /*0xffd7fbb2*/\n if ( ++v2 >= v7 ) /*0xffd7fbb9*/\n return v2; /*0xffd7fbb9*/\n }\n return v4; /*0xffd7fbbd*/\n }\n return v2; /*0xffd7fbc1*/\n}"} +int __thiscall FindLatestPerformanceEntry(unsigned int *this) +{ + int v2; // esi + unsigned int v3; // eax + int v4; // ebx + int v5; // ebp + unsigned int v7; // [esp+8h] [ebp-4h] + + v2 = 0; /*0xffd7fb56*/ + v3 = *this; /*0xffd7fb58*/ + v7 = *this; /*0xffd7fb5a*/ + if ( *this ) /*0xffd7fb58*/ + { + while ( 1 ) /*0xffd7fb68*/ + { + v4 = v3 - v2 - 1; /*0xffd7fb68*/ + v5 = 40 * v4; /*0xffd7fb69*/ + if ( !*((_QWORD *)this + 5 * v4 + 5) /*0xffd7fba8*/ + && *(_UNKNOWN **)((char *)this + v5 + 8) == &unk_FFD97F8C + && *(unsigned int *)((char *)this + v5 + 12) == (*(this + 10 * v4 + 11) | *(this + 10 * v4 + 10)) + && !sub_FFD8D0FF(7) + && !sub_FFD8D0FF(7) ) + { + break; /*0xffd7fba8*/ + } + v3 = v7; /*0xffd7fbb2*/ + if ( ++v2 >= v7 ) /*0xffd7fbb9*/ + return v2; /*0xffd7fbb9*/ + } + return v4; /*0xffd7fbbd*/ + } + return v2; /*0xffd7fbc1*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fbc7.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fbc7.c index f420a70..460b574 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fbc7.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fbc7.c @@ -1,2 +1,43 @@ -// 0xffd7fbc7 -{"addr":"0xffd7fbc7","code":"int __cdecl RecordPerformanceEntry(int a1, __int64 a2)\n{\n _DWORD *v2; // ecx\n int v3; // edx\n int v5; // edi\n int v6; // esi\n int v7; // eax\n int v8; // edx\n unsigned __int64 v9; // rax\n int v10; // [esp+8h] [ebp-8h] BYREF\n _DWORD *v11; // [esp+Ch] [ebp-4h] BYREF\n\n GetPerformanceLogBuffer((int *)&v11, &v10); /*0xffd7fbd4*/\n v2 = v11; /*0xffd7fbd9*/\n v3 = *v11; /*0xffd7fbdc*/\n if ( *v11 < 0x3E8u ) /*0xffd7fbe4*/\n {\n v5 = HIDWORD(a2); /*0xffd7fbfe*/\n v6 = 10 * v3; /*0xffd7fc04*/\n *v11 = v3 + 1; /*0xffd7fc07*/\n v2[v6 + 3] = 0; /*0xffd7fc0b*/\n v2[v6 + 10] = 0; /*0xffd7fc0f*/\n v2[v6 + 11] = 0; /*0xffd7fc13*/\n v7 = v10; /*0xffd7fc17*/\n v2[v6 + 2] = &unk_FFD97F8C; /*0xffd7fc1a*/\n *(_DWORD *)(v7 + 4 * v3) = 20704; /*0xffd7fc22*/\n v8 = a2; /*0xffd7fc29*/\n if ( !a2 ) /*0xffd7fc30*/\n {\n v9 = __rdtsc(); /*0xffd7fc32*/\n v5 = HIDWORD(v9); /*0xffd7fc34*/\n v8 = v9; /*0xffd7fc36*/\n }\n v2[v6 + 8] = v8; /*0xffd7fc38*/\n v2[v6 + 9] = v5; /*0xffd7fc3e*/\n return 0; /*0xffd7fc3c*/\n }\n else\n {\n DebugPrint(0x80000000, (int)\"PEI performance log array out of resources\\n\"); /*0xffd7fbf0*/\n return -2147483639; /*0xffd7fbf7*/\n }\n}","refs":[{"addr":"0xffd7fa8d","name":"GetPerformanceLogBuffer"},{"addr":"0xffd97f8c","name":"unk_FFD97F8C"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd91ae4","name":"aPeiPerformance","string":"PEI performance log array out of resources\n"}]} \ No newline at end of file +int __cdecl RecordPerformanceEntry(int a1, __int64 a2) +{ + _DWORD *v2; // ecx + int v3; // edx + int v5; // edi + int v6; // esi + int v7; // eax + int v8; // edx + unsigned __int64 v9; // rax + int v10; // [esp+8h] [ebp-8h] BYREF + _DWORD *v11; // [esp+Ch] [ebp-4h] BYREF + + GetPerformanceLogBuffer((int *)&v11, &v10); /*0xffd7fbd4*/ + v2 = v11; /*0xffd7fbd9*/ + v3 = *v11; /*0xffd7fbdc*/ + if ( *v11 < 0x3E8u ) /*0xffd7fbe4*/ + { + v5 = HIDWORD(a2); /*0xffd7fbfe*/ + v6 = 10 * v3; /*0xffd7fc04*/ + *v11 = v3 + 1; /*0xffd7fc07*/ + v2[v6 + 3] = 0; /*0xffd7fc0b*/ + v2[v6 + 10] = 0; /*0xffd7fc0f*/ + v2[v6 + 11] = 0; /*0xffd7fc13*/ + v7 = v10; /*0xffd7fc17*/ + v2[v6 + 2] = &unk_FFD97F8C; /*0xffd7fc1a*/ + *(_DWORD *)(v7 + 4 * v3) = 20704; /*0xffd7fc22*/ + v8 = a2; /*0xffd7fc29*/ + if ( !a2 ) /*0xffd7fc30*/ + { + v9 = __rdtsc(); /*0xffd7fc32*/ + v5 = HIDWORD(v9); /*0xffd7fc34*/ + v8 = v9; /*0xffd7fc36*/ + } + v2[v6 + 8] = v8; /*0xffd7fc38*/ + v2[v6 + 9] = v5; /*0xffd7fc3e*/ + return 0; /*0xffd7fc3c*/ + } + else + { + DebugPrint(0x80000000, (int)"PEI performance log array out of resources\n"); /*0xffd7fbf0*/ + return -2147483639; /*0xffd7fbf7*/ + } +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fc48.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fc48.c index 2be5f3c..c388ece 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fc48.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fc48.c @@ -1,2 +1,18 @@ -// 0xffd7fc48 -{"addr":"0xffd7fc48","code":"int __cdecl EndPerformanceMeasurement(int a1, unsigned __int64 a2)\n{\n unsigned __int64 v2; // kr00_8\n unsigned int *v3; // ebx\n unsigned int v4; // eax\n int v6; // [esp+Ch] [ebp-4h] BYREF\n\n v2 = a2; /*0xffd7fc54*/\n if ( !a2 ) /*0xffd7fc59*/\n v2 = __rdtsc(); /*0xffd7fc5f*/\n GetPerformanceLogBuffer((int *)&a2 + 1, &v6); /*0xffd7fc67*/\n v3 = (unsigned int *)HIDWORD(a2); /*0xffd7fc6c*/\n v4 = sub_FFD7FB51((unsigned int *)HIDWORD(a2)); /*0xffd7fc74*/\n if ( v4 >= *v3 ) /*0xffd7fc7e*/\n return -2147483634; /*0xffd7fc80*/\n *(_QWORD *)&v3[10 * v4 + 10] = v2; /*0xffd7fc8b*/\n return 0; /*0xffd7fc94*/\n}","refs":[{"addr":"0xffd7fa8d","name":"GetPerformanceLogBuffer"},{"addr":"0xffd7fb51","name":"sub_FFD7FB51"}]} \ No newline at end of file +int __cdecl EndPerformanceMeasurement(int a1, unsigned __int64 a2) +{ + unsigned __int64 v2; // kr00_8 + unsigned int *v3; // ebx + unsigned int v4; // eax + int v6; // [esp+Ch] [ebp-4h] BYREF + + v2 = a2; /*0xffd7fc54*/ + if ( !a2 ) /*0xffd7fc59*/ + v2 = __rdtsc(); /*0xffd7fc5f*/ + GetPerformanceLogBuffer((int *)&a2 + 1, &v6); /*0xffd7fc67*/ + v3 = (unsigned int *)HIDWORD(a2); /*0xffd7fc6c*/ + v4 = sub_FFD7FB51((unsigned int *)HIDWORD(a2)); /*0xffd7fc74*/ + if ( v4 >= *v3 ) /*0xffd7fc7e*/ + return -2147483634; /*0xffd7fc80*/ + *(_QWORD *)&v3[10 * v4 + 10] = v2; /*0xffd7fc8b*/ + return 0; /*0xffd7fc94*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fc9b.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fc9b.c index 7a71da9..147a500 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fc9b.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fc9b.c @@ -1,2 +1,37 @@ -// 0xffd7fc9b -{"addr":"0xffd7fc9b","code":"int SetTraceHubFwBar()\n{\n int v0; // eax\n int v2; // esi\n int v3; // eax\n int v4; // [esp+4h] [ebp-4h] BYREF\n\n sub_FFD8C2A0(0xEFu, 0x2234u, 4, &v4); /*0xffd7fcb0*/\n if ( v4 < 0 ) /*0xffd7fcbf*/\n {\n DebugPrint(0x80000000, (int)\"TraceHubBaseSet Error. DMIC.SRL is set.\\n\"); /*0xffd7fcc7*/\n v0 = GetReportStatusCodePpi(); /*0xffd7fcce*/\n if ( v0 ) /*0xffd7fcd5*/\n (*(void (__cdecl **)(const char *, int, const char *))(v0 + 4))( /*0xffd7fce3*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\Library\\\\PeiDxeSmmTraceHubInitLib\\\\PeiDxeSmmTraceHubInitLib.c\",\n 64,\n \"((BOOLEAN)(0==1))\");\n return -2147483645; /*0xffd7fcee*/\n }\n v2 = sub_FFD8CBBA(0, 31, 7); /*0xffd7fcfd*/\n if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v2) == 0xFFFF ) /*0xffd7fd0e*/\n {\n v3 = GetReportStatusCodePpi(); /*0xffd7fd10*/\n if ( v3 ) /*0xffd7fd17*/\n (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd7fd20*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\Library\\\\PeiDxeSmmTraceHubInitLib\\\\PeiDxeSmmTraceHubInitLib.c\",\n 74,\n \"((BOOLEAN)(0==1))\");\n return -2147483645; /*0xffd7fd20*/\n }\n *(_DWORD *)(v2 + 112) = -32768000; /*0xffd7fd2c*/\n *(_DWORD *)(v2 + 116) = 0; /*0xffd7fd2f*/\n sub_FFD8C497(4, -32768000); /*0xffd7fd40*/\n sub_FFD8C497(4, 0); /*0xffd7fd50*/\n sub_FFD8C5F6(255, 2); /*0xffd7fd63*/\n return 0; /*0xffd7fd6d*/\n}","refs":[{"addr":"0xffd8c2a0","name":"sub_FFD8C2A0"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd91b84","name":"aTracehubbasese","string":"TraceHubBaseSet Error. DMIC.SRL is set.\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd91b24","name":"aEHsPurleysktpk_0","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\Library\\PeiDxeSmmTraceHubInitLib\\PeiDxeSmmTraceHubInitLib.c"},{"addr":"0xffd91b10","name":"aBoolean01","string":"((BOOLEAN)(0==1))"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd8c497","name":"sub_FFD8C497"},{"addr":"0xffd8c5f6","name":"sub_FFD8C5F6"}]} \ No newline at end of file +int SetTraceHubFwBar() +{ + int v0; // eax + int v2; // esi + int v3; // eax + int v4; // [esp+4h] [ebp-4h] BYREF + + sub_FFD8C2A0(0xEFu, 0x2234u, 4, &v4); /*0xffd7fcb0*/ + if ( v4 < 0 ) /*0xffd7fcbf*/ + { + DebugPrint(0x80000000, (int)"TraceHubBaseSet Error. DMIC.SRL is set.\n"); /*0xffd7fcc7*/ + v0 = GetReportStatusCodePpi(); /*0xffd7fcce*/ + if ( v0 ) /*0xffd7fcd5*/ + (*(void (__cdecl **)(const char *, int, const char *))(v0 + 4))( /*0xffd7fce3*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\Library\\PeiDxeSmmTraceHubInitLib\\PeiDxeSmmTraceHubInitLib.c", + 64, + "((BOOLEAN)(0==1))"); + return -2147483645; /*0xffd7fcee*/ + } + v2 = sub_FFD8CBBA(0, 31, 7); /*0xffd7fcfd*/ + if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v2) == 0xFFFF ) /*0xffd7fd0e*/ + { + v3 = GetReportStatusCodePpi(); /*0xffd7fd10*/ + if ( v3 ) /*0xffd7fd17*/ + (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd7fd20*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\Library\\PeiDxeSmmTraceHubInitLib\\PeiDxeSmmTraceHubInitLib.c", + 74, + "((BOOLEAN)(0==1))"); + return -2147483645; /*0xffd7fd20*/ + } + *(_DWORD *)(v2 + 112) = -32768000; /*0xffd7fd2c*/ + *(_DWORD *)(v2 + 116) = 0; /*0xffd7fd2f*/ + sub_FFD8C497(4, -32768000); /*0xffd7fd40*/ + sub_FFD8C497(4, 0); /*0xffd7fd50*/ + sub_FFD8C5F6(255, 2); /*0xffd7fd63*/ + return 0; /*0xffd7fd6d*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fd72.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fd72.c index b514b96..7798dc7 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fd72.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd7fd72.c @@ -1,2 +1,57 @@ -// 0xffd7fd72 -{"addr":"0xffd7fd72","code":"int __fastcall TraceHubInitialize(char a1)\n{\n int v2; // esi\n int result; // eax\n unsigned int v4; // [esp+Ch] [ebp-4h] BYREF\n\n DebugPrint(64, (int)\"TraceHubInitialize() - Start\\n\"); /*0xffd7fd84*/\n sub_FFD8C909(&v4); /*0xffd7fd8c*/\n *(_BYTE *)(v4 + 1488) = 0; /*0xffd7fd9b*/\n v2 = sub_FFD8CBBA(0, 31, 7); /*0xffd7fdb0*/\n if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v2) == 0xFFFF ) /*0xffd7fdc1*/\n return DebugPrint(64, (int)\"TraceHubInitialize() - End. TraceHub device is not present \\n\"); /*0xffd7fdc8*/\n if ( (*(_DWORD *)(v2 + 4) & 2) != 0 ) /*0xffd7fdd2*/\n {\n DebugPrint(64, (int)\"TraceHubInitialize() - End. Early init done already \\n\"); /*0xffd7fdda*/\n DebugPrint(64, (int)\"TraceHubInitialize() - FW_LBAR = 0x%08x\\n\", *(_DWORD *)(v2 + 112)); /*0xffd7fde9*/\n DebugPrint(64, (int)\"TraceHubInitialize() - MTB_LBAR = 0x%08x\\n\", *(_DWORD *)(v2 + 16)); /*0xffd7fdfb*/\n DebugPrint(64, (int)\"TraceHubInitialize() - SW_LBAR = 0x%08x\\n\", *(_DWORD *)(v2 + 24)); /*0xffd7fe0d*/\n result = MEMORY[0xFE1000E0]; /*0xffd7fe1a*/\n if ( (MEMORY[0xFE1000E0] & 0x1000000) != 0 ) /*0xffd7fe21*/\n return DebugPrint(64, (int)\"TraceHubInitialize() - Trace Hub enabled due to SCRPD0.24\\n\"); /*0xffd7fe2c*/\n }\n else\n {\n DebugPrint(64, (int)\"TraceHubInitialize() - Setting MTB_BAR\\n\"); /*0xffd7fe37*/\n *(_DWORD *)(v2 + 16) = -32505856; /*0xffd7fe3e*/\n *(_DWORD *)(v2 + 20) = 0; /*0xffd7fe47*/\n *(_BYTE *)(v2 + 4) |= 2u; /*0xffd7fe4f*/\n if ( (MEMORY[0xFE1000E0] & 0x1000000) != 0 || a1 ) /*0xffd7fe62*/\n {\n MEMORY[0xFE1000CC] = 357000000; /*0xffd7fe91*/\n *(_BYTE *)(v2 + 4) = 0; /*0xffd7fe9c*/\n DebugPrint(64, (int)\"TraceHubInitialize() - Setting SW_BAR\\n\"); /*0xffd7fe9f*/\n *(_DWORD *)(v2 + 24) = -31457280; /*0xffd7fea9*/\n *(_DWORD *)(v2 + 28) = 0; /*0xffd7feb1*/\n DebugPrint(64, (int)\"TraceHubInitialize() - Setting FW_BAR\\n\"); /*0xffd7feb8*/\n SetTraceHubFwBar(); /*0xffd7febd*/\n DebugPrint(64, (int)\"TraceHubInitialize() - Enabling MSE and BME\\n\"); /*0xffd7fec8*/\n *(_BYTE *)(v2 + 4) |= 6u; /*0xffd7fed8*/\n DebugPrint(64, (int)\"TraceHubInitialize () Assigned BARs:\\n\"); /*0xffd7fedb*/\n DebugPrint(64, (int)\"TraceHubInitialize () FW_LBAR = 0x%08x\\n\", *(_DWORD *)(v2 + 112)); /*0xffd7feea*/\n DebugPrint(64, (int)\"TraceHubInitialize () MTB_LBAR = 0x%08x\\n\", *(_DWORD *)(v2 + 16)); /*0xffd7fefc*/\n DebugPrint(64, (int)\"TraceHubInitialize () SW_LBAR = 0x%08x\\n\", *(_DWORD *)(v2 + 24)); /*0xffd7ff0e*/\n return DebugPrint(64, (int)\"TraceHubInitialize () - End\\n\"); /*0xffd7ff1c*/\n }\n else\n {\n *(_BYTE *)(v2 + 4) = 0; /*0xffd7fe6a*/\n DebugPrint(64, (int)\"TraceHubInitialize() - Clearing MTB_BAR\\n\"); /*0xffd7fe6d*/\n *(_DWORD *)(v2 + 16) = 0; /*0xffd7fe78*/\n return DebugPrint( /*0xffd7fe7f*/\n 64,\n (int)\"TraceHubInitialize() - End. STT disconnected and Trace Hub requested to be disable\\n\");\n }\n }\n return result; /*0xffd7ff23*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd91bb0","name":"aTracehubinitia","string":"TraceHubInitialize() - Start\n"},{"addr":"0xffd8c909","name":"sub_FFD8C909"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd91bd0","name":"aTracehubinitia_0","string":"TraceHubInitialize() - End. TraceHub device is not present \n"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd91c10","name":"aTracehubinitia_1","string":"TraceHubInitialize() - End. Early init done already \n"},{"addr":"0xffd91c48","name":"aTracehubinitia_2","string":"TraceHubInitialize() - FW_LBAR = 0x%08x\n"},{"addr":"0xffd91c74","name":"aTracehubinitia_3","string":"TraceHubInitialize() - MTB_LBAR = 0x%08x\n"},{"addr":"0xffd91ca0","name":"aTracehubinitia_4","string":"TraceHubInitialize() - SW_LBAR = 0x%08x\n"},{"addr":"0xffd91ccc","name":"aTracehubinitia_5","string":"TraceHubInitialize() - Trace Hub enabled due to SCRPD0.24\n"},{"addr":"0xffd91d08","name":"aTracehubinitia_6","string":"TraceHubInitialize() - Setting MTB_BAR\n"},{"addr":"0xffd91db0","name":"aTracehubinitia_9","string":"TraceHubInitialize() - Setting SW_BAR\n"},{"addr":"0xffd91dd8","name":"aTracehubinitia_10","string":"TraceHubInitialize() - Setting FW_BAR\n"},{"addr":"0xffd7fc9b","name":"SetTraceHubFwBar"},{"addr":"0xffd91e00","name":"aTracehubinitia_11","string":"TraceHubInitialize() - Enabling MSE and BME\n"},{"addr":"0xffd91e30","name":"aTracehubinitia_12","string":"TraceHubInitialize () Assigned BARs:\n"},{"addr":"0xffd91e58","name":"aTracehubinitia_13","string":"TraceHubInitialize () FW_LBAR = 0x%08x\n"},{"addr":"0xffd91e84","name":"aTracehubinitia_14","string":"TraceHubInitialize () MTB_LBAR = 0x%08x\n"},{"addr":"0xffd91eb0","name":"aTracehubinitia_15","string":"TraceHubInitialize () SW_LBAR = 0x%08x\n"},{"addr":"0xffd91edc","name":"aTracehubinitia_16","string":"TraceHubInitialize () - End\n"},{"addr":"0xffd91d30","name":"aTracehubinitia_7","string":"TraceHubInitialize() - Clearing MTB_BAR\n"},{"addr":"0xffd91d5c","name":"aTracehubinitia_8","string":"TraceHubInitialize() - End. STT disconnected and Trace Hub requested to be disable\n"}]} \ No newline at end of file +int __fastcall TraceHubInitialize(char a1) +{ + int v2; // esi + int result; // eax + unsigned int v4; // [esp+Ch] [ebp-4h] BYREF + + DebugPrint(64, (int)"TraceHubInitialize() - Start\n"); /*0xffd7fd84*/ + sub_FFD8C909(&v4); /*0xffd7fd8c*/ + *(_BYTE *)(v4 + 1488) = 0; /*0xffd7fd9b*/ + v2 = sub_FFD8CBBA(0, 31, 7); /*0xffd7fdb0*/ + if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v2) == 0xFFFF ) /*0xffd7fdc1*/ + return DebugPrint(64, (int)"TraceHubInitialize() - End. TraceHub device is not present \n"); /*0xffd7fdc8*/ + if ( (*(_DWORD *)(v2 + 4) & 2) != 0 ) /*0xffd7fdd2*/ + { + DebugPrint(64, (int)"TraceHubInitialize() - End. Early init done already \n"); /*0xffd7fdda*/ + DebugPrint(64, (int)"TraceHubInitialize() - FW_LBAR = 0x%08x\n", *(_DWORD *)(v2 + 112)); /*0xffd7fde9*/ + DebugPrint(64, (int)"TraceHubInitialize() - MTB_LBAR = 0x%08x\n", *(_DWORD *)(v2 + 16)); /*0xffd7fdfb*/ + DebugPrint(64, (int)"TraceHubInitialize() - SW_LBAR = 0x%08x\n", *(_DWORD *)(v2 + 24)); /*0xffd7fe0d*/ + result = MEMORY[0xFE1000E0]; /*0xffd7fe1a*/ + if ( (MEMORY[0xFE1000E0] & 0x1000000) != 0 ) /*0xffd7fe21*/ + return DebugPrint(64, (int)"TraceHubInitialize() - Trace Hub enabled due to SCRPD0.24\n"); /*0xffd7fe2c*/ + } + else + { + DebugPrint(64, (int)"TraceHubInitialize() - Setting MTB_BAR\n"); /*0xffd7fe37*/ + *(_DWORD *)(v2 + 16) = -32505856; /*0xffd7fe3e*/ + *(_DWORD *)(v2 + 20) = 0; /*0xffd7fe47*/ + *(_BYTE *)(v2 + 4) |= 2u; /*0xffd7fe4f*/ + if ( (MEMORY[0xFE1000E0] & 0x1000000) != 0 || a1 ) /*0xffd7fe62*/ + { + MEMORY[0xFE1000CC] = 357000000; /*0xffd7fe91*/ + *(_BYTE *)(v2 + 4) = 0; /*0xffd7fe9c*/ + DebugPrint(64, (int)"TraceHubInitialize() - Setting SW_BAR\n"); /*0xffd7fe9f*/ + *(_DWORD *)(v2 + 24) = -31457280; /*0xffd7fea9*/ + *(_DWORD *)(v2 + 28) = 0; /*0xffd7feb1*/ + DebugPrint(64, (int)"TraceHubInitialize() - Setting FW_BAR\n"); /*0xffd7feb8*/ + SetTraceHubFwBar(); /*0xffd7febd*/ + DebugPrint(64, (int)"TraceHubInitialize() - Enabling MSE and BME\n"); /*0xffd7fec8*/ + *(_BYTE *)(v2 + 4) |= 6u; /*0xffd7fed8*/ + DebugPrint(64, (int)"TraceHubInitialize () Assigned BARs:\n"); /*0xffd7fedb*/ + DebugPrint(64, (int)"TraceHubInitialize () FW_LBAR = 0x%08x\n", *(_DWORD *)(v2 + 112)); /*0xffd7feea*/ + DebugPrint(64, (int)"TraceHubInitialize () MTB_LBAR = 0x%08x\n", *(_DWORD *)(v2 + 16)); /*0xffd7fefc*/ + DebugPrint(64, (int)"TraceHubInitialize () SW_LBAR = 0x%08x\n", *(_DWORD *)(v2 + 24)); /*0xffd7ff0e*/ + return DebugPrint(64, (int)"TraceHubInitialize () - End\n"); /*0xffd7ff1c*/ + } + else + { + *(_BYTE *)(v2 + 4) = 0; /*0xffd7fe6a*/ + DebugPrint(64, (int)"TraceHubInitialize() - Clearing MTB_BAR\n"); /*0xffd7fe6d*/ + *(_DWORD *)(v2 + 16) = 0; /*0xffd7fe78*/ + return DebugPrint( /*0xffd7fe7f*/ + 64, + (int)"TraceHubInitialize() - End. STT disconnected and Trace Hub requested to be disable\n"); + } + } + return result; /*0xffd7ff23*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80210.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80210.c index 4922d0e..a8b8a19 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80210.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80210.c @@ -1,2 +1,108 @@ -// 0xffd80210 -{"addr":"0xffd80210","code":"int PchFabricErrorCheck()\n{\n int v0; // eax\n int v1; // eax\n unsigned __int8 *v2; // esi\n int v3; // edi\n unsigned int i; // ebp\n unsigned int v5; // ecx\n unsigned int v6; // edx\n unsigned int v7; // ebx\n unsigned __int8 v8; // cl\n unsigned int v9; // ebx\n int v10; // ebx\n unsigned int v11; // eax\n int result; // eax\n int v13; // [esp+0h] [ebp-24h] BYREF\n int v14; // [esp+4h] [ebp-20h]\n int v15; // [esp+8h] [ebp-1Ch]\n _DWORD *v16; // [esp+Ch] [ebp-18h] BYREF\n int n10; // [esp+10h] [ebp-14h]\n int v18; // [esp+14h] [ebp-10h] BYREF\n int v19; // [esp+18h] [ebp-Ch] BYREF\n unsigned int v20; // [esp+1Ch] [ebp-8h]\n unsigned int v21; // [esp+20h] [ebp-4h]\n\n v13 = 0; /*0xffd80213*/\n v0 = sub_FFD8AD54(); /*0xffd80217*/\n if ( (*(int (__cdecl **)(int, int, _DWORD **))(*(_DWORD *)v0 + 76))(v0, 4, &v16) ) /*0xffd80226*/\n {\n v1 = GetReportStatusCodePpi(); /*0xffd80230*/\n if ( v1 ) /*0xffd80237*/\n (*(void (__cdecl **)(const char *, int, const char *))(v1 + 4))( /*0xffd80248*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchInitPreMem.c\",\n 456,\n \"Status == 0\");\n }\n *v16 = 0; /*0xffd80255*/\n v2 = (unsigned __int8 *)&unk_FFD980CC; /*0xffd80258*/\n v15 = 0; /*0xffd8025d*/\n n10 = 10; /*0xffd80263*/\n do\n {\n v3 = 0; /*0xffd8026b*/\n for ( i = 0; i < 0xC00; i += 512 )\n {\n v5 = 0; /*0xffd80272*/\n v6 = i + *((_DWORD *)v2 + 2); /*0xffd80274*/\n v14 = 0; /*0xffd80276*/\n v21 = v6; /*0xffd8027a*/\n if ( v2[v3 + 1] )\n {\n while ( 1 ) /*0xffd80288*/\n {\n v7 = v5; /*0xffd80288*/\n v8 = *v2; /*0xffd8028e*/\n v9 = v6 + 32 * v7; /*0xffd80294*/\n v20 = v9; /*0xffd8029b*/\n sub_FFD8C2A0(v8, v9, 4, &v18); /*0xffd8029f*/\n sub_FFD8C2A0(*v2, v9, 4, &v19); /*0xffd802b0*/\n v10 = v18; /*0xffd802b5*/\n if ( v18 == v19 ) /*0xffd802c0*/\n {\n v13 = v18; /*0xffd802dd*/\n }\n else\n {\n sub_FFD8C2A0(*v2, v20, 4, &v13); /*0xffd802d0*/\n v10 = v13; /*0xffd802d5*/\n }\n if ( v10 ) /*0xffd802e3*/\n break; /*0xffd802e3*/\n v11 = v2[v3 + 1]; /*0xffd802e9*/\n v5 = v14 + 1; /*0xffd802ee*/\n v6 = v21; /*0xffd802ef*/\n v14 = v5; /*0xffd802f3*/\n if ( v5 >= v11 ) /*0xffd802f9*/\n goto LABEL_14; /*0xffd802f9*/\n }\n *v16 |= (v10 & 7) << v15; /*0xffd80311*/\n DebugPrint(0x80000000, (int)\"ERROR: Internal fabric error detected!! \");\n DebugPrint( /*0xffd80331*/\n 0x80000000,\n (int)\"PSF PID:0x%x, RSx/PortGroup:0x%x, Port:0x%x, Channel:0, error bits:0x%x\\n\",\n *v2,\n v3,\n v14,\n v10);\n }\nLABEL_14:\n ++v3; /*0xffd8033f*/\n }\n v15 += 3; /*0xffd8034c*/\n v2 += 12; /*0xffd80351*/\n --n10; /*0xffd80354*/\n }\n while ( n10 );\n result = sub_FFD8CFB4(&unk_FFD97F6C, 4); /*0xffd8036a*/\n if ( !result ) /*0xffd80376*/\n {\n result = GetReportStatusCodePpi(); /*0xffd80378*/\n if ( result ) /*0xffd8037f*/\n return (*(int (__cdecl **)(const char *, int, const char *))(result + 4))( /*0xffd80390*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchInitPreMem.c\",\n 504,\n \"HobPtr != 0\");\n }\n return result; /*0xffd80396*/\n}","refs":[{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd91f24","name":"aEHsPurleysktpk_1","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c"},{"addr":"0xffd9204c","name":"aStatus0","string":"Status == 0"},{"addr":"0xffd980cc","name":"unk_FFD980CC"},{"addr":"0xffd8c2a0","name":"sub_FFD8C2A0"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd92058","name":"aErrorInternalF","string":"ERROR: Internal fabric error detected!! "},{"addr":"0xffd92084","name":"aPsfPid0xXRsxPo","string":"PSF PID:0x%x, RSx/PortGroup:0x%x, Port:0x%x, Channel:0, error bits:0x%x\n"},{"addr":"0xffd8cfb4","name":"sub_FFD8CFB4"},{"addr":"0xffd97f6c","name":"unk_FFD97F6C"},{"addr":"0xffd920d0","name":"aHobptr0","string":"HobPtr != 0"}]} \ No newline at end of file +int PchFabricErrorCheck() +{ + int v0; // eax + int v1; // eax + unsigned __int8 *v2; // esi + int v3; // edi + unsigned int i; // ebp + unsigned int v5; // ecx + unsigned int v6; // edx + unsigned int v7; // ebx + unsigned __int8 v8; // cl + unsigned int v9; // ebx + int v10; // ebx + unsigned int v11; // eax + int result; // eax + int v13; // [esp+0h] [ebp-24h] BYREF + int v14; // [esp+4h] [ebp-20h] + int v15; // [esp+8h] [ebp-1Ch] + _DWORD *v16; // [esp+Ch] [ebp-18h] BYREF + int n10; // [esp+10h] [ebp-14h] + int v18; // [esp+14h] [ebp-10h] BYREF + int v19; // [esp+18h] [ebp-Ch] BYREF + unsigned int v20; // [esp+1Ch] [ebp-8h] + unsigned int v21; // [esp+20h] [ebp-4h] + + v13 = 0; /*0xffd80213*/ + v0 = sub_FFD8AD54(); /*0xffd80217*/ + if ( (*(int (__cdecl **)(int, int, _DWORD **))(*(_DWORD *)v0 + 76))(v0, 4, &v16) ) /*0xffd80226*/ + { + v1 = GetReportStatusCodePpi(); /*0xffd80230*/ + if ( v1 ) /*0xffd80237*/ + (*(void (__cdecl **)(const char *, int, const char *))(v1 + 4))( /*0xffd80248*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c", + 456, + "Status == 0"); + } + *v16 = 0; /*0xffd80255*/ + v2 = (unsigned __int8 *)&unk_FFD980CC; /*0xffd80258*/ + v15 = 0; /*0xffd8025d*/ + n10 = 10; /*0xffd80263*/ + do + { + v3 = 0; /*0xffd8026b*/ + for ( i = 0; i < 0xC00; i += 512 ) + { + v5 = 0; /*0xffd80272*/ + v6 = i + *((_DWORD *)v2 + 2); /*0xffd80274*/ + v14 = 0; /*0xffd80276*/ + v21 = v6; /*0xffd8027a*/ + if ( v2[v3 + 1] ) + { + while ( 1 ) /*0xffd80288*/ + { + v7 = v5; /*0xffd80288*/ + v8 = *v2; /*0xffd8028e*/ + v9 = v6 + 32 * v7; /*0xffd80294*/ + v20 = v9; /*0xffd8029b*/ + sub_FFD8C2A0(v8, v9, 4, &v18); /*0xffd8029f*/ + sub_FFD8C2A0(*v2, v9, 4, &v19); /*0xffd802b0*/ + v10 = v18; /*0xffd802b5*/ + if ( v18 == v19 ) /*0xffd802c0*/ + { + v13 = v18; /*0xffd802dd*/ + } + else + { + sub_FFD8C2A0(*v2, v20, 4, &v13); /*0xffd802d0*/ + v10 = v13; /*0xffd802d5*/ + } + if ( v10 ) /*0xffd802e3*/ + break; /*0xffd802e3*/ + v11 = v2[v3 + 1]; /*0xffd802e9*/ + v5 = v14 + 1; /*0xffd802ee*/ + v6 = v21; /*0xffd802ef*/ + v14 = v5; /*0xffd802f3*/ + if ( v5 >= v11 ) /*0xffd802f9*/ + goto LABEL_14; /*0xffd802f9*/ + } + *v16 |= (v10 & 7) << v15; /*0xffd80311*/ + DebugPrint(0x80000000, (int)"ERROR: Internal fabric error detected!! "); + DebugPrint( /*0xffd80331*/ + 0x80000000, + (int)"PSF PID:0x%x, RSx/PortGroup:0x%x, Port:0x%x, Channel:0, error bits:0x%x\n", + *v2, + v3, + v14, + v10); + } +LABEL_14: + ++v3; /*0xffd8033f*/ + } + v15 += 3; /*0xffd8034c*/ + v2 += 12; /*0xffd80351*/ + --n10; /*0xffd80354*/ + } + while ( n10 ); + result = sub_FFD8CFB4(&unk_FFD97F6C, 4); /*0xffd8036a*/ + if ( !result ) /*0xffd80376*/ + { + result = GetReportStatusCodePpi(); /*0xffd80378*/ + if ( result ) /*0xffd8037f*/ + return (*(int (__cdecl **)(const char *, int, const char *))(result + 4))( /*0xffd80390*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c", + 504, + "HobPtr != 0"); + } + return result; /*0xffd80396*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8040b.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8040b.c index ed10d18..15a2146 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8040b.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8040b.c @@ -1,2 +1,21 @@ -// 0xffd8040b -{"addr":"0xffd8040b","code":"int __thiscall sub_FFD8040B(_BYTE *this)\n{\n int v3; // [esp+8h] [ebp-8h] BYREF\n\n sub_FFD8C578(-983041, 0); /*0xffd80425*/\n if ( (*(this + 3504) & 1) != 0 ) /*0xffd80434*/\n {\n sub_FFD8C578(-1, 16); /*0xffd8047a*/\nLABEL_6:\n MEMORY[0xFE0005D0] = 0x80000000; /*0xffd80481*/\n return sub_FFD8C578(-1, 1); /*0xffd80481*/\n }\n if ( (*(this + 3504) & 2) != 0 ) /*0xffd8043d*/\n {\n sub_FFD8C2A0(0xB8u, 4u, 4, &v3); /*0xffd8044a*/\n if ( (v3 & 0x600) != 0 ) /*0xffd8045d*/\n goto LABEL_6; /*0xffd8045d*/\n }\n sub_FFD8C578(-17, 1); /*0xffd80468*/\n return sub_FFD8C578(-1, 1); /*0xffd8049b*/\n}","refs":[{"addr":"0xffd8c578","name":"sub_FFD8C578"},{"addr":"0xffd8c2a0","name":"sub_FFD8C2A0"}]} \ No newline at end of file +int __thiscall sub_FFD8040B(_BYTE *this) +{ + int v3; // [esp+8h] [ebp-8h] BYREF + + sub_FFD8C578(-983041, 0); /*0xffd80425*/ + if ( (*(this + 3504) & 1) != 0 ) /*0xffd80434*/ + { + sub_FFD8C578(-1, 16); /*0xffd8047a*/ +LABEL_6: + MEMORY[0xFE0005D0] = 0x80000000; /*0xffd80481*/ + return sub_FFD8C578(-1, 1); /*0xffd80481*/ + } + if ( (*(this + 3504) & 2) != 0 ) /*0xffd8043d*/ + { + sub_FFD8C2A0(0xB8u, 4u, 4, &v3); /*0xffd8044a*/ + if ( (v3 & 0x600) != 0 ) /*0xffd8045d*/ + goto LABEL_6; /*0xffd8045d*/ + } + sub_FFD8C578(-17, 1); /*0xffd80468*/ + return sub_FFD8C578(-1, 1); /*0xffd8049b*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd804a1.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd804a1.c index 0d025fd..4d603ce 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd804a1.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd804a1.c @@ -1,2 +1,23 @@ -// 0xffd804a1 -{"addr":"0xffd804a1","code":"int __thiscall PchMiscInit(_BYTE *this)\n{\n int v2; // eax\n\n if ( (unsigned __int8)sub_FFD8D59A() )\n {\n DebugPrint(64, (int)\"DWR: PchMiscInit() End\\n\");\n }\n else\n {\n sub_FFD8BE68(); /*0xffd804c0*/\n v2 = sub_FFD8CBBA(0, 31, 2); /*0xffd804ce*/\n *(_DWORD *)(v2 + 172) &= ~0x100000u; /*0xffd804e5*/\n if ( *(this + 1) ) /*0xffd804f0*/\n sub_FFD8C5F6(255, 8); /*0xffd80506*/\n else\n sub_FFD8C5F6(247, 0); /*0xffd804fd*/\n sub_FFD8C578(-1793, 8207); /*0xffd80521*/\n sub_FFD8C578(-1, 0x80000000); /*0xffd80535*/\n sub_FFD8C5F6(223, 0); /*0xffd80556*/\n }\n return 0; /*0xffd8055d*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd92134","name":"aDwrPchmiscinit","string":"DWR: PchMiscInit() End\n"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8c5f6","name":"sub_FFD8C5F6"},{"addr":"0xffd8c578","name":"sub_FFD8C578"},{"addr":"0xffd8d59a","name":"sub_FFD8D59A"}]} \ No newline at end of file +int __thiscall PchMiscInit(_BYTE *this) +{ + int v2; // eax + + if ( (unsigned __int8)sub_FFD8D59A() ) + { + DebugPrint(64, (int)"DWR: PchMiscInit() End\n"); + } + else + { + sub_FFD8BE68(); /*0xffd804c0*/ + v2 = sub_FFD8CBBA(0, 31, 2); /*0xffd804ce*/ + *(_DWORD *)(v2 + 172) &= ~0x100000u; /*0xffd804e5*/ + if ( *(this + 1) ) /*0xffd804f0*/ + sub_FFD8C5F6(255, 8); /*0xffd80506*/ + else + sub_FFD8C5F6(247, 0); /*0xffd804fd*/ + sub_FFD8C578(-1793, 8207); /*0xffd80521*/ + sub_FFD8C578(-1, 0x80000000); /*0xffd80535*/ + sub_FFD8C5F6(223, 0); /*0xffd80556*/ + } + return 0; /*0xffd8055d*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80563.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80563.c index 16a9a88..2b4752b 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80563.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80563.c @@ -1,2 +1,20 @@ -// 0xffd80563 -{"addr":"0xffd80563","code":"int __thiscall sub_FFD80563(int this)\n{\n int v2; // ebx\n unsigned int v3; // esi\n\n v2 = sub_FFD8CBBA(0, 31, 1); /*0xffd80574*/\n if ( (*(_DWORD *)(this + 2727) & 2) != 0 ) /*0xffd8057f*/\n sub_FFD8CCD3( /*0xffd805aa*/\n v2 + 112,\n (*(_DWORD *)(this + 2727) >> 21) & 7\n | (unsigned __int16)(8 * ((32 * *(unsigned __int8 *)(this + 2728)) | HIWORD(*(_DWORD *)(this + 2727)) & 0x1F)));\n v3 = *(_DWORD *)(this + 2731); /*0xffd805af*/\n if ( !v3 ) /*0xffd805b7*/\n v3 = -19922944; /*0xffd805b9*/\n *(_BYTE *)(v2 + 96) = *(_BYTE *)(v2 + 96) & 0xFC | (v3 >> 12) & 3 | 0x80; /*0xffd805d0*/\n if ( (*(_BYTE *)(this + 2727) & 1) != 0 ) /*0xffd805dd*/\n *(_DWORD *)(v3 + 16) |= 1u; /*0xffd805e5*/\n sub_FFD8CF04(v3, 0); /*0xffd805ed*/\n return sub_FFD8D005(v3, 0); /*0xffd805ff*/\n}","refs":[{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8ccd3","name":"sub_FFD8CCD3"},{"addr":"0xffd8cf04","name":"sub_FFD8CF04"},{"addr":"0xffd8d005","name":"sub_FFD8D005"}]} \ No newline at end of file +int __thiscall sub_FFD80563(int this) +{ + int v2; // ebx + unsigned int v3; // esi + + v2 = sub_FFD8CBBA(0, 31, 1); /*0xffd80574*/ + if ( (*(_DWORD *)(this + 2727) & 2) != 0 ) /*0xffd8057f*/ + sub_FFD8CCD3( /*0xffd805aa*/ + v2 + 112, + (*(_DWORD *)(this + 2727) >> 21) & 7 + | (unsigned __int16)(8 * ((32 * *(unsigned __int8 *)(this + 2728)) | HIWORD(*(_DWORD *)(this + 2727)) & 0x1F))); + v3 = *(_DWORD *)(this + 2731); /*0xffd805af*/ + if ( !v3 ) /*0xffd805b7*/ + v3 = -19922944; /*0xffd805b9*/ + *(_BYTE *)(v2 + 96) = *(_BYTE *)(v2 + 96) & 0xFC | (v3 >> 12) & 3 | 0x80; /*0xffd805d0*/ + if ( (*(_BYTE *)(this + 2727) & 1) != 0 ) /*0xffd805dd*/ + *(_DWORD *)(v3 + 16) |= 1u; /*0xffd805e5*/ + sub_FFD8CF04(v3, 0); /*0xffd805ed*/ + return sub_FFD8D005(v3, 0); /*0xffd805ff*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80603.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80603.c index fc80c01..8cecebc 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80603.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80603.c @@ -1,2 +1,33 @@ -// 0xffd80603 -{"addr":"0xffd80603","code":"int __thiscall ProgramSvidSid(int this)\n{\n unsigned __int8 n0x2C; // bl\n int v3; // ecx\n unsigned __int16 *v4; // edi\n unsigned __int8 v6; // [esp+Fh] [ebp-1h]\n\n DebugPrint(64, (int)\"ProgramSvidSid() Start\\n\"); /*0xffd80613*/\n sub_FFD8BE68(); /*0xffd8061a*/\n if ( (unsigned __int8)sub_FFD8D59A() )\n {\n DebugPrint(64, (int)\"DWR: ProgramSvidSid() End\\n\");\n }\n else\n {\n n0x2C = 0; /*0xffd8062f*/\n if ( *(_WORD *)(this + 8) || *(_WORD *)(this + 10) ) /*0xffd80637*/\n {\n do /*0xffd80693*/\n {\n v3 = 3 * n0x2C; /*0xffd80640*/\n v6 = byte_FFD97FFE[v3]; /*0xffd80658*/\n v4 = (unsigned __int16 *)sub_FFD8CBBA(0, byte_FFD97FFC[v3], byte_FFD97FFD[v3]); /*0xffd80667*/\n if ( (unsigned __int16)sub_FFD8CCA5(v4) == 0x8086 ) /*0xffd80678*/\n *(_DWORD *)((char *)v4 + v6) = *(_DWORD *)(this + 8); /*0xffd8068b*/\n ++n0x2C; /*0xffd8068e*/\n }\n while ( n0x2C < 0x2Cu ); /*0xffd80693*/\n }\n DebugPrint(64, (int)\"ProgramSvidSid() End\\n\"); /*0xffd8069c*/\n }\n return 0; /*0xffd806a3*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd9214c","name":"aProgramsvidsid","string":"ProgramSvidSid() Start\n"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd92164","name":"aDwrProgramsvid","string":"DWR: ProgramSvidSid() End\n"},{"addr":"0xffd97ffe","name":"byte_FFD97FFE"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd97ffc","name":"byte_FFD97FFC"},{"addr":"0xffd97ffd","name":"byte_FFD97FFD"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd92180","name":"aProgramsvidsid_0","string":"ProgramSvidSid() End\n"},{"addr":"0xffd8d59a","name":"sub_FFD8D59A"}]} \ No newline at end of file +int __thiscall ProgramSvidSid(int this) +{ + unsigned __int8 n0x2C; // bl + int v3; // ecx + unsigned __int16 *v4; // edi + unsigned __int8 v6; // [esp+Fh] [ebp-1h] + + DebugPrint(64, (int)"ProgramSvidSid() Start\n"); /*0xffd80613*/ + sub_FFD8BE68(); /*0xffd8061a*/ + if ( (unsigned __int8)sub_FFD8D59A() ) + { + DebugPrint(64, (int)"DWR: ProgramSvidSid() End\n"); + } + else + { + n0x2C = 0; /*0xffd8062f*/ + if ( *(_WORD *)(this + 8) || *(_WORD *)(this + 10) ) /*0xffd80637*/ + { + do /*0xffd80693*/ + { + v3 = 3 * n0x2C; /*0xffd80640*/ + v6 = byte_FFD97FFE[v3]; /*0xffd80658*/ + v4 = (unsigned __int16 *)sub_FFD8CBBA(0, byte_FFD97FFC[v3], byte_FFD97FFD[v3]); /*0xffd80667*/ + if ( (unsigned __int16)sub_FFD8CCA5(v4) == 0x8086 ) /*0xffd80678*/ + *(_DWORD *)((char *)v4 + v6) = *(_DWORD *)(this + 8); /*0xffd8068b*/ + ++n0x2C; /*0xffd8068e*/ + } + while ( n0x2C < 0x2Cu ); /*0xffd80693*/ + } + DebugPrint(64, (int)"ProgramSvidSid() End\n"); /*0xffd8069c*/ + } + return 0; /*0xffd806a3*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd806ac.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd806ac.c index c3e8f3e..e1e0e45 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd806ac.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd806ac.c @@ -1,2 +1,52 @@ -// 0xffd806ac -{"addr":"0xffd806ac","code":"int __thiscall sub_FFD806AC(char *this)\n{\n char *this_1; // ebx\n unsigned int v2; // ebp\n int v3; // eax\n unsigned int n3; // esi\n unsigned int v5; // edi\n _DWORD *v6; // ebx\n int v7; // edx\n int v10; // [esp+18h] [ebp-Ch]\n int v11; // [esp+1Ch] [ebp-8h]\n int v12; // [esp+20h] [ebp-4h]\n\n v10 = 0; /*0xffd806b9*/\n this_1 = this; /*0xffd806ba*/\n v11 = 0; /*0xffd806c0*/\n v12 = 0; /*0xffd806c1*/\n v2 = (unsigned __int8)sub_FFD8BFFD(); /*0xffd806c7*/\n if ( (v2 & 0xFFFFFFF8) > 0x18 ) /*0xffd806d2*/\n {\n v3 = GetReportStatusCodePpi(); /*0xffd806d4*/\n if ( v3 ) /*0xffd806db*/\n (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd806ec*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchInitPreMem.c\",\n 958,\n \"(MaxPciePortNum / 8) <= 3\");\n }\n n3 = 0; /*0xffd806f2*/\n v5 = 0; /*0xffd806f4*/\n if ( v2 ) /*0xffd806f8*/\n {\n v6 = this_1 + 28; /*0xffd806fa*/\n do /*0xffd8072a*/\n {\n if ( (*v6 & 0x800) != 0 ) /*0xffd80705*/\n v7 = (unsigned __int16)*v6 >> 12; /*0xffd8070a*/\n else\n v7 = 0; /*0xffd8070f*/\n v6 += 25; /*0xffd8071e*/\n *(&v10 + (v5 >> 3)) |= v7 << (4 * (v5 & 7)); /*0xffd80723*/\n ++v5; /*0xffd80727*/\n }\n while ( v5 < v2 ); /*0xffd8072a*/\n this_1 = this; /*0xffd8072c*/\n }\n v12 |= (*(_DWORD *)(this_1 + 2755) & 0xFFFFFF80) << 21; /*0xffd80747*/\n DebugPrint(64, (int)\"DRCRM: 0x%08x 0x%08x 0x%08x\\n\", v10, v11, v12);\n do /*0xffd80779*/\n sub_FFD8C497(4, *(&v10 + n3++)); /*0xffd8076e*/\n while ( n3 < 3 ); /*0xffd80779*/\n return sub_FFD8C578(-1, -2147254272); /*0xffd8078e*/\n}","refs":[{"addr":"0xffd8bffd","name":"sub_FFD8BFFD"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd91f24","name":"aEHsPurleysktpk_1","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c"},{"addr":"0xffd92198","name":"aMaxpcieportnum","string":"(MaxPciePortNum / 8) <= 3"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd921b4","name":"aDrcrm0x08x0x08","string":"DRCRM: 0x%08x 0x%08x 0x%08x\n"},{"addr":"0xffd8c497","name":"sub_FFD8C497"},{"addr":"0xffd8c578","name":"sub_FFD8C578"}]} \ No newline at end of file +int __thiscall sub_FFD806AC(char *this) +{ + char *this_1; // ebx + unsigned int v2; // ebp + int v3; // eax + unsigned int n3; // esi + unsigned int v5; // edi + _DWORD *v6; // ebx + int v7; // edx + int v10; // [esp+18h] [ebp-Ch] + int v11; // [esp+1Ch] [ebp-8h] + int v12; // [esp+20h] [ebp-4h] + + v10 = 0; /*0xffd806b9*/ + this_1 = this; /*0xffd806ba*/ + v11 = 0; /*0xffd806c0*/ + v12 = 0; /*0xffd806c1*/ + v2 = (unsigned __int8)sub_FFD8BFFD(); /*0xffd806c7*/ + if ( (v2 & 0xFFFFFFF8) > 0x18 ) /*0xffd806d2*/ + { + v3 = GetReportStatusCodePpi(); /*0xffd806d4*/ + if ( v3 ) /*0xffd806db*/ + (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd806ec*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c", + 958, + "(MaxPciePortNum / 8) <= 3"); + } + n3 = 0; /*0xffd806f2*/ + v5 = 0; /*0xffd806f4*/ + if ( v2 ) /*0xffd806f8*/ + { + v6 = this_1 + 28; /*0xffd806fa*/ + do /*0xffd8072a*/ + { + if ( (*v6 & 0x800) != 0 ) /*0xffd80705*/ + v7 = (unsigned __int16)*v6 >> 12; /*0xffd8070a*/ + else + v7 = 0; /*0xffd8070f*/ + v6 += 25; /*0xffd8071e*/ + *(&v10 + (v5 >> 3)) |= v7 << (4 * (v5 & 7)); /*0xffd80723*/ + ++v5; /*0xffd80727*/ + } + while ( v5 < v2 ); /*0xffd8072a*/ + this_1 = this; /*0xffd8072c*/ + } + v12 |= (*(_DWORD *)(this_1 + 2755) & 0xFFFFFF80) << 21; /*0xffd80747*/ + DebugPrint(64, (int)"DRCRM: 0x%08x 0x%08x 0x%08x\n", v10, v11, v12); + do /*0xffd80779*/ + sub_FFD8C497(4, *(&v10 + n3++)); /*0xffd8076e*/ + while ( n3 < 3 ); /*0xffd80779*/ + return sub_FFD8C578(-1, -2147254272); /*0xffd8078e*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80796.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80796.c index 8939210..45b2eca 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80796.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80796.c @@ -1,2 +1,42 @@ -// 0xffd80796 -{"addr":"0xffd80796","code":"// positive sp value has been detected, the output may be wrong!\nint __thiscall sub_FFD80796(int this)\n{\n int v2; // ebx\n int v3; // esi\n int v4; // ebp\n int v5; // eax\n int v6; // eax\n int v7; // eax\n int v8; // eax\n int v9; // eax\n int v10; // eax\n int v11; // eax\n int v12; // eax\n bool v13; // zf\n char v14; // bl\n _BYTE *v15; // eax\n int n3; // ecx\n int v17; // edx\n int v18; // eax\n int v19; // edx\n int v20; // eax\n int v21; // eax\n int v22; // eax\n int v23; // eax\n int v24; // eax\n int v25; // eax\n int v26; // eax\n int v27; // eax\n int v28; // ecx\n _DWORD v30[3]; // [esp+4h] [ebp-14h] BYREF\n int v31; // [esp+10h] [ebp-8h] BYREF\n\n DebugPrint(64, (int)\"PchOnPolicyInstalled() - Start\\n\"); /*0xffd807ab*/\n v2 = sub_FFD8CBBA(0, 31, 0); /*0xffd807c1*/\n v3 = sub_FFD8CBBA(0, 31, 2); /*0xffd807d5*/\n v4 = sub_FFD8CBBA(0, 31, 5); /*0xffd807e1*/\n v5 = sub_FFD8C632(*(_WORD *)(this + 2)); /*0xffd807e3*/\n if ( v5 < 0 ) /*0xffd807ea*/\n {\n DebugPrint(0x8000... [6904 chars total]","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd921d4","name":"aPchonpolicyins","string":"PchOnPolicyInstalled() - Start\n"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8c632","name":"sub_FFD8C632"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd91f24","name":"aEHsPurleysktpk_1","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffd8c80a","name":"sub_FFD8C80A"},{"addr":"0xffd94584","name":"aWdtUsageMismat","string":"(WDT) Usage mismatched with policy\n"}]}Output truncated. Run: curl -o .ida-mcp/8ab907f0-29ca-41a0-9d6b-fa48fe5810b5.json http://127.0.0.1:13432/output/8ab907f0-29ca-41a0-9d6b-fa48fe5810b5.json \ No newline at end of file +// positive sp value has been detected, the output may be wrong! +int __thiscall sub_FFD80796(int this) +{ + int v2; // ebx + int v3; // esi + int v4; // ebp + int v5; // eax + int v6; // eax + int v7; // eax + int v8; // eax + int v9; // eax + int v10; // eax + int v11; // eax + int v12; // eax + bool v13; // zf + char v14; // bl + _BYTE *v15; // eax + int n3; // ecx + int v17; // edx + int v18; // eax + int v19; // edx + int v20; // eax + int v21; // eax + int v22; // eax + int v23; // eax + int v24; // eax + int v25; // eax + int v26; // eax + int v27; // eax + int v28; // ecx + _DWORD v30[3]; // [esp+4h] [ebp-14h] BYREF + int v31; // [esp+10h] [ebp-8h] BYREF + + DebugPrint(64, (int)"PchOnPolicyInstalled() - Start\ +"); /*0xffd807ab*/ + v2 = sub_FFD8CBBA(0, 31, 0); /*0xffd807c1*/ + v3 = sub_FFD8CBBA(0, 31, 2); /*0xffd807d5*/ + v4 = sub_FFD8CBBA(0, 31, 5); /*0xffd807e1*/ + v5 = sub_FFD8C632(*(_WORD *)(this + 2)); /*0xffd807e3*/ + if ( v5 < 0 ) /*0xffd807ea*/ + { + DebugPrint(0x8000... [6904 chars total] diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80ba6.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80ba6.c index aed64d4..0b18d21 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80ba6.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd80ba6.c @@ -1,2 +1,33 @@ -// 0xffd80ba6 -{"addr":"0xffd80ba6","code":"int __thiscall PchEarlyDisabledDeviceHandling(int *this)\n{\n int v2; // esi\n int v3; // edi\n int v4; // ebx\n int v5; // ebp\n int n2_1; // ebx\n int v7; // ebx\n __int16 v8; // si\n int v9; // ebx\n int v10; // eax\n int v11; // eax\n int v12; // eax\n int v14; // [esp+10h] [ebp-54h] BYREF\n int v15; // [esp+14h] [ebp-50h] BYREF\n int v16; // [esp+18h] [ebp-4Ch] BYREF\n int n2; // [esp+1Ch] [ebp-48h]\n int v18; // [esp+20h] [ebp-44h] BYREF\n int v19; // [esp+24h] [ebp-40h] BYREF\n int v20; // [esp+28h] [ebp-3Ch] BYREF\n int v21; // [esp+2Ch] [ebp-38h] BYREF\n int v22; // [esp+30h] [ebp-34h]\n int v23; // [esp+34h] [ebp-30h] BYREF\n int n704654080; // [esp+38h] [ebp-2Ch]\n int n671099136; // [esp+3Ch] [ebp-28h]\n int n637544192; // [esp+40h] [ebp-24h]\n int n603989248; // [esp+44h] [ebp-20h]\n int n570434304; // [esp+48h] [ebp-1Ch]\n int n536879360; // [esp+4Ch] [ebp-18h]\n int n637544192_1; // [esp+50h] [ebp-14h]\n int n603989248_1; // [esp+54h] [ebp-10h]\n int n570434304_1; // [esp+58h] [ebp-Ch]\n i... [12460 chars total]","refs":[{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd92214","name":"aPchearlydisabl","string":"PchEarlyDisabledDeviceHandling() - Start\n"},{"addr":"0xffd92240","name":"aPchpwrmbaseRPc","string":"PchPwrmBase + R_PCH_PWRM_FUSE_DIS_RD_2 = %x\n"},{"addr":"0xffd8c2a0","name":"sub_FFD8C2A0"},{"addr":"0xffd92270","name":"aSpaControllerP","string":"SPA Controller PCD Value = %x\n"},{"addr":"0xffd92290","name":"aSpbControllerP","string":"SPB Controller PCD Value = %x\n"},{"addr":"0xffd922b0","name":"aSpcControllerP","string":"SPC Controller PCD Value = %x\n"},{"addr":"0xffd922d0","name":"aSpdControllerP","string":"SPD Controller PCD Value = %x\n"},{"addr":"0xffd922f0","name":"aSpeControllerP","string":"SPE Controller PCD Value = %x\n"}]}Output truncated. Run: curl -o .ida-mcp/7508e8c4-5a63-42fa-96dc-a63404b02de7.json http://127.0.0.1:13432/output/7508e8c4-5a63-42fa-96dc-a63404b02de7.json \ No newline at end of file +int __thiscall PchEarlyDisabledDeviceHandling(int *this) +{ + int v2; // esi + int v3; // edi + int v4; // ebx + int v5; // ebp + int n2_1; // ebx + int v7; // ebx + __int16 v8; // si + int v9; // ebx + int v10; // eax + int v11; // eax + int v12; // eax + int v14; // [esp+10h] [ebp-54h] BYREF + int v15; // [esp+14h] [ebp-50h] BYREF + int v16; // [esp+18h] [ebp-4Ch] BYREF + int n2; // [esp+1Ch] [ebp-48h] + int v18; // [esp+20h] [ebp-44h] BYREF + int v19; // [esp+24h] [ebp-40h] BYREF + int v20; // [esp+28h] [ebp-3Ch] BYREF + int v21; // [esp+2Ch] [ebp-38h] BYREF + int v22; // [esp+30h] [ebp-34h] + int v23; // [esp+34h] [ebp-30h] BYREF + int n704654080; // [esp+38h] [ebp-2Ch] + int n671099136; // [esp+3Ch] [ebp-28h] + int n637544192; // [esp+40h] [ebp-24h] + int n603989248; // [esp+44h] [ebp-20h] + int n570434304; // [esp+48h] [ebp-1Ch] + int n536879360; // [esp+4Ch] [ebp-18h] + int n637544192_1; // [esp+50h] [ebp-14h] + int n603989248_1; // [esp+54h] [ebp-10h] + int n570434304_1; // [esp+58h] [ebp-Ch] + i... [12460 chars total] diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd813d1.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd813d1.c index deb4977..cfda44b 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd813d1.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd813d1.c @@ -1,2 +1,55 @@ -// 0xffd813d1 -{"addr":"0xffd813d1","code":"int __thiscall PchEarlyInit(int *this)\n{\n int v2; // eax\n int v3; // edi\n unsigned __int8 v4; // al\n unsigned __int8 v5; // al\n unsigned __int8 v6; // al\n unsigned __int8 v7; // al\n\n DebugPrint(64, (int)\"PchEarlyInit() - Start\\n\"); /*0xffd813df*/\n sub_FFD82723(); /*0xffd813e4*/\n sub_FFD81769(); /*0xffd813e9*/\n sub_FFD8C497(2, 1); /*0xffd813fc*/\n sub_FFD8C5F6(255, 3); /*0xffd81414*/\n sub_FFD8C578(-2, 0); /*0xffd81425*/\n v2 = sub_FFD8CBBA(0, 31, 1); /*0xffd81431*/\n *(_DWORD *)(v2 + 128) = 0; /*0xffd8143b*/\n *(_DWORD *)(v2 + 132) = 0; /*0xffd81441*/\n *(_DWORD *)(v2 + 136) = 0; /*0xffd81447*/\n *(_DWORD *)(v2 + 140) = 0; /*0xffd8144d*/\n *(_DWORD *)(v2 + 144) = 0; /*0xffd81453*/\n *(_DWORD *)(v2 + 148) = 61440; /*0xffd81459*/\n *(_DWORD *)(v2 + 152) = 16; /*0xffd81463*/\n *(_DWORD *)(v2 + 156) = 0; /*0xffd8146d*/\n *(_BYTE *)(v2 + 244) |= 1u; /*0xffd8147d*/\n v3 = sub_FFD8CBBA(0, 31, 2); /*0xffd8148d*/\n if ( (*(_BYTE *)(v3 + 164) & 4) != 0 ) /*0xffd81499*/\n {\n __outbyte(0x74u, 0xAu); /*0xffd814a3*/\n v4 = __inbyte(0x74u); /*0xffd814a4*/\n __outbyte(0x75u, v4 & 0x8F | 0x60); /*0xffd814af*/\n __outbyte(0x74u, 0xBu); /*0xffd814b5*/\n v5 = __inbyte(0x75u); /*0xffd814b9*/\n __outbyte(0x75u, v5 | 0x80); /*0xffd814bc*/\n __outbyte(0x74u, 0xAu); /*0xffd814c2*/\n v6 = __inbyte(0x75u); /*0xffd814c6*/\n __outbyte(0x75u, v6 & 0x8F | 0x20); /*0xffd814cb*/\n __outbyte(0x74u, 0xBu); /*0xffd814d1*/\n v7 = __inbyte(0x75u); /*0xffd814d5*/\n __outbyte(0x75u, v7 & 0x7F); /*0xffd814d8*/\n }\n *(this + 4) = 16; /*0xffd814d9*/\n *(_DWORD *)(v3 + 172) &= ~0x100000u; /*0xffd814ed*/\n *(this + 53) = 0; /*0xffd814f3*/\n *(this + 61) = 0; /*0xffd814f9*/\n PchEarlyDisabledDeviceHandling(this); /*0xffd814ff*/\n sub_FFD905CC(); /*0xffd81504*/\n sub_FFD8C497(4, 0); /*0xffd81518*/\n sub_FFD8C497(4, 18875648); /*0xffd8152c*/\n sub_FFD8C497(4, 0); /*0xffd81539*/\n sub_FFD8C497(4, 18875648); /*0xffd81545*/\n return DebugPrint(64, (int)\"PchEarlyInit() - End\\n\"); /*0xffd81559*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd92b50","name":"aPchearlyinitSt","string":"PchEarlyInit() - Start\n"},{"addr":"0xffd82723","name":"sub_FFD82723"},{"addr":"0xffd81769","name":"sub_FFD81769"},{"addr":"0xffd8c497","name":"sub_FFD8C497"},{"addr":"0xffd8c5f6","name":"sub_FFD8C5F6"},{"addr":"0xffd8c578","name":"sub_FFD8C578"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd80ba6","name":"PchEarlyDisabledDeviceHandling"},{"addr":"0xffd905cc","name":"sub_FFD905CC"},{"addr":"0xffd92b68","name":"aPchearlyinitEn","string":"PchEarlyInit() - End\n"}]} \ No newline at end of file +int __thiscall PchEarlyInit(int *this) +{ + int v2; // eax + int v3; // edi + unsigned __int8 v4; // al + unsigned __int8 v5; // al + unsigned __int8 v6; // al + unsigned __int8 v7; // al + + DebugPrint(64, (int)"PchEarlyInit() - Start\ +"); /*0xffd813df*/ + sub_FFD82723(); /*0xffd813e4*/ + sub_FFD81769(); /*0xffd813e9*/ + sub_FFD8C497(2, 1); /*0xffd813fc*/ + sub_FFD8C5F6(255, 3); /*0xffd81414*/ + sub_FFD8C578(-2, 0); /*0xffd81425*/ + v2 = sub_FFD8CBBA(0, 31, 1); /*0xffd81431*/ + *(_DWORD *)(v2 + 128) = 0; /*0xffd8143b*/ + *(_DWORD *)(v2 + 132) = 0; /*0xffd81441*/ + *(_DWORD *)(v2 + 136) = 0; /*0xffd81447*/ + *(_DWORD *)(v2 + 140) = 0; /*0xffd8144d*/ + *(_DWORD *)(v2 + 144) = 0; /*0xffd81453*/ + *(_DWORD *)(v2 + 148) = 61440; /*0xffd81459*/ + *(_DWORD *)(v2 + 152) = 16; /*0xffd81463*/ + *(_DWORD *)(v2 + 156) = 0; /*0xffd8146d*/ + *(_BYTE *)(v2 + 244) |= 1u; /*0xffd8147d*/ + v3 = sub_FFD8CBBA(0, 31, 2); /*0xffd8148d*/ + if ( (*(_BYTE *)(v3 + 164) & 4) != 0 ) /*0xffd81499*/ + { + __outbyte(0x74u, 0xAu); /*0xffd814a3*/ + v4 = __inbyte(0x74u); /*0xffd814a4*/ + __outbyte(0x75u, v4 & 0x8F | 0x60); /*0xffd814af*/ + __outbyte(0x74u, 0xBu); /*0xffd814b5*/ + v5 = __inbyte(0x75u); /*0xffd814b9*/ + __outbyte(0x75u, v5 | 0x80); /*0xffd814bc*/ + __outbyte(0x74u, 0xAu); /*0xffd814c2*/ + v6 = __inbyte(0x75u); /*0xffd814c6*/ + __outbyte(0x75u, v6 & 0x8F | 0x20); /*0xffd814cb*/ + __outbyte(0x74u, 0xBu); /*0xffd814d1*/ + v7 = __inbyte(0x75u); /*0xffd814d5*/ + __outbyte(0x75u, v7 & 0x7F); /*0xffd814d8*/ + } + *(this + 4) = 16; /*0xffd814d9*/ + *(_DWORD *)(v3 + 172) &= ~0x100000u; /*0xffd814ed*/ + *(this + 53) = 0; /*0xffd814f3*/ + *(this + 61) = 0; /*0xffd814f9*/ + PchEarlyDisabledDeviceHandling(this); /*0xffd814ff*/ + sub_FFD905CC(); /*0xffd81504*/ + sub_FFD8C497(4, 0); /*0xffd81518*/ + sub_FFD8C497(4, 18875648); /*0xffd8152c*/ + sub_FFD8C497(4, 0); /*0xffd81539*/ + sub_FFD8C497(4, 18875648); /*0xffd81545*/ + return DebugPrint(64, (int)"PchEarlyInit() - End\ +"); /*0xffd81559*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8155f.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8155f.c index 960ba95..54720a2 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8155f.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8155f.c @@ -1,2 +1,77 @@ -// 0xffd8155f -{"addr":"0xffd8155f","code":"int PchInitPreMem()\n{\n int v0; // eax\n int v1; // esi\n int v2; // eax\n int v3; // eax\n int v4; // esi\n int v5; // eax\n int *v7; // [esp+10h] [ebp-4h] BYREF\n\n DebugPrint(64, (int)\"PchInitPreMem() - Start\\n\"); /*0xffd8156b*/\n if ( !(unsigned __int8)sub_FFD8BDC8() ) /*0xffd81572*/\n {\n DebugPrint(0x80000000, (int)\"PCH SKU is not supported due to no proper PCH LPC found!\\n\"); /*0xffd8158b*/\n v0 = GetReportStatusCodePpi(); /*0xffd81592*/\n if ( v0 ) /*0xffd81599*/\n (*(void (__cdecl **)(const char *, int, const char *))(v0 + 4))( /*0xffd815a6*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchInitPreMem.c\",\n 1948,\n \"((BOOLEAN)(0==1))\");\n }\n v1 = sub_FFD8CBBA(0, 31, 1); /*0xffd815b8*/\n if ( (*(_DWORD *)(v1 + 16) & 0xFF000000) == 0 ) /*0xffd815c4*/\n {\n DebugPrint(64, (int)\"SBREG should be programmed before here\\n\"); /*0xffd815cd*/\n *(_DWORD *)(v1 + 16) = -50331648; /*0xffd815d2*/\n *(_BYTE *)(v1 + 4) |= 2u; /*0xffd815e0*/\n }\n sub_FFD8C632(0x500u); /*0xffd815e8*/\n sub_FFD8C80A(); /*0xffd815ed*/\n sub_FFD8C99B(); /*0xffd815f2*/\n sub_FFD8C909((unsigned int *)&v7); /*0xffd815fb*/\n DebugPrint(64, (int)\"PCH PWRM Base needs to be programmed before here\\n\"); /*0xffd81607*/\n if ( !v7 ) /*0xffd81613*/\n {\n v2 = GetReportStatusCodePpi(); /*0xffd81615*/\n if ( v2 ) /*0xffd8161c*/\n (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffd81629*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchInitPreMem.c\",\n 1993,\n \"PchPwrmBase != 0\");\n }\n if ( (unsigned __int8)sub_FFD8D59A() )\n {\n DebugPrint(0x80000000, (int)\"DWR: DWR detected - install PPI\\n\");\n if ( InstallPpi(&unk_FFD98084) >= 0 )\n DebugPrint(0x80000000, (int)\"DWR: DWR PPI has been installed\\n\");\n else\n DebugPrint(0x80000000, (int)\"ERROR: Can't install DWR PPI\\n\");\n }\n PchFabricErrorCheck(); /*0xffd81667*/\n PchEarlyInit(v7); /*0xffd81670*/\n v3 = InstallPpi(&unk_FFD980AC); /*0xffd8167a*/\n v4 = v3; /*0xffd8167f*/\n if ( v3 < 0 ) /*0xffd81683*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v3); /*0xffd8168c*/\n v5 = GetReportStatusCodePpi(); /*0xffd81694*/\n if ( v5 ) /*0xffd8169b*/\n (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd816a8*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchInitPreMem.c\",\n 2007,\n \"!EFI_ERROR (Status)\");\n }\n DebugPrint(64, (int)\"PchInitPreMem() - End\\n\"); /*0xffd816b5*/\n return v4; /*0xffd816bc*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd92b80","name":"aPchinitprememS","string":"PchInitPreMem() - Start\n"},{"addr":"0xffd92b9c","name":"aPchSkuIsNotSup","string":"PCH SKU is not supported due to no proper PCH LPC found!\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd91f24","name":"aEHsPurleysktpk_1","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c"},{"addr":"0xffd91b10","name":"aBoolean01","string":"((BOOLEAN)(0==1))"},{"addr":"0xffd8bdc8","name":"sub_FFD8BDC8"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd92bd8","name":"aSbregShouldBeP","string":"SBREG should be programmed before here\n"},{"addr":"0xffd8c632","name":"sub_FFD8C632"},{"addr":"0xffd8c80a","name":"sub_FFD8C80A"},{"addr":"0xffd8c99b","name":"sub_FFD8C99B"},{"addr":"0xffd8c909","name":"sub_FFD8C909"},{"addr":"0xffd92c00","name":"aPchPwrmBaseNee","string":"PCH PWRM Base needs to be programmed before here\n"},{"addr":"0xffd92c34","name":"aPchpwrmbase0","string":"PchPwrmBase != 0"},{"addr":"0xffd91fe4","name":"aDwrDwrDetected","string":"DWR: DWR detected - install PPI\n"},{"addr":"0xffd92028","name":"aDwrDwrPpiHasBe","string":"DWR: DWR PPI has been installed\n"},{"addr":"0xffd92008","name":"aErrorCanTInsta","string":"ERROR: Can't install DWR PPI\n"},{"addr":"0xffd7f948","name":"InstallPpi"},{"addr":"0xffd98084","name":"unk_FFD98084"},{"addr":"0xffd8d59a","name":"sub_FFD8D59A"},{"addr":"0xffd80210","name":"PchFabricErrorCheck"},{"addr":"0xffd813d1","name":"PchEarlyInit"},{"addr":"0xffd980ac","name":"unk_FFD980AC"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffd92c48","name":"aPchinitprememE","string":"PchInitPreMem() - End\n"}]} \ No newline at end of file +int PchInitPreMem() +{ + int v0; // eax + int v1; // esi + int v2; // eax + int v3; // eax + int v4; // esi + int v5; // eax + int *v7; // [esp+10h] [ebp-4h] BYREF + + DebugPrint(64, (int)"PchInitPreMem() - Start\ +"); /*0xffd8156b*/ + if ( !(unsigned __int8)sub_FFD8BDC8() ) /*0xffd81572*/ + { + DebugPrint(0x80000000, (int)"PCH SKU is not supported due to no proper PCH LPC found!\ +"); /*0xffd8158b*/ + v0 = GetReportStatusCodePpi(); /*0xffd81592*/ + if ( v0 ) /*0xffd81599*/ + (*(void (__cdecl **)(const char *, int, const char *))(v0 + 4))( /*0xffd815a6*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c", + 1948, + "((BOOLEAN)(0==1))"); + } + v1 = sub_FFD8CBBA(0, 31, 1); /*0xffd815b8*/ + if ( (*(_DWORD *)(v1 + 16) & 0xFF000000) == 0 ) /*0xffd815c4*/ + { + DebugPrint(64, (int)"SBREG should be programmed before here\ +"); /*0xffd815cd*/ + *(_DWORD *)(v1 + 16) = -50331648; /*0xffd815d2*/ + *(_BYTE *)(v1 + 4) |= 2u; /*0xffd815e0*/ + } + sub_FFD8C632(0x500u); /*0xffd815e8*/ + sub_FFD8C80A(); /*0xffd815ed*/ + sub_FFD8C99B(); /*0xffd815f2*/ + sub_FFD8C909((unsigned int *)&v7); /*0xffd815fb*/ + DebugPrint(64, (int)"PCH PWRM Base needs to be programmed before here\ +"); /*0xffd81607*/ + if ( !v7 ) /*0xffd81613*/ + { + v2 = GetReportStatusCodePpi(); /*0xffd81615*/ + if ( v2 ) /*0xffd8161c*/ + (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffd81629*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c", + 1993, + "PchPwrmBase != 0"); + } + if ( (unsigned __int8)sub_FFD8D59A() ) + { + DebugPrint(0x80000000, (int)"DWR: DWR detected - install PPI\ +"); + if ( InstallPpi(&unk_FFD98084) >= 0 ) + DebugPrint(0x80000000, (int)"DWR: DWR PPI has been installed\ +"); + else + DebugPrint(0x80000000, (int)"ERROR: Can't install DWR PPI\ +"); + } + PchFabricErrorCheck(); /*0xffd81667*/ + PchEarlyInit(v7); /*0xffd81670*/ + v3 = InstallPpi(&unk_FFD980AC); /*0xffd8167a*/ + v4 = v3; /*0xffd8167f*/ + if ( v3 < 0 ) /*0xffd81683*/ + { + DebugPrint(0x80000000, (int)"\ +ASSERT_EFI_ERROR (Status = %r)\ +", v3); /*0xffd8168c*/ + v5 = GetReportStatusCodePpi(); /*0xffd81694*/ + if ( v5 ) /*0xffd8169b*/ + (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd816a8*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchInitPreMem.c", + 2007, + "!EFI_ERROR (Status)"); + } + DebugPrint(64, (int)"PchInitPreMem() - End\ +"); /*0xffd816b5*/ + return v4; /*0xffd816bc*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd816c4.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd816c4.c index 5ebf54a..b42f29e 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd816c4.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd816c4.c @@ -1,2 +1,31 @@ -// 0xffd816c4 -{"addr":"0xffd816c4","code":"int PrintPchInfo()\n{\n int v0; // esi\n int v1; // ecx\n __int16 v2; // ax\n double v4; // [esp-4h] [ebp-34h]\n double v5; // [esp-4h] [ebp-34h]\n double v6; // [esp-4h] [ebp-34h]\n _BYTE v7[32]; // [esp+Ch] [ebp-24h] BYREF\n int p_n32; // [esp+2Ch] [ebp-4h] BYREF\n\n v0 = sub_FFD8CBBA(0, 31, 0); /*0xffd816db*/\n p_n32 = 32; /*0xffd816e3*/\n sub_FFD8BE68(); /*0xffd816e6*/\n sub_FFD8C111(&p_n32); /*0xffd816f1*/\n LODWORD(v4) = v7; /*0xffd816fa*/\n DebugPrint(64, (int)\"PCH Series : %a\\n\", v4);\n p_n32 = 32; /*0xffd8170a*/\n sub_FFD8BB3A(v1); /*0xffd81712*/\n sub_FFD8C06D(&p_n32); /*0xffd8171d*/\n LODWORD(v5) = v7; /*0xffd81726*/\n DebugPrint(64, (int)\"PCH Stepping : %a\\n\", v5);\n p_n32 = 32; /*0xffd81736*/\n v2 = sub_FFD8CCA5((unsigned __int16 *)(v0 + 2)); /*0xffd81740*/\n sub_FFD8C1B5(v2, v7, &p_n32); /*0xffd8174a*/\n LODWORD(v6) = v7; /*0xffd81753*/\n return DebugPrint(64, (int)\"PCH SKU : %a\\n\", v6);\n}","refs":[{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd8c111","name":"sub_FFD8C111"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd92c60","name":"aPchSeriesA","string":"PCH Series : %a\n"},{"addr":"0xffd8bb3a","name":"sub_FFD8BB3A"},{"addr":"0xffd8c06d","name":"sub_FFD8C06D"},{"addr":"0xffd92c74","name":"aPchSteppingA","string":"PCH Stepping : %a\n"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd8c1b5","name":"sub_FFD8C1B5"},{"addr":"0xffd92c88","name":"aPchSkuA","string":"PCH SKU : %a\n"}]} \ No newline at end of file +int PrintPchInfo() +{ + int v0; // esi + int v1; // ecx + __int16 v2; // ax + double v4; // [esp-4h] [ebp-34h] + double v5; // [esp-4h] [ebp-34h] + double v6; // [esp-4h] [ebp-34h] + _BYTE v7[32]; // [esp+Ch] [ebp-24h] BYREF + int p_n32; // [esp+2Ch] [ebp-4h] BYREF + + v0 = sub_FFD8CBBA(0, 31, 0); /*0xffd816db*/ + p_n32 = 32; /*0xffd816e3*/ + sub_FFD8BE68(); /*0xffd816e6*/ + sub_FFD8C111(&p_n32); /*0xffd816f1*/ + LODWORD(v4) = v7; /*0xffd816fa*/ + DebugPrint(64, (int)"PCH Series : %a\ +", v4); + p_n32 = 32; /*0xffd8170a*/ + sub_FFD8BB3A(v1); /*0xffd81712*/ + sub_FFD8C06D(&p_n32); /*0xffd8171d*/ + LODWORD(v5) = v7; /*0xffd81726*/ + DebugPrint(64, (int)"PCH Stepping : %a\ +", v5); + p_n32 = 32; /*0xffd81736*/ + v2 = sub_FFD8CCA5((unsigned __int16 *)(v0 + 2)); /*0xffd81740*/ + sub_FFD8C1B5(v2, v7, &p_n32); /*0xffd8174a*/ + LODWORD(v6) = v7; /*0xffd81753*/ + return DebugPrint(64, (int)"PCH SKU : %a\ +", v6); +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd821b8.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd821b8.c index b99e228..2a2d4a3 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd821b8.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd821b8.c @@ -1,2 +1,124 @@ -// 0xffd821b8 -{"addr":"0xffd821b8","code":"int __fastcall sub_FFD821B8(int a1, char a2, int a3, unsigned __int8 n2)\n{\n unsigned __int8 n2_1; // bh\n char v5; // bl\n int v7; // edi\n int v8; // eax\n __int16 v9; // si\n int v10; // edx\n unsigned __int8 v11; // bl\n char v12; // al\n char v13; // al\n char n2_2; // [esp+11h] [ebp-3h] BYREF\n char v16; // [esp+12h] [ebp-2h]\n char v17; // [esp+13h] [ebp-1h] BYREF\n\n n2_1 = n2; /*0xffd821ba*/\n v5 = 0; /*0xffd821be*/\n v16 = a2; /*0xffd821c0*/\n if ( n2 == 1 )\n {\n DebugPrint(64, (int)\"EarlyConfigurePchHSata() - First Controller - Start\\n\"); /*0xffd821d5*/\n v7 = sub_FFD8CBBA(0, 23, 0); /*0xffd821e9*/\n sub_FFD8C019(); /*0xffd821eb*/\n }\n else\n {\n if ( n2 != 2 )\n {\n DebugPrint(0x80000000, (int)\"Error: Invalid SATA controller!\\n\");\n return -2147483646; /*0xffd8244e*/\n }\n DebugPrint(64, (int)\"EarlyConfigurePchHSata() - Second Controller - Start\\n\"); /*0xffd82202*/\n v7 = sub_FFD8CBBA(0, 17, 5); /*0xffd82216*/\n }\n v8 = sub_FFD8CBBA(0, 31, 0); /*0xffd8221f*/\n v9 = sub_FFD8CCA5((unsigned __int16 *)(v8 + 2)); /*0xffd8222d*/\n if ( !(unsigned __int8)sub_FFD8D58A() ) /*0xffd82230*/\n {\n if ( n2_1 == 1 ) /*0xffd8223c*/\n v5 = sub_FFD81814(); /*0xffd82243*/\n if ( n2_1 != 2 ) /*0xffd82248*/\n goto LABEL_14; /*0xffd82248*/\n v11 = 0; /*0xffd8224a*/\n while ( 1 ) /*0xffd82253*/\n {\n sub_FFD8E7BA(v11, &n2); /*0xffd82253*/\n sub_FFD8E062(n2, &v17, &n2_2); /*0xffd82266*/\n if ( n2_2 == 2 ) /*0xffd82271*/\n break; /*0xffd82271*/\n if ( ++v11 >= 6u ) /*0xffd82278*/\n {\n v5 = 0; /*0xffd8227a*/\n goto LABEL_14; /*0xffd8227c*/\n }\n }\n }\n v5 = 1; /*0xffd8227e*/\nLABEL_14:\n if ( (*(_BYTE *)a1 & 1) != 0 && (v5 || *(_DWORD *)(a1 + 4)) ) /*0xffd8228e*/\n {\n *(_BYTE *)(v7 + 160) = -104; /*0xffd82298*/\n *(_DWORD *)(v7 + 164) = *(_DWORD *)(v7 + 164) & 0xFFFFFE00 | 0x183; /*0xffd822ad*/\n *(_BYTE *)(v7 + 160) = -104; /*0xffd822b3*/\n *(_DWORD *)(v7 + 164) |= 0x8000u; /*0xffd822c5*/\n *(_BYTE *)(v7 + 160) = -92; /*0xffd822cb*/\n *(_DWORD *)(v7 + 164) |= 0x40u; /*0xffd822db*/\n if ( v9 == -24254 /*0xffd8237d*/\n || v9 == -24253\n || v9 == -24252\n || v9 == -24251\n || v9 == -24250\n || v9 == -24249\n || v9 == -24248\n || v9 == -24256\n || v9 == -24255\n || v9 == -24243\n || v9 == -24242\n || v9 == -24241\n || v9 == -25280\n || v9 == -25279\n || v9 == -25278\n || v9 == -25277\n || v9 == -25274\n || v9 == -25272 )\n {\n *(_BYTE *)(v7 + 160) = -100; /*0xffd8237f*/\n *(_DWORD *)(v7 + 164) |= 0x400000u; /*0xffd82391*/\n }\n *(_BYTE *)(v7 + 160) = -100; /*0xffd82397*/\n *(_DWORD *)(v7 + 164) = *(_DWORD *)(v7 + 164) & 0xDF63E013 | 0x209C0224; /*0xffd823ae*/\n if ( n2_1 == 1 ) /*0xffd823b7*/\n {\n *(_BYTE *)(v7 + 160) = -100; /*0xffd823b9*/\n *(_DWORD *)(v7 + 164) |= 0x40000000u; /*0xffd823cb*/\n }\n v12 = *(_BYTE *)(v7 + 156) | 0x20; /*0xffd823d7*/\n if ( *(_DWORD *)(a1 + 4) == 1 ) /*0xffd823dd*/\n {\n if ( (*(_BYTE *)(a1 + 76) & 1) != 0 ) /*0xffd823e5*/\n v12 = *(_BYTE *)(v7 + 156) & 0x1F | 0xA0; /*0xffd823e7*/\n else\n v12 = *(_BYTE *)(v7 + 156) & 0x1F | 0x60; /*0xffd823eb*/\n }\n if ( v16 ) /*0xffd823f2*/\n v13 = v12 & 0xE1 | 6; /*0xffd823f6*/\n else\n v13 = v12 & 0xE8 | 0x10; /*0xffd823fc*/\n *(_BYTE *)(v7 + 156) = v13 & 0xF8 | 6; /*0xffd8240d*/\n sub_FFD8CC4F(v7 + 148, 255); /*0xffd82413*/\n sub_FFD7FA46(2u); /*0xffd8241b*/\n DebugPrint(64, (int)\"EarlyConfigurePchHSata() End\\n\"); /*0xffd82427*/\n return 0; /*0xffd8242c*/\n }\n else\n {\n LOBYTE(v10) = n2_1; /*0xffd82434*/\n sub_FFD81FF5(a3, v10); /*0xffd82436*/\n return 0; /*0xffd8243b*/\n }\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd93020","name":"aEarlyconfigure","string":"EarlyConfigurePchHSata() - First Controller - Start\n"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8c019","name":"sub_FFD8C019"},{"addr":"0xffd92d9c","name":"aErrorInvalidSa","string":"Error: Invalid SATA controller!\n"},{"addr":"0xffd93058","name":"aEarlyconfigure_0","string":"EarlyConfigurePchHSata() - Second Controller - Start\n"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd81814","name":"sub_FFD81814"},{"addr":"0xffd8e7ba","name":"sub_FFD8E7BA"},{"addr":"0xffd8e062","name":"sub_FFD8E062"},{"addr":"0xffd8d58a","name":"sub_FFD8D58A"},{"addr":"0xffd8cc4f","name":"sub_FFD8CC4F"},{"addr":"0xffd7fa46","name":"sub_FFD7FA46"},{"addr":"0xffd93090","name":"aEarlyconfigure_1","string":"EarlyConfigurePchHSata() End\n"},{"addr":"0xffd81ff5","name":"sub_FFD81FF5"}]} \ No newline at end of file +int __fastcall sub_FFD821B8(int a1, char a2, int a3, unsigned __int8 n2) +{ + unsigned __int8 n2_1; // bh + char v5; // bl + int v7; // edi + int v8; // eax + __int16 v9; // si + int v10; // edx + unsigned __int8 v11; // bl + char v12; // al + char v13; // al + char n2_2; // [esp+11h] [ebp-3h] BYREF + char v16; // [esp+12h] [ebp-2h] + char v17; // [esp+13h] [ebp-1h] BYREF + + n2_1 = n2; /*0xffd821ba*/ + v5 = 0; /*0xffd821be*/ + v16 = a2; /*0xffd821c0*/ + if ( n2 == 1 ) + { + DebugPrint(64, (int)"EarlyConfigurePchHSata() - First Controller - Start\ +"); /*0xffd821d5*/ + v7 = sub_FFD8CBBA(0, 23, 0); /*0xffd821e9*/ + sub_FFD8C019(); /*0xffd821eb*/ + } + else + { + if ( n2 != 2 ) + { + DebugPrint(0x80000000, (int)"Error: Invalid SATA controller!\ +"); + return -2147483646; /*0xffd8244e*/ + } + DebugPrint(64, (int)"EarlyConfigurePchHSata() - Second Controller - Start\ +"); /*0xffd82202*/ + v7 = sub_FFD8CBBA(0, 17, 5); /*0xffd82216*/ + } + v8 = sub_FFD8CBBA(0, 31, 0); /*0xffd8221f*/ + v9 = sub_FFD8CCA5((unsigned __int16 *)(v8 + 2)); /*0xffd8222d*/ + if ( !(unsigned __int8)sub_FFD8D58A() ) /*0xffd82230*/ + { + if ( n2_1 == 1 ) /*0xffd8223c*/ + v5 = sub_FFD81814(); /*0xffd82243*/ + if ( n2_1 != 2 ) /*0xffd82248*/ + goto LABEL_14; /*0xffd82248*/ + v11 = 0; /*0xffd8224a*/ + while ( 1 ) /*0xffd82253*/ + { + sub_FFD8E7BA(v11, &n2); /*0xffd82253*/ + sub_FFD8E062(n2, &v17, &n2_2); /*0xffd82266*/ + if ( n2_2 == 2 ) /*0xffd82271*/ + break; /*0xffd82271*/ + if ( ++v11 >= 6u ) /*0xffd82278*/ + { + v5 = 0; /*0xffd8227a*/ + goto LABEL_14; /*0xffd8227c*/ + } + } + } + v5 = 1; /*0xffd8227e*/ +LABEL_14: + if ( (*(_BYTE *)a1 & 1) != 0 && (v5 || *(_DWORD *)(a1 + 4)) ) /*0xffd8228e*/ + { + *(_BYTE *)(v7 + 160) = -104; /*0xffd82298*/ + *(_DWORD *)(v7 + 164) = *(_DWORD *)(v7 + 164) & 0xFFFFFE00 | 0x183; /*0xffd822ad*/ + *(_BYTE *)(v7 + 160) = -104; /*0xffd822b3*/ + *(_DWORD *)(v7 + 164) |= 0x8000u; /*0xffd822c5*/ + *(_BYTE *)(v7 + 160) = -92; /*0xffd822cb*/ + *(_DWORD *)(v7 + 164) |= 0x40u; /*0xffd822db*/ + if ( v9 == -24254 /*0xffd8237d*/ + || v9 == -24253 + || v9 == -24252 + || v9 == -24251 + || v9 == -24250 + || v9 == -24249 + || v9 == -24248 + || v9 == -24256 + || v9 == -24255 + || v9 == -24243 + || v9 == -24242 + || v9 == -24241 + || v9 == -25280 + || v9 == -25279 + || v9 == -25278 + || v9 == -25277 + || v9 == -25274 + || v9 == -25272 ) + { + *(_BYTE *)(v7 + 160) = -100; /*0xffd8237f*/ + *(_DWORD *)(v7 + 164) |= 0x400000u; /*0xffd82391*/ + } + *(_BYTE *)(v7 + 160) = -100; /*0xffd82397*/ + *(_DWORD *)(v7 + 164) = *(_DWORD *)(v7 + 164) & 0xDF63E013 | 0x209C0224; /*0xffd823ae*/ + if ( n2_1 == 1 ) /*0xffd823b7*/ + { + *(_BYTE *)(v7 + 160) = -100; /*0xffd823b9*/ + *(_DWORD *)(v7 + 164) |= 0x40000000u; /*0xffd823cb*/ + } + v12 = *(_BYTE *)(v7 + 156) | 0x20; /*0xffd823d7*/ + if ( *(_DWORD *)(a1 + 4) == 1 ) /*0xffd823dd*/ + { + if ( (*(_BYTE *)(a1 + 76) & 1) != 0 ) /*0xffd823e5*/ + v12 = *(_BYTE *)(v7 + 156) & 0x1F | 0xA0; /*0xffd823e7*/ + else + v12 = *(_BYTE *)(v7 + 156) & 0x1F | 0x60; /*0xffd823eb*/ + } + if ( v16 ) /*0xffd823f2*/ + v13 = v12 & 0xE1 | 6; /*0xffd823f6*/ + else + v13 = v12 & 0xE8 | 0x10; /*0xffd823fc*/ + *(_BYTE *)(v7 + 156) = v13 & 0xF8 | 6; /*0xffd8240d*/ + sub_FFD8CC4F(v7 + 148, 255); /*0xffd82413*/ + sub_FFD7FA46(2u); /*0xffd8241b*/ + DebugPrint(64, (int)"EarlyConfigurePchHSata() End\ +"); /*0xffd82427*/ + return 0; /*0xffd8242c*/ + } + else + { + LOBYTE(v10) = n2_1; /*0xffd82434*/ + sub_FFD81FF5(a3, v10); /*0xffd82436*/ + return 0; /*0xffd8243b*/ + } +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8245b.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8245b.c index 035c5b0..4bb3bf0 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8245b.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8245b.c @@ -1,2 +1,81 @@ -// 0xffd8245b -{"addr":"0xffd8245b","code":"int __cdecl sub_FFD8245B(int n2)\n{\n int v1; // ecx\n int v2; // ebx\n int v3; // edi\n int v4; // esi\n unsigned int n6; // ebp\n int v6; // eax\n unsigned __int8 n6_1; // cl\n int v8; // eax\n\n v2 = 0; /*0xffd82460*/\n v3 = v1; /*0xffd8246c*/\n if ( (_BYTE)n2 == 1 ) /*0xffd8246e*/\n {\n DebugPrint(64, (int)\"ConfigurePchHSata() - First Controller - Start\\n\"); /*0xffd82477*/\n v4 = sub_FFD8CBBA(0, 23, 0); /*0xffd8248a*/\n n6 = (unsigned __int8)sub_FFD8C019(); /*0xffd82491*/\n }\n else\n {\n DebugPrint(64, (int)\"ConfigurePchHSata() - Second Controller - Start\\n\"); /*0xffd8249d*/\n v4 = sub_FFD8CBBA(0, 17, 5); /*0xffd824b1*/\n n6 = 6; /*0xffd824b5*/\n }\n v6 = sub_FFD8CBBA(0, 31, 0); /*0xffd824bc*/\n sub_FFD8CCA5((unsigned __int16 *)(v6 + 2)); /*0xffd824c5*/\n sub_FFD81B92(n2); /*0xffd824d4*/\n if ( (*(_BYTE *)v3 & 8) != 0 ) /*0xffd824dd*/\n {\n n6_1 = 0; /*0xffd824e3*/\n if ( n6 ) /*0xffd824e7*/\n {\n v8 = 0; /*0xffd824e9*/\n do /*0xffd82506*/\n {\n if ( (*(_BYTE *)(v3 + 8 * v8 + 12) & 1) != 0 && (*(_DWORD *)(v3 + 8 * v8 + 12) & 0x40000A) != 0 ) /*0xffd824fa*/\n v2 |= 1 << v8; /*0xffd824fc*/\n v8 = ++n6_1; /*0xffd82501*/\n }\n while ( n6_1 < n6 ); /*0xffd82506*/\n }\n *(_BYTE *)(v4 + 160) = -112; /*0xffd82508*/\n *(_DWORD *)(v4 + 164) |= (unsigned __int8)~(_BYTE)v2; /*0xffd82521*/\n *(_BYTE *)(v4 + 160) = 0x80; /*0xffd8252c*/\n *(_DWORD *)(v4 + 164) |= v2 << 16; /*0xffd8253b*/\n *(_BYTE *)(v4 + 160) = -116; /*0xffd82541*/\n *(_DWORD *)(v4 + 164) |= 0xFF00FFu; /*0xffd82550*/\n *(_BYTE *)(v4 + 160) = -96; /*0xffd82556*/\n *(_DWORD *)(v4 + 164) = *(_DWORD *)(v4 + 164) & 0xFF037FFF | 0x588000; /*0xffd8256d*/\n *(_BYTE *)(v4 + 160) = -124; /*0xffd82573*/\n *(_DWORD *)(v4 + 164) |= 0xFF00FFu; /*0xffd82582*/\n *(_BYTE *)(v4 + 160) = -92; /*0xffd82588*/\n *(_DWORD *)(v4 + 164) |= 0x4000u; /*0xffd8259a*/\n *(_BYTE *)(v4 + 160) = -52; /*0xffd825a0*/\n *(_DWORD *)(v4 + 164) = -2009296895; /*0xffd825a7*/\n *(_BYTE *)(v4 + 160) = -48; /*0xffd825b1*/\n *(_DWORD *)(v4 + 164) = *(_DWORD *)(v4 + 164) & 0xFFFF0000 | 0x8828; /*0xffd825c8*/\n *(_BYTE *)(v4 + 160) = -56; /*0xffd825ce*/\n *(_DWORD *)(v4 + 164) |= 8u; /*0xffd825de*/\n *(_BYTE *)(v4 + 160) = -56; /*0xffd825e4*/\n *(_DWORD *)(v4 + 164) |= 1u; /*0xffd825f4*/\n *(_BYTE *)(v4 + 160) = -56; /*0xffd825fa*/\n *(_DWORD *)(v4 + 164) |= 2u; /*0xffd8260a*/\n }\n *(_BYTE *)(v4 + 160) = -88; /*0xffd82610*/\n *(_DWORD *)(v4 + 164) &= 0xFFF0FFFF; /*0xffd82622*/\n *(_BYTE *)(v4 + 160) = -44; /*0xffd82628*/\n *(_DWORD *)(v4 + 164) = *(_DWORD *)(v4 + 164) & 0xC0C0E0E0 | 0x2C1E1108; /*0xffd8263f*/\n *(_BYTE *)(v4 + 158) &= ~1u; /*0xffd8264d*/\n if ( *(_DWORD *)(v3 + 4) == 1 ) /*0xffd82657*/\n *(_BYTE *)(v4 + 158) |= 1u; /*0xffd82661*/\n if ( (_BYTE)n2 == 1 ) /*0xffd8266c*/\n return DebugPrint(64, (int)\"ConfigurePchHSata() - First Controller - End\\n\"); /*0xffd82673*/\n else\n return DebugPrint(64, (int)\"ConfigurePchHSata() - Second Controller - End\\n\"); /*0xffd8267c*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd930b0","name":"aConfigurepchhs","string":"ConfigurePchHSata() - First Controller - Start\n"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8c019","name":"sub_FFD8C019"},{"addr":"0xffd930e0","name":"aConfigurepchhs_0","string":"ConfigurePchHSata() - Second Controller - Start\n"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd81b92","name":"sub_FFD81B92"},{"addr":"0xffd93114","name":"aConfigurepchhs_3","string":"ConfigurePchHSata() - First Controller - End\n"},{"addr":"0xffd93144","name":"aConfigurepchhs_4","string":"ConfigurePchHSata() - Second Controller - End\n"}]} \ No newline at end of file +int __cdecl sub_FFD8245B(int n2) +{ + int v1; // ecx + int v2; // ebx + int v3; // edi + int v4; // esi + unsigned int n6; // ebp + int v6; // eax + unsigned __int8 n6_1; // cl + int v8; // eax + + v2 = 0; /*0xffd82460*/ + v3 = v1; /*0xffd8246c*/ + if ( (_BYTE)n2 == 1 ) /*0xffd8246e*/ + { + DebugPrint(64, (int)"ConfigurePchHSata() - First Controller - Start\ +"); /*0xffd82477*/ + v4 = sub_FFD8CBBA(0, 23, 0); /*0xffd8248a*/ + n6 = (unsigned __int8)sub_FFD8C019(); /*0xffd82491*/ + } + else + { + DebugPrint(64, (int)"ConfigurePchHSata() - Second Controller - Start\ +"); /*0xffd8249d*/ + v4 = sub_FFD8CBBA(0, 17, 5); /*0xffd824b1*/ + n6 = 6; /*0xffd824b5*/ + } + v6 = sub_FFD8CBBA(0, 31, 0); /*0xffd824bc*/ + sub_FFD8CCA5((unsigned __int16 *)(v6 + 2)); /*0xffd824c5*/ + sub_FFD81B92(n2); /*0xffd824d4*/ + if ( (*(_BYTE *)v3 & 8) != 0 ) /*0xffd824dd*/ + { + n6_1 = 0; /*0xffd824e3*/ + if ( n6 ) /*0xffd824e7*/ + { + v8 = 0; /*0xffd824e9*/ + do /*0xffd82506*/ + { + if ( (*(_BYTE *)(v3 + 8 * v8 + 12) & 1) != 0 && (*(_DWORD *)(v3 + 8 * v8 + 12) & 0x40000A) != 0 ) /*0xffd824fa*/ + v2 |= 1 << v8; /*0xffd824fc*/ + v8 = ++n6_1; /*0xffd82501*/ + } + while ( n6_1 < n6 ); /*0xffd82506*/ + } + *(_BYTE *)(v4 + 160) = -112; /*0xffd82508*/ + *(_DWORD *)(v4 + 164) |= (unsigned __int8)~(_BYTE)v2; /*0xffd82521*/ + *(_BYTE *)(v4 + 160) = 0x80; /*0xffd8252c*/ + *(_DWORD *)(v4 + 164) |= v2 << 16; /*0xffd8253b*/ + *(_BYTE *)(v4 + 160) = -116; /*0xffd82541*/ + *(_DWORD *)(v4 + 164) |= 0xFF00FFu; /*0xffd82550*/ + *(_BYTE *)(v4 + 160) = -96; /*0xffd82556*/ + *(_DWORD *)(v4 + 164) = *(_DWORD *)(v4 + 164) & 0xFF037FFF | 0x588000; /*0xffd8256d*/ + *(_BYTE *)(v4 + 160) = -124; /*0xffd82573*/ + *(_DWORD *)(v4 + 164) |= 0xFF00FFu; /*0xffd82582*/ + *(_BYTE *)(v4 + 160) = -92; /*0xffd82588*/ + *(_DWORD *)(v4 + 164) |= 0x4000u; /*0xffd8259a*/ + *(_BYTE *)(v4 + 160) = -52; /*0xffd825a0*/ + *(_DWORD *)(v4 + 164) = -2009296895; /*0xffd825a7*/ + *(_BYTE *)(v4 + 160) = -48; /*0xffd825b1*/ + *(_DWORD *)(v4 + 164) = *(_DWORD *)(v4 + 164) & 0xFFFF0000 | 0x8828; /*0xffd825c8*/ + *(_BYTE *)(v4 + 160) = -56; /*0xffd825ce*/ + *(_DWORD *)(v4 + 164) |= 8u; /*0xffd825de*/ + *(_BYTE *)(v4 + 160) = -56; /*0xffd825e4*/ + *(_DWORD *)(v4 + 164) |= 1u; /*0xffd825f4*/ + *(_BYTE *)(v4 + 160) = -56; /*0xffd825fa*/ + *(_DWORD *)(v4 + 164) |= 2u; /*0xffd8260a*/ + } + *(_BYTE *)(v4 + 160) = -88; /*0xffd82610*/ + *(_DWORD *)(v4 + 164) &= 0xFFF0FFFF; /*0xffd82622*/ + *(_BYTE *)(v4 + 160) = -44; /*0xffd82628*/ + *(_DWORD *)(v4 + 164) = *(_DWORD *)(v4 + 164) & 0xC0C0E0E0 | 0x2C1E1108; /*0xffd8263f*/ + *(_BYTE *)(v4 + 158) &= ~1u; /*0xffd8264d*/ + if ( *(_DWORD *)(v3 + 4) == 1 ) /*0xffd82657*/ + *(_BYTE *)(v4 + 158) |= 1u; /*0xffd82661*/ + if ( (_BYTE)n2 == 1 ) /*0xffd8266c*/ + return DebugPrint(64, (int)"ConfigurePchHSata() - First Controller - End\ +"); /*0xffd82673*/ + else + return DebugPrint(64, (int)"ConfigurePchHSata() - Second Controller - End\ +"); /*0xffd8267c*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd826ae.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd826ae.c index 3fb3efb..d72db01 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd826ae.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd826ae.c @@ -1,2 +1,16 @@ -// 0xffd826ae -{"addr":"0xffd826ae","code":"bool __fastcall sub_FFD826AE(int a1, int a2, char a3)\n{\n int v5; // eax\n int v6; // ecx\n int n17; // [esp+Ch] [ebp-10h] BYREF\n int v9; // [esp+10h] [ebp-Ch]\n int v10; // [esp+14h] [ebp-8h] BYREF\n char n2; // [esp+1Bh] [ebp-1h]\n\n v5 = sub_FFD8AD54(); /*0xffd826bb*/\n (*(void (__cdecl **)(int, int *))(*(_DWORD *)v5 + 40))(v5, &n17); /*0xffd826c7*/\n n2 = *(_BYTE *)(100 * a2 + a1 + 5); /*0xffd826d6*/\n sub_FFD8D75C(&v10); /*0xffd826dd*/\n v6 = sub_FFD8CBBA(0, v9, v10); /*0xffd826f3*/\n return (!n2 || n2 == 2) && n17 == 17 && (*(_BYTE *)(v6 + 76) & 0xFu) >= 3 && a3 == 1; /*0xffd8271c*/\n}","refs":[{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd8d75c","name":"sub_FFD8D75C"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"}]} \ No newline at end of file +bool __fastcall sub_FFD826AE(int a1, int a2, char a3) +{ + int v5; // eax + int v6; // ecx + int n17; // [esp+Ch] [ebp-10h] BYREF + int v9; // [esp+10h] [ebp-Ch] + int v10; // [esp+14h] [ebp-8h] BYREF + char n2; // [esp+1Bh] [ebp-1h] + + v5 = sub_FFD8AD54(); /*0xffd826bb*/ + (*(void (__cdecl **)(int, int *))(*(_DWORD *)v5 + 40))(v5, &n17); /*0xffd826c7*/ + n2 = *(_BYTE *)(100 * a2 + a1 + 5); /*0xffd826d6*/ + sub_FFD8D75C(&v10); /*0xffd826dd*/ + v6 = sub_FFD8CBBA(0, v9, v10); /*0xffd826f3*/ + return (!n2 || n2 == 2) && n17 == 17 && (*(_BYTE *)(v6 + 76) & 0xFu) >= 3 && a3 == 1; /*0xffd8271c*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82c71.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82c71.c index ecd81d3..45876f3 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82c71.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82c71.c @@ -1,2 +1,36 @@ -// 0xffd82c71 -{"addr":"0xffd82c71","code":"int PciERWORegInit()\n{\n unsigned int i; // edi\n int v1; // ebx\n unsigned __int16 v2; // ax\n char v4; // [esp+10h] [ebp-8h]\n int v5; // [esp+14h] [ebp-4h] BYREF\n\n DebugPrint(64, (int)\"PciERWORegInit() Start\\n\"); /*0xffd82c81*/\n if ( (unsigned __int8)sub_FFD8D59A() )\n {\n DebugPrint(64, (int)\"DWR: PciERWORegInit() End\\n\");\n }\n else\n {\n sub_FFD8BE68(); /*0xffd82c9b*/\n for ( i = 0; i < (unsigned __int8)sub_FFD8BFFD(); ++i ) /*0xffd82ca2*/\n {\n sub_FFD8D75C(&v5); /*0xffd82cb4*/\n v1 = sub_FFD8CBBA(0, v4, v5); /*0xffd82cc8*/\n if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v1) != 0xFFFF ) /*0xffd82cd9*/\n {\n v2 = sub_FFD8CCA5((unsigned __int16 *)(v1 + 68)); /*0xffd82cde*/\n sub_FFD8CCD3(v1 + 68, v2); /*0xffd82ce9*/\n *(_DWORD *)(v1 + 76) = *(_DWORD *)(v1 + 76); /*0xffd82cf1*/\n *(_DWORD *)(v1 + 84) = *(_DWORD *)(v1 + 84); /*0xffd82cf7*/\n *(_DWORD *)(v1 + 216) |= 0x800000u; /*0xffd82d05*/\n }\n }\n DebugPrint(64, (int)\"PciERWORegInit() End\\n\"); /*0xffd82d1f*/\n }\n return 0; /*0xffd82d26*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd93288","name":"aPcierworeginit","string":"PciERWORegInit() Start\n"},{"addr":"0xffd932a0","name":"aDwrPcierworegi","string":"DWR: PciERWORegInit() End\n"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd8d75c","name":"sub_FFD8D75C"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd8ccd3","name":"sub_FFD8CCD3"},{"addr":"0xffd8bffd","name":"sub_FFD8BFFD"},{"addr":"0xffd932bc","name":"aPcierworeginit_0","string":"PciERWORegInit() End\n"},{"addr":"0xffd8d59a","name":"sub_FFD8D59A"}]} \ No newline at end of file +int PciERWORegInit() +{ + unsigned int i; // edi + int v1; // ebx + unsigned __int16 v2; // ax + char v4; // [esp+10h] [ebp-8h] + int v5; // [esp+14h] [ebp-4h] BYREF + + DebugPrint(64, (int)"PciERWORegInit() Start\ +"); /*0xffd82c81*/ + if ( (unsigned __int8)sub_FFD8D59A() ) + { + DebugPrint(64, (int)"DWR: PciERWORegInit() End\ +"); + } + else + { + sub_FFD8BE68(); /*0xffd82c9b*/ + for ( i = 0; i < (unsigned __int8)sub_FFD8BFFD(); ++i ) /*0xffd82ca2*/ + { + sub_FFD8D75C(&v5); /*0xffd82cb4*/ + v1 = sub_FFD8CBBA(0, v4, v5); /*0xffd82cc8*/ + if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v1) != 0xFFFF ) /*0xffd82cd9*/ + { + v2 = sub_FFD8CCA5((unsigned __int16 *)(v1 + 68)); /*0xffd82cde*/ + sub_FFD8CCD3(v1 + 68, v2); /*0xffd82ce9*/ + *(_DWORD *)(v1 + 76) = *(_DWORD *)(v1 + 76); /*0xffd82cf1*/ + *(_DWORD *)(v1 + 84) = *(_DWORD *)(v1 + 84); /*0xffd82cf7*/ + *(_DWORD *)(v1 + 216) |= 0x800000u; /*0xffd82d05*/ + } + } + DebugPrint(64, (int)"PciERWORegInit() End\ +"); /*0xffd82d1f*/ + } + return 0; /*0xffd82d26*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82d2f.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82d2f.c index 451c2c1..88fd6ad 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82d2f.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82d2f.c @@ -1,2 +1,132 @@ -// 0xffd82d2f -{"addr":"0xffd82d2f","code":"int __fastcall PchPcieRpSpeedChange(int a1, int a2)\n{\n unsigned __int8 i_1; // al\n unsigned int i_2; // esi\n unsigned int i; // ebx\n int v5; // eax\n int v6; // edi\n unsigned int j; // esi\n int v8; // ebp\n unsigned int n0x96; // ebp\n unsigned int i_3; // esi\n unsigned int k; // ebp\n int v12; // esi\n unsigned int n0x96_2; // ebp\n unsigned int i_4; // esi\n unsigned int n0x96_1; // [esp+14h] [ebp-60h] BYREF\n unsigned int v17; // [esp+18h] [ebp-5Ch]\n int v18; // [esp+1Ch] [ebp-58h]\n int v19; // [esp+20h] [ebp-54h]\n _DWORD v20[20]; // [esp+24h] [ebp-50h]\n\n v18 = a2; /*0xffd82d36*/\n v19 = a1; /*0xffd82d3a*/\n if ( (unsigned __int8)sub_FFD8D59A() )\n {\n DebugPrint(64, (int)\"DWR: PchPcieRpSpeedChange() End\\n\");\n }\n else\n {\n i_1 = sub_FFD8BFFD(); /*0xffd82d5a*/\n i_2 = 0; /*0xffd82d5f*/\n for ( i = i_1; i_2 < i; ++i_2 ) /*0xffd82d66*/\n {\n v20[i_2] = 0; /*0xffd82d68*/\n if ( sub_FFD8D75C(&n0x96_1) >= 0 ) /*0xffd82d80*/\n {\n v20[i_2] = sub_FFD8CBBA(0, v17, n0x96_1); /*0xffd82db2*/\n }\n else\n {\n v5 = GetReportStatusCodePpi(); /*0xffd82d82*/\n if ( v5 ) /*0xffd82d89*/\n (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd82d9a*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchRootPorts.c\",\n 822,\n \"((BOOLEAN)(0==1))\");\n }\n }\n v6 = 0; /*0xffd82dbb*/\n for ( j = 0; j < i; ++j ) /*0xffd82dc1*/\n {\n v8 = v20[j]; /*0xffd82dc3*/\n if ( v8 ) /*0xffd82dc9*/\n {\n if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v20[j]) != 0xFFFF ) /*0xffd82dda*/\n {\n v17 = *(_DWORD *)(v8 + 76) & 0xF; /*0xffd82de2*/\n if ( v17 > 1 && !sub_FFD826AE(v19 + 28, j, *(_BYTE *)(j + v18)) ) /*0xffd82dfd*/\n {\n sub_FFD8CC85(v17); /*0xffd82e13*/\n if ( (sub_FFD8CCA5((unsigned __int16 *)(v8 + 90)) & 0x40) != 0 ) /*0xffd82e23*/\n {\n sub_FFD8CC4F(v8 + 80, 32); /*0xffd82e2b*/\n v6 |= 1 << j; /*0xffd82e30*/\n }\n }\n }\n }\n }\n n0x96 = 0; /*0xffd82e38*/\n n0x96_1 = 0; /*0xffd82e3a*/\n if ( v6 ) /*0xffd82e40*/\n {\n do /*0xffd82e90*/\n {\n if ( n0x96 >= 0x96 ) /*0xffd82e4c*/\n break; /*0xffd82e4c*/\n sub_FFD7FA46(0x64u); /*0xffd82e51*/\n i_3 = 0; /*0xffd82e56*/\n if ( i ) /*0xffd82e5a*/\n {\n do /*0xffd82e83*/\n {\n if ( ((1 << i_3) & v6) != 0 && (sub_FFD8CCA5((unsigned __int16 *)(v20[i_3] + 82)) & 0x2000) != 0 ) /*0xffd82e7b*/\n v6 &= ~(1 << i_3); /*0xffd82e7d*/\n ++i_3; /*0xffd82e80*/\n }\n while ( i_3 < i ); /*0xffd82e83*/\n n0x96 = n0x96_1; /*0xffd82e85*/\n }\n n0x96_1 = ++n0x96; /*0xffd82e8a*/\n }\n while ( v6 ); /*0xffd82e90*/\n if ( v6 ) /*0xffd82e94*/\n {\n for ( k = 0; k < i; ++k ) /*0xffd82e9e*/\n {\n if ( ((1 << k) & v6) != 0 ) /*0xffd82ea9*/\n {\n v12 = v20[k]; /*0xffd82eab*/\n sub_FFD8CC85(1); /*0xffd82eb9*/\n sub_FFD8CC4F(v12 + 80, 32); /*0xffd82ec5*/\n }\n }\n n0x96_2 = 0; /*0xffd82ecf*/\n n0x96_1 = 0; /*0xffd82ed1*/\n do /*0xffd82f1f*/\n {\n if ( n0x96_2 >= 0x96 ) /*0xffd82edb*/\n break; /*0xffd82edb*/\n sub_FFD7FA46(0x64u); /*0xffd82ee0*/\n i_4 = 0; /*0xffd82ee5*/\n if ( i ) /*0xffd82ee9*/\n {\n do /*0xffd82f12*/\n {\n if ( ((1 << i_4) & v6) != 0 && (sub_FFD8CCA5((unsigned __int16 *)(v20[i_4] + 82)) & 0x2000) != 0 ) /*0xffd82f0a*/\n v6 &= ~(1 << i_4); /*0xffd82f0c*/\n ++i_4; /*0xffd82f0f*/\n }\n while ( i_4 < i ); /*0xffd82f12*/\n n0x96_2 = n0x96_1; /*0xffd82f14*/\n }\n n0x96_1 = ++n0x96_2; /*0xffd82f19*/\n }\n while ( v6 ); /*0xffd82f1f*/\n }\n }\n }\n return 0; /*0xffd82f21*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd932d4","name":"aDwrPchpcierpsp","string":"DWR: PchPcieRpSpeedChange() End\n"},{"addr":"0xffd8bffd","name":"sub_FFD8BFFD"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd9318c","name":"aEHsPurleysktpk_5","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c"},{"addr":"0xffd91b10","name":"aBoolean01","string":"((BOOLEAN)(0==1))"},{"addr":"0xffd8d75c","name":"sub_FFD8D75C"},{"addr":"0xffd8cc85","name":"sub_FFD8CC85"},{"addr":"0xffd8cc4f","name":"sub_FFD8CC4F"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd826ae","name":"sub_FFD826AE"},{"addr":"0xffd7fa46","name":"sub_FFD7FA46"},{"addr":"0xffd8d59a","name":"sub_FFD8D59A"}]} \ No newline at end of file +int __fastcall PchPcieRpSpeedChange(int a1, int a2) +{ + unsigned __int8 i_1; // al + unsigned int i_2; // esi + unsigned int i; // ebx + int v5; // eax + int v6; // edi + unsigned int j; // esi + int v8; // ebp + unsigned int n0x96; // ebp + unsigned int i_3; // esi + unsigned int k; // ebp + int v12; // esi + unsigned int n0x96_2; // ebp + unsigned int i_4; // esi + unsigned int n0x96_1; // [esp+14h] [ebp-60h] BYREF + unsigned int v17; // [esp+18h] [ebp-5Ch] + int v18; // [esp+1Ch] [ebp-58h] + int v19; // [esp+20h] [ebp-54h] + _DWORD v20[20]; // [esp+24h] [ebp-50h] + + v18 = a2; /*0xffd82d36*/ + v19 = a1; /*0xffd82d3a*/ + if ( (unsigned __int8)sub_FFD8D59A() ) + { + DebugPrint(64, (int)"DWR: PchPcieRpSpeedChange() End\ +"); + } + else + { + i_1 = sub_FFD8BFFD(); /*0xffd82d5a*/ + i_2 = 0; /*0xffd82d5f*/ + for ( i = i_1; i_2 < i; ++i_2 ) /*0xffd82d66*/ + { + v20[i_2] = 0; /*0xffd82d68*/ + if ( sub_FFD8D75C(&n0x96_1) >= 0 ) /*0xffd82d80*/ + { + v20[i_2] = sub_FFD8CBBA(0, v17, n0x96_1); /*0xffd82db2*/ + } + else + { + v5 = GetReportStatusCodePpi(); /*0xffd82d82*/ + if ( v5 ) /*0xffd82d89*/ + (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd82d9a*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c", + 822, + "((BOOLEAN)(0==1))"); + } + } + v6 = 0; /*0xffd82dbb*/ + for ( j = 0; j < i; ++j ) /*0xffd82dc1*/ + { + v8 = v20[j]; /*0xffd82dc3*/ + if ( v8 ) /*0xffd82dc9*/ + { + if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v20[j]) != 0xFFFF ) /*0xffd82dda*/ + { + v17 = *(_DWORD *)(v8 + 76) & 0xF; /*0xffd82de2*/ + if ( v17 > 1 && !sub_FFD826AE(v19 + 28, j, *(_BYTE *)(j + v18)) ) /*0xffd82dfd*/ + { + sub_FFD8CC85(v17); /*0xffd82e13*/ + if ( (sub_FFD8CCA5((unsigned __int16 *)(v8 + 90)) & 0x40) != 0 ) /*0xffd82e23*/ + { + sub_FFD8CC4F(v8 + 80, 32); /*0xffd82e2b*/ + v6 |= 1 << j; /*0xffd82e30*/ + } + } + } + } + } + n0x96 = 0; /*0xffd82e38*/ + n0x96_1 = 0; /*0xffd82e3a*/ + if ( v6 ) /*0xffd82e40*/ + { + do /*0xffd82e90*/ + { + if ( n0x96 >= 0x96 ) /*0xffd82e4c*/ + break; /*0xffd82e4c*/ + sub_FFD7FA46(0x64u); /*0xffd82e51*/ + i_3 = 0; /*0xffd82e56*/ + if ( i ) /*0xffd82e5a*/ + { + do /*0xffd82e83*/ + { + if ( ((1 << i_3) & v6) != 0 && (sub_FFD8CCA5((unsigned __int16 *)(v20[i_3] + 82)) & 0x2000) != 0 ) /*0xffd82e7b*/ + v6 &= ~(1 << i_3); /*0xffd82e7d*/ + ++i_3; /*0xffd82e80*/ + } + while ( i_3 < i ); /*0xffd82e83*/ + n0x96 = n0x96_1; /*0xffd82e85*/ + } + n0x96_1 = ++n0x96; /*0xffd82e8a*/ + } + while ( v6 ); /*0xffd82e90*/ + if ( v6 ) /*0xffd82e94*/ + { + for ( k = 0; k < i; ++k ) /*0xffd82e9e*/ + { + if ( ((1 << k) & v6) != 0 ) /*0xffd82ea9*/ + { + v12 = v20[k]; /*0xffd82eab*/ + sub_FFD8CC85(1); /*0xffd82eb9*/ + sub_FFD8CC4F(v12 + 80, 32); /*0xffd82ec5*/ + } + } + n0x96_2 = 0; /*0xffd82ecf*/ + n0x96_1 = 0; /*0xffd82ed1*/ + do /*0xffd82f1f*/ + { + if ( n0x96_2 >= 0x96 ) /*0xffd82edb*/ + break; /*0xffd82edb*/ + sub_FFD7FA46(0x64u); /*0xffd82ee0*/ + i_4 = 0; /*0xffd82ee5*/ + if ( i ) /*0xffd82ee9*/ + { + do /*0xffd82f12*/ + { + if ( ((1 << i_4) & v6) != 0 && (sub_FFD8CCA5((unsigned __int16 *)(v20[i_4] + 82)) & 0x2000) != 0 ) /*0xffd82f0a*/ + v6 &= ~(1 << i_4); /*0xffd82f0c*/ + ++i_4; /*0xffd82f0f*/ + } + while ( i_4 < i ); /*0xffd82f12*/ + n0x96_2 = n0x96_1; /*0xffd82f14*/ + } + n0x96_1 = ++n0x96_2; /*0xffd82f19*/ + } + while ( v6 ); /*0xffd82f1f*/ + } + } + } + return 0; /*0xffd82f21*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82f2b.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82f2b.c index d5e25d8..73b29a9 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82f2b.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd82f2b.c @@ -1,2 +1,40 @@ -// 0xffd82f2b -{"addr":"0xffd82f2b","code":"bool __fastcall GetPciEndpointInfo(int a1, unsigned __int8 a2, unsigned __int16 *a3)\n{\n char v5; // bl\n unsigned int v7; // ebp\n unsigned __int8 v8; // al\n unsigned __int16 *v9; // ecx\n unsigned int *v11; // [esp+1Ch] [ebp+4h]\n\n v5 = 0; /*0xffd82f40*/\n *(_DWORD *)(a3 + 1) = 0xFFFF; /*0xffd82f42*/\n *a3 = -1; /*0xffd82f49*/\n if ( (sub_FFD8CCA5((unsigned __int16 *)(a1 + 90)) & 0x40) == 0 ) /*0xffd82f56*/\n return 0; /*0xffd82f58*/\n *(_DWORD *)(a1 + 24) = *(_DWORD *)(a1 + 24) & 0xFF0000FF | ((a2 | (a2 << 8)) << 8); /*0xffd82f7c*/\n v11 = (unsigned int *)sub_FFD8CBBA(a2, 0, 0); /*0xffd82f8b*/\n sub_FFD8CCD3(v11, 0); /*0xffd82f8f*/\n v7 = *v11; /*0xffd82f94*/\n *(_DWORD *)a3 = *v11; /*0xffd82f9c*/\n if ( v7 != -1 ) /*0xffd82fa6*/\n {\n v8 = sub_FFD90A71(0, HIWORD(v7)); /*0xffd82fb0*/\n if ( v8 ) /*0xffd82fb9*/\n {\n v9 = (unsigned __int16 *)((char *)v11 + v8 + 12); /*0xffd82fc5*/\n v5 = *(_BYTE *)v9 & 0xF; /*0xffd82fc9*/\n *((_BYTE *)a3 + 5) = ((unsigned __int16)sub_FFD8CCA5(v9) >> 4) & 0x3F; /*0xffd82fd7*/\n }\n *((_BYTE *)a3 + 4) = v5; /*0xffd82fda*/\n }\n *(_DWORD *)(a1 + 24) &= 0xFF0000FF; /*0xffd82fe5*/\n DebugPrint(\n 64,\n (int)\"VID: %04X DID: %04X MLS: %d MLW: %d\\n\",\n *a3,\n a3[1],\n *((unsigned __int8 *)a3 + 4),\n *((unsigned __int8 *)a3 + 5));\n return v7 != -1; /*0xffd83012*/\n}","refs":[{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8ccd3","name":"sub_FFD8CCD3"},{"addr":"0xffd90a71","name":"sub_FFD90A71"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd932f8","name":"aVid04xDid04xMl","string":"VID: %04X DID: %04X MLS: %d MLW: %d\n"}]} \ No newline at end of file +bool __fastcall GetPciEndpointInfo(int a1, unsigned __int8 a2, unsigned __int16 *a3) +{ + char v5; // bl + unsigned int v7; // ebp + unsigned __int8 v8; // al + unsigned __int16 *v9; // ecx + unsigned int *v11; // [esp+1Ch] [ebp+4h] + + v5 = 0; /*0xffd82f40*/ + *(_DWORD *)(a3 + 1) = 0xFFFF; /*0xffd82f42*/ + *a3 = -1; /*0xffd82f49*/ + if ( (sub_FFD8CCA5((unsigned __int16 *)(a1 + 90)) & 0x40) == 0 ) /*0xffd82f56*/ + return 0; /*0xffd82f58*/ + *(_DWORD *)(a1 + 24) = *(_DWORD *)(a1 + 24) & 0xFF0000FF | ((a2 | (a2 << 8)) << 8); /*0xffd82f7c*/ + v11 = (unsigned int *)sub_FFD8CBBA(a2, 0, 0); /*0xffd82f8b*/ + sub_FFD8CCD3(v11, 0); /*0xffd82f8f*/ + v7 = *v11; /*0xffd82f94*/ + *(_DWORD *)a3 = *v11; /*0xffd82f9c*/ + if ( v7 != -1 ) /*0xffd82fa6*/ + { + v8 = sub_FFD90A71(0, HIWORD(v7)); /*0xffd82fb0*/ + if ( v8 ) /*0xffd82fb9*/ + { + v9 = (unsigned __int16 *)((char *)v11 + v8 + 12); /*0xffd82fc5*/ + v5 = *(_BYTE *)v9 & 0xF; /*0xffd82fc9*/ + *((_BYTE *)a3 + 5) = ((unsigned __int16)sub_FFD8CCA5(v9) >> 4) & 0x3F; /*0xffd82fd7*/ + } + *((_BYTE *)a3 + 4) = v5; /*0xffd82fda*/ + } + *(_DWORD *)(a1 + 24) &= 0xFF0000FF; /*0xffd82fe5*/ + DebugPrint( + 64, + (int)"VID: %04X DID: %04X MLS: %d MLW: %d\ +", + *a3, + a3[1], + *((unsigned __int8 *)a3 + 4), + *((unsigned __int8 *)a3 + 5)); + return v7 != -1; /*0xffd83012*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83019.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83019.c index 60756cb..a1a95a8 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83019.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83019.c @@ -1,2 +1,82 @@ -// 0xffd83019 -{"addr":"0xffd83019","code":"int DirtyWarmResetExecute()\n{\n int result; // eax\n int v1; // eax\n int v2; // esi\n int v3; // eax\n int *v4; // eax\n int *v5; // esi\n int v6; // ecx\n int v7; // eax\n int v8; // esi\n int v9; // eax\n _DWORD v10[2]; // [esp+0h] [ebp-10h] BYREF\n char v11[8]; // [esp+8h] [ebp-8h] BYREF\n\n result = sub_FFD8D59A(); /*0xffd8301c*/\n if ( (_BYTE)result )\n {\n DebugPrint(0x80000000, (int)\"\\nDirtyWarmResetExecute() - Start\\n\"); /*0xffd83037*/\n v1 = sub_FFD85F37(); /*0xffd8303c*/\n v2 = sub_FFD8D921(v1); /*0xffd83048*/\n if ( GetPciEndpointInfo(v2, 2u, (unsigned __int16 *)v11) )\n {\n *(_DWORD *)(v2 + 24) = *(_DWORD *)(v2 + 24) & 0xFF0000FF | 0x20200; /*0xffd83083*/\n v3 = sub_FFD8CBBA(2u, 0, 0); /*0xffd83086*/\n sub_FFD8CCD3(v3, 0); /*0xffd83090*/\n }\n else\n {\n DebugPrint(0x80000000, (int)\"ERROR: DirtyWarmReset: can't get end point device available...\\n\");\n }\n v4 = (int *)sub_FFD8CC10(); /*0xffd83099*/\n v5 = v4; /*0xffd8309e*/\n v6 = *v4; /*0xffd830a8*/\n if ( (*v4 & 0x2000000) != 0 && v6 != -1 ) /*0xffd830b5*/\n *v4 = v6 | 0x4000000; /*0xffd830b9*/\n DebugPrint(64, (int)\"DWR: Sending DirtyWarmReset Notification ...\\n\");\n InstallPpi(&unk_FFD93FB4); /*0xffd830cc*/\n DebugPrint(64, (int)\"DWR: DirtyWarmReset Notification completed\\n\");\n if ( (*v5 & 0x2000000) != 0 && *v5 != -1 )\n {\n DebugPrint(64, (int)\"\\nDWR: Stalling in DWR flow to allow error collection.\\n\");\n while ( (*v5 & 0x4000000) != 0 ) /*0xffd83100*/\n ; /*0xffd830fc*/\n }\n v7 = sub_FFD8AD54(); /*0xffd83102*/\n v8 = (*(int (__cdecl **)(int, void *, _DWORD, _DWORD, _DWORD *))(*(_DWORD *)v7 + 32))(v7, &unk_FFD97FAC, 0, 0, v10); /*0xffd8311c*/\n if ( v8 < 0 )\n {\n DebugPrint(0x80000000, (int)\"\\nDWR: ERROR: Can't get reset PPI\\n\");\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v8); /*0xffd83142*/\n v9 = GetReportStatusCodePpi(); /*0xffd8314a*/\n if ( v9 ) /*0xffd83151*/\n (*(void (__cdecl **)(const char *, int, const char *))(v9 + 4))( /*0xffd83162*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchRootPorts.c\",\n 1104,\n \"!EFI_ERROR (Status)\");\n }\n else\n {\n (*(void (__cdecl **)(_DWORD, int))v10[0])(v10[0], 5); /*0xffd8312a*/\n }\n DebugPrint(0x80000000, (int)\"\\nDWR: Waiting for reset.\\n\");\n v10[1] = 0; /*0xffd83175*/\n while ( 1 ) /*0xffd83179*/\n ; /*0xffd83179*/\n }\n return result; /*0xffd83182*/\n}","refs":[{"addr":"0xffd8d59a","name":"sub_FFD8D59A"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd85f37","name":"sub_FFD85F37"},{"addr":"0xffd8d921","name":"sub_FFD8D921"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8ccd3","name":"sub_FFD8CCD3"},{"addr":"0xffd82f2b","name":"GetPciEndpointInfo"},{"addr":"0xffd8cc10","name":"sub_FFD8CC10"},{"addr":"0xffd7f948","name":"InstallPpi"},{"addr":"0xffd93fb4","name":"unk_FFD93FB4"},{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd97fac","name":"unk_FFD97FAC"},{"addr":"0xffd93418","name":"aDwrErrorCanTGe","string":"\nDWR: ERROR: Can't get reset PPI\n"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd9318c","name":"aEHsPurleysktpk_5","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffd9343c","name":"aDwrWaitingForR","string":"\nDWR: Waiting for reset.\n"}]} \ No newline at end of file +int DirtyWarmResetExecute() +{ + int result; // eax + int v1; // eax + int v2; // esi + int v3; // eax + int *v4; // eax + int *v5; // esi + int v6; // ecx + int v7; // eax + int v8; // esi + int v9; // eax + _DWORD v10[2]; // [esp+0h] [ebp-10h] BYREF + char v11[8]; // [esp+8h] [ebp-8h] BYREF + + result = sub_FFD8D59A(); /*0xffd8301c*/ + if ( (_BYTE)result ) + { + DebugPrint(0x80000000, (int)"\ +DirtyWarmResetExecute() - Start\ +"); /*0xffd83037*/ + v1 = sub_FFD85F37(); /*0xffd8303c*/ + v2 = sub_FFD8D921(v1); /*0xffd83048*/ + if ( GetPciEndpointInfo(v2, 2u, (unsigned __int16 *)v11) ) + { + *(_DWORD *)(v2 + 24) = *(_DWORD *)(v2 + 24) & 0xFF0000FF | 0x20200; /*0xffd83083*/ + v3 = sub_FFD8CBBA(2u, 0, 0); /*0xffd83086*/ + sub_FFD8CCD3(v3, 0); /*0xffd83090*/ + } + else + { + DebugPrint(0x80000000, (int)"ERROR: DirtyWarmReset: can't get end point device available...\ +"); + } + v4 = (int *)sub_FFD8CC10(); /*0xffd83099*/ + v5 = v4; /*0xffd8309e*/ + v6 = *v4; /*0xffd830a8*/ + if ( (*v4 & 0x2000000) != 0 && v6 != -1 ) /*0xffd830b5*/ + *v4 = v6 | 0x4000000; /*0xffd830b9*/ + DebugPrint(64, (int)"DWR: Sending DirtyWarmReset Notification ...\ +"); + InstallPpi(&unk_FFD93FB4); /*0xffd830cc*/ + DebugPrint(64, (int)"DWR: DirtyWarmReset Notification completed\ +"); + if ( (*v5 & 0x2000000) != 0 && *v5 != -1 ) + { + DebugPrint(64, (int)"\ +DWR: Stalling in DWR flow to allow error collection.\ +"); + while ( (*v5 & 0x4000000) != 0 ) /*0xffd83100*/ + ; /*0xffd830fc*/ + } + v7 = sub_FFD8AD54(); /*0xffd83102*/ + v8 = (*(int (__cdecl **)(int, void *, _DWORD, _DWORD, _DWORD *))(*(_DWORD *)v7 + 32))(v7, &unk_FFD97FAC, 0, 0, v10); /*0xffd8311c*/ + if ( v8 < 0 ) + { + DebugPrint(0x80000000, (int)"\ +DWR: ERROR: Can't get reset PPI\ +"); + DebugPrint(0x80000000, (int)"\ +ASSERT_EFI_ERROR (Status = %r)\ +", v8); /*0xffd83142*/ + v9 = GetReportStatusCodePpi(); /*0xffd8314a*/ + if ( v9 ) /*0xffd83151*/ + (*(void (__cdecl **)(const char *, int, const char *))(v9 + 4))( /*0xffd83162*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c", + 1104, + "!EFI_ERROR (Status)"); + } + else + { + (*(void (__cdecl **)(_DWORD, int))v10[0])(v10[0], 5); /*0xffd8312a*/ + } + DebugPrint(0x80000000, (int)"\ +DWR: Waiting for reset.\ +"); + v10[1] = 0; /*0xffd83175*/ + while ( 1 ) /*0xffd83179*/ + ; /*0xffd83179*/ + } + return result; /*0xffd83182*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83186.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83186.c index 169dc3d..d6fe305 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83186.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83186.c @@ -1,2 +1,42 @@ -// 0xffd83186 -{"addr":"0xffd83186","code":"int __thiscall sub_FFD83186(char *this)\n{\n int v2; // eax\n int v3; // eax\n int v4; // eax\n int v5; // eax\n int v6; // esi\n double v8; // [esp-4h] [ebp-20h]\n int v9; // [esp+14h] [ebp-8h] BYREF\n\n v2 = sub_FFD8D75C(&v9); /*0xffd8319f*/\n if ( v2 < 0 ) /*0xffd831b1*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v2); /*0xffd831be*/\n v3 = GetReportStatusCodePpi(); /*0xffd831c6*/\n if ( v3 ) /*0xffd831cd*/\n (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd831d6*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchRootPorts.c\",\n 1132,\n \"!EFI_ERROR (Status)\");\n }\n v4 = sub_FFD9041E(&v9); /*0xffd831e8*/\n if ( v4 < 0 ) /*0xffd831f0*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v4); /*0xffd831fd*/\n v5 = GetReportStatusCodePpi(); /*0xffd83205*/\n if ( v5 ) /*0xffd8320c*/\n (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd83215*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchRootPorts.c\",\n 1135,\n \"!EFI_ERROR (Status)\");\n }\n v6 = (unsigned __int16)v9 >> 14; /*0xffd83225*/\n LODWORD(v8) = off_FFD93F7C[v6]; // \"4x1\" /*0xffd83228*/\n DebugPrint(64, (int)\"PCIe SP%c is %a\\n\", this + 65, v8); /*0xffd83237*/\n return v6; /*0xffd83241*/\n}","refs":[{"addr":"0xffd8d75c","name":"sub_FFD8D75C"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd9318c","name":"aEHsPurleysktpk_5","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffd9041e","name":"sub_FFD9041E"},{"addr":"0xffd93f7c","name":"off_FFD93F7C"},{"addr":"0xffd93458","name":"aPcieSpCIsA","string":"PCIe SP%c is %a\n"}]} \ No newline at end of file +int __thiscall sub_FFD83186(char *this) +{ + int v2; // eax + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // esi + double v8; // [esp-4h] [ebp-20h] + int v9; // [esp+14h] [ebp-8h] BYREF + + v2 = sub_FFD8D75C(&v9); /*0xffd8319f*/ + if ( v2 < 0 ) /*0xffd831b1*/ + { + DebugPrint(0x80000000, (int)"\ +ASSERT_EFI_ERROR (Status = %r)\ +", v2); /*0xffd831be*/ + v3 = GetReportStatusCodePpi(); /*0xffd831c6*/ + if ( v3 ) /*0xffd831cd*/ + (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd831d6*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c", + 1132, + "!EFI_ERROR (Status)"); + } + v4 = sub_FFD9041E(&v9); /*0xffd831e8*/ + if ( v4 < 0 ) /*0xffd831f0*/ + { + DebugPrint(0x80000000, (int)"\ +ASSERT_EFI_ERROR (Status = %r)\ +", v4); /*0xffd831fd*/ + v5 = GetReportStatusCodePpi(); /*0xffd83205*/ + if ( v5 ) /*0xffd8320c*/ + (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd83215*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c", + 1135, + "!EFI_ERROR (Status)"); + } + v6 = (unsigned __int16)v9 >> 14; /*0xffd83225*/ + LODWORD(v8) = off_FFD93F7C[v6]; // "4x1" /*0xffd83228*/ + DebugPrint(64, (int)"PCIe SP%c is %a\ +", this + 65, v8); /*0xffd83237*/ + return v6; /*0xffd83241*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83249.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83249.c index 441c7d3..064f094 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83249.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83249.c @@ -1,2 +1,115 @@ -// 0xffd83249 -{"addr":"0xffd83249","code":"int sub_FFD83249()\n{\n int n2; // esi\n char *n3_1; // edi\n int v2; // ebx\n int v3; // eax\n int v4; // eax\n int v5; // eax\n int v6; // eax\n unsigned int i; // ebp\n int v8; // eax\n int v9; // ecx\n int v10; // esi\n int v12; // [esp+14h] [ebp-30h]\n int v13; // [esp+1Ch] [ebp-28h]\n int n2_2; // [esp+28h] [ebp-1Ch]\n int v15; // [esp+2Ch] [ebp-18h]\n unsigned int n3; // [esp+30h] [ebp-14h]\n int n2_1; // [esp+34h] [ebp-10h]\n int n4; // [esp+38h] [ebp-Ch]\n int n4_1; // [esp+3Ch] [ebp-8h]\n int n4_2; // [esp+40h] [ebp-4h]\n\n DebugPrint(64, (int)\"PchConfigurePsfGrantCountsForPcie() Start\\n\"); /*0xffd83257*/\n n2 = sub_FFD8BE68(); /*0xffd83263*/\n n2_2 = n2; /*0xffd83265*/\n if ( n2 == 2 ) /*0xffd8326c*/\n n3 = 3; /*0xffd8326e*/\n else\n n3 = 5; /*0xffd83288*/\n n3_1 = 0; /*0xffd832a0*/\n v2 = 0; /*0xffd832a2*/\n v15 = 0; /*0xffd832a6*/\n do /*0xffd8341f*/\n {\n v3 = sub_FFD83186(n3_1); /*0xffd832ad*/\n if ( !v3 ) /*0xffd832b5*/\n {\n n2_1 = 1; /*0xffd83325*/\n n4 = 1; /*0xffd83329*/\n goto LABEL_16; /*0xffd83329*/\n }\n v4 = v3 - 1; /*0xffd832b7*/\n if ( !v4 ) /*0xffd832ba*/\n {\n n2_1 = 2; /*0xffd83313*/\n n4 = 4; /*0xffd8331b*/\nLABEL_16:\n n4_2 = 1; /*0xffd8332d*/\n n4_1 = 1; /*0xffd83331*/\n goto LABEL_17; /*0xffd83331*/\n }\n v5 = v4 - 1; /*0xffd832bc*/\n if ( v5 ) /*0xffd832bf*/\n {\n if ( v5 != 1 ) /*0xffd832c4*/\n {\n v6 = GetReportStatusCodePpi(); /*0xffd832c6*/\n if ( v6 ) /*0xffd832cd*/\n (*(void (__cdecl **)(const char *, int, const char *))(v6 + 4))( /*0xffd832e2*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchRootPorts.c\",\n 1230,\n \"((BOOLEAN)(0==1))\");\n goto LABEL_23; /*0xffd832e8*/\n }\n n2_1 = 4; /*0xffd832ed*/\n n4_1 = 4; /*0xffd832f1*/\n }\n else\n {\n n2_1 = 2; /*0xffd832f7*/\n n4_1 = 2; /*0xffd832ff*/\n }\n n4 = 4; /*0xffd83307*/\n n4_2 = 4; /*0xffd8330b*/\nLABEL_17:\n for ( i = 0; i < 4; ++i ) /*0xffd83335*/\n {\n if ( n2 == 2 ) /*0xffd8333a*/\n {\n v8 = (unsigned __int8)byte_FFD93FCC[v2]; /*0xffd83343*/\n v12 = (unsigned __int8)byte_FFD93FCD[v2]; /*0xffd8334a*/\n v9 = (unsigned __int8)byte_FFD93F44[4 * (_DWORD)n3_1 + i]; /*0xffd8334e*/\n }\n else\n {\n v8 = (unsigned __int8)byte_FFD93F8C[v2]; /*0xffd8335f*/\n v12 = (unsigned __int8)byte_FFD93F8D[v2]; /*0xffd83366*/\n v9 = (unsigned __int8)byte_FFD93F5C[4 * (_DWORD)n3_1 + i]; /*0xffd8336a*/\n }\n v10 = *(&n2_1 + i); /*0xffd83372*/\n v13 = v9; /*0xffd8337f*/\n DebugPrint(64, (int)\"DGCR%d = %d\\n\", v8, v10); /*0xffd83387*/\n sub_FFD8C578(-32, v10); /*0xffd8339f*/\n DebugPrint(64, (int)\"DGCR%d = %d\\n\", v12, v10); /*0xffd833b0*/\n sub_FFD8C578(-32, v10); /*0xffd833c8*/\n DebugPrint(64, (int)\"PG1_TGT%d = %d\\n\", v13, v10); /*0xffd833d9*/\n sub_FFD8C578(-32, v10); /*0xffd833f4*/\n n2 = n2_2; /*0xffd833f9*/\n v2 += 2; /*0xffd833ff*/\n }\n v2 = v15; /*0xffd8340c*/\nLABEL_23:\n ++n3_1; /*0xffd83413*/\n v2 += 8; /*0xffd83414*/\n v15 = v2; /*0xffd83417*/\n }\n while ( (unsigned int)n3_1 < n3 ); /*0xffd8341f*/\n return DebugPrint(64, (int)\"PchConfigurePsfGrantCountsForPcie() End\\n\"); /*0xffd83433*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd9346c","name":"aPchconfigureps","string":"PchConfigurePsfGrantCountsForPcie() Start\n"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd83186","name":"sub_FFD83186"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd9318c","name":"aEHsPurleysktpk_5","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c"},{"addr":"0xffd91b10","name":"aBoolean01","string":"((BOOLEAN)(0==1))"},{"addr":"0xffd93fcc","name":"byte_FFD93FCC"},{"addr":"0xffd93fcd","name":"byte_FFD93FCD"},{"addr":"0xffd93f44","name":"byte_FFD93F44"},{"addr":"0xffd93f8c","name":"byte_FFD93F8C"},{"addr":"0xffd93f8d","name":"byte_FFD93F8D"},{"addr":"0xffd93f5c","name":"byte_FFD93F5C"},{"addr":"0xffd93498","name":"aDgcrDD","string":"DGCR%d = %d\n"},{"addr":"0xffd8c578","name":"sub_FFD8C578"},{"addr":"0xffd934a8","name":"aPg1TgtDD","string":"PG1_TGT%d = %d\n"},{"addr":"0xffd934b8","name":"aPchconfigureps_0","string":"PchConfigurePsfGrantCountsForPcie() End\n"}]} \ No newline at end of file +int sub_FFD83249() +{ + int n2; // esi + char *n3_1; // edi + int v2; // ebx + int v3; // eax + int v4; // eax + int v5; // eax + int v6; // eax + unsigned int i; // ebp + int v8; // eax + int v9; // ecx + int v10; // esi + int v12; // [esp+14h] [ebp-30h] + int v13; // [esp+1Ch] [ebp-28h] + int n2_2; // [esp+28h] [ebp-1Ch] + int v15; // [esp+2Ch] [ebp-18h] + unsigned int n3; // [esp+30h] [ebp-14h] + int n2_1; // [esp+34h] [ebp-10h] + int n4; // [esp+38h] [ebp-Ch] + int n4_1; // [esp+3Ch] [ebp-8h] + int n4_2; // [esp+40h] [ebp-4h] + + DebugPrint(64, (int)"PchConfigurePsfGrantCountsForPcie() Start\ +"); /*0xffd83257*/ + n2 = sub_FFD8BE68(); /*0xffd83263*/ + n2_2 = n2; /*0xffd83265*/ + if ( n2 == 2 ) /*0xffd8326c*/ + n3 = 3; /*0xffd8326e*/ + else + n3 = 5; /*0xffd83288*/ + n3_1 = 0; /*0xffd832a0*/ + v2 = 0; /*0xffd832a2*/ + v15 = 0; /*0xffd832a6*/ + do /*0xffd8341f*/ + { + v3 = sub_FFD83186(n3_1); /*0xffd832ad*/ + if ( !v3 ) /*0xffd832b5*/ + { + n2_1 = 1; /*0xffd83325*/ + n4 = 1; /*0xffd83329*/ + goto LABEL_16; /*0xffd83329*/ + } + v4 = v3 - 1; /*0xffd832b7*/ + if ( !v4 ) /*0xffd832ba*/ + { + n2_1 = 2; /*0xffd83313*/ + n4 = 4; /*0xffd8331b*/ +LABEL_16: + n4_2 = 1; /*0xffd8332d*/ + n4_1 = 1; /*0xffd83331*/ + goto LABEL_17; /*0xffd83331*/ + } + v5 = v4 - 1; /*0xffd832bc*/ + if ( v5 ) /*0xffd832bf*/ + { + if ( v5 != 1 ) /*0xffd832c4*/ + { + v6 = GetReportStatusCodePpi(); /*0xffd832c6*/ + if ( v6 ) /*0xffd832cd*/ + (*(void (__cdecl **)(const char *, int, const char *))(v6 + 4))( /*0xffd832e2*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c", + 1230, + "((BOOLEAN)(0==1))"); + goto LABEL_23; /*0xffd832e8*/ + } + n2_1 = 4; /*0xffd832ed*/ + n4_1 = 4; /*0xffd832f1*/ + } + else + { + n2_1 = 2; /*0xffd832f7*/ + n4_1 = 2; /*0xffd832ff*/ + } + n4 = 4; /*0xffd83307*/ + n4_2 = 4; /*0xffd8330b*/ +LABEL_17: + for ( i = 0; i < 4; ++i ) /*0xffd83335*/ + { + if ( n2 == 2 ) /*0xffd8333a*/ + { + v8 = (unsigned __int8)byte_FFD93FCC[v2]; /*0xffd83343*/ + v12 = (unsigned __int8)byte_FFD93FCD[v2]; /*0xffd8334a*/ + v9 = (unsigned __int8)byte_FFD93F44[4 * (_DWORD)n3_1 + i]; /*0xffd8334e*/ + } + else + { + v8 = (unsigned __int8)byte_FFD93F8C[v2]; /*0xffd8335f*/ + v12 = (unsigned __int8)byte_FFD93F8D[v2]; /*0xffd83366*/ + v9 = (unsigned __int8)byte_FFD93F5C[4 * (_DWORD)n3_1 + i]; /*0xffd8336a*/ + } + v10 = *(&n2_1 + i); /*0xffd83372*/ + v13 = v9; /*0xffd8337f*/ + DebugPrint(64, (int)"DGCR%d = %d\ +", v8, v10); /*0xffd83387*/ + sub_FFD8C578(-32, v10); /*0xffd8339f*/ + DebugPrint(64, (int)"DGCR%d = %d\ +", v12, v10); /*0xffd833b0*/ + sub_FFD8C578(-32, v10); /*0xffd833c8*/ + DebugPrint(64, (int)"PG1_TGT%d = %d\ +", v13, v10); /*0xffd833d9*/ + sub_FFD8C578(-32, v10); /*0xffd833f4*/ + n2 = n2_2; /*0xffd833f9*/ + v2 += 2; /*0xffd833ff*/ + } + v2 = v15; /*0xffd8340c*/ +LABEL_23: + ++n3_1; /*0xffd83413*/ + v2 += 8; /*0xffd83414*/ + v15 = v2; /*0xffd83417*/ + } + while ( (unsigned int)n3_1 < n3 ); /*0xffd8341f*/ + return DebugPrint(64, (int)"PchConfigurePsfGrantCountsForPcie() End\ +"); /*0xffd83433*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83452.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83452.c index bf80416..bc62cd4 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83452.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd83452.c @@ -1,2 +1 @@ -// 0xffd83452 -{"addr":"0xffd83452","code":null,"error":"Decompilation failed"} \ No newline at end of file +/* Decompilation failed at 0xffd83452 */ diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd840b0.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd840b0.c index 7098cf0..3bdf78b 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd840b0.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd840b0.c @@ -1,2 +1 @@ -// 0xffd840b0 -{"addr":"0xffd840b0","code":null,"error":"Decompilation failed"} \ No newline at end of file +/* Decompilation failed at 0xffd840b0 */ diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd84b0b.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd84b0b.c index 116388b..e20c1d9 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd84b0b.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd84b0b.c @@ -1,2 +1 @@ -// 0xffd84b0b -{"addr":"0xffd84b0b","code":null,"error":"Decompilation failed"} \ No newline at end of file +/* Decompilation failed at 0xffd84b0b */ diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd84f8b.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd84f8b.c index 658e3b1..1ef26f4 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd84f8b.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd84f8b.c @@ -1,2 +1 @@ -// 0xffd84f8b -{"addr":"0xffd84f8b","code":null,"error":"Decompilation failed"} \ No newline at end of file +/* Decompilation failed at 0xffd84f8b */ diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85246.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85246.c index 43fd830..2f56084 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85246.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85246.c @@ -1,2 +1,46 @@ -// 0xffd85246 -{"addr":"0xffd85246","code":"int __fastcall sub_FFD85246(int a1, int a2, int a3)\n{\n int n15000_6; // edi\n int v5; // ebx\n int n15000_5; // esi\n unsigned __int8 v7; // al\n int v8; // ebp\n _DWORD *n15000_8; // ebp\n int v10; // edi\n int v11; // esi\n unsigned __int8 v12; // al\n int v13; // edi\n unsigned int v14; // eax\n int v15; // ecx\n unsigned __int8 v16; // al\n int v17; // esi\n int v18; // eax\n bool v19; // zf\n unsigned __int16 *i; // ecx\n int v21; // ecx\n _WORD *n15000_7; // esi\n int v23; // edi\n int v24; // edx\n int v25; // ebx\n int v26; // esi\n int v27; // eax\n int j; // ebx\n int n15000_3; // edi\n int v30; // eax\n unsigned int j_1; // ecx\n int v32; // esi\n unsigned int v33; // edx\n int v34; // edx\n char *v35; // edi\n int v36; // ecx\n char v37; // al\n int v38; // ebx\n int v39; // edi\n int v40; // esi\n int n15000_4; // edx\n unsigned int v42; // ecx\n int v43; // eax\n int v44; // eax\n unsigned __int8 v46; // [esp+10h] [ebp-48h]\n unsigned __int8 v47; // [esp+11h] [ebp-47h]\n ... [11197 chars total]","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd93d94","name":"aPchinitrootpor","string":"PchInitRootPorts() Start\n"},{"addr":"0xffd93db0","name":"aDwrPchinitroot","string":"DWR: PchInitRootPorts() End\n"},{"addr":"0xffd8d59a","name":"sub_FFD8D59A"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8c76f","name":"sub_FFD8C76F"},{"addr":"0xffd8bffd","name":"sub_FFD8BFFD"},{"addr":"0xffd8d921","name":"sub_FFD8D921"},{"addr":"0xffd834e9","name":"sub_FFD834E9"},{"addr":"0xffd839ac","name":"sub_FFD839AC"}]}Output truncated. Run: curl -o .ida-mcp/0dd08b46-6856-4525-99b0-6ec7e22c3ec6.json http://127.0.0.1:13432/output/0dd08b46-6856-4525-99b0-6ec7e22c3ec6.json \ No newline at end of file +int __fastcall sub_FFD85246(int a1, int a2, int a3) +{ + int n15000_6; // edi + int v5; // ebx + int n15000_5; // esi + unsigned __int8 v7; // al + int v8; // ebp + _DWORD *n15000_8; // ebp + int v10; // edi + int v11; // esi + unsigned __int8 v12; // al + int v13; // edi + unsigned int v14; // eax + int v15; // ecx + unsigned __int8 v16; // al + int v17; // esi + int v18; // eax + bool v19; // zf + unsigned __int16 *i; // ecx + int v21; // ecx + _WORD *n15000_7; // esi + int v23; // edi + int v24; // edx + int v25; // ebx + int v26; // esi + int v27; // eax + int j; // ebx + int n15000_3; // edi + int v30; // eax + unsigned int j_1; // ecx + int v32; // esi + unsigned int v33; // edx + int v34; // edx + char *v35; // edi + int v36; // ecx + char v37; // al + int v38; // ebx + int v39; // edi + int v40; // esi + int n15000_4; // edx + unsigned int v42; // ecx + int v43; // eax + int v44; // eax + unsigned __int8 v46; // [esp+10h] [ebp-48h] + unsigned __int8 v47; // [esp+11h] [ebp-47h] + ... [11197 chars total] diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd858c3.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd858c3.c index 307f53e..c65e625 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd858c3.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd858c3.c @@ -1,2 +1 @@ -// 0xffd858c3 -{"addr":"0xffd858c3","code":null,"error":"Decompilation failed"} \ No newline at end of file +/* Decompilation failed at 0xffd858c3 */ diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85bc2.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85bc2.c index 3ef8fe4..5d42664 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85bc2.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85bc2.c @@ -1,2 +1 @@ -// 0xffd85bc2 -{"addr":"0xffd85bc2","code":null,"error":"Decompilation failed"} \ No newline at end of file +/* Decompilation failed at 0xffd85bc2 */ diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85f37.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85f37.c index 125f51e..141a2bf 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85f37.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd85f37.c @@ -1,2 +1,27 @@ -// 0xffd85f37 -{"addr":"0xffd85f37","code":"int sub_FFD85F37()\n{\n int v0; // eax\n int v1; // eax\n int v2; // esi\n int v3; // eax\n _DWORD v5[2]; // [esp+8h] [ebp-8h] BYREF\n\n v0 = sub_FFD8AD54(); /*0xffd85f3e*/\n v1 = (*(int (__cdecl **)(int, void *, _DWORD, _DWORD, _DWORD *))(*(_DWORD *)v0 + 32))(v0, &unk_FFD97EEC, 0, 0, v5); /*0xffd85f53*/\n v2 = v1; /*0xffd85f56*/\n if ( v1 < 0 )\n {\n DebugPrint(0x80000000, (int)\"ERROR: DWR Can't find PCH Policy (Status: %r)\\n\", v1);\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v2); /*0xffd85f78*/\n v3 = GetReportStatusCodePpi(); /*0xffd85f80*/\n if ( v3 ) /*0xffd85f88*/\n (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd85f99*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchRootPorts.c\",\n 4100,\n \"!EFI_ERROR (Status)\");\n v5[1] = 0; /*0xffd85f9f*/\n while ( 1 ) /*0xffd85fa2*/\n ; /*0xffd85fa2*/\n }\n return (unsigned __int8)(*(_DWORD *)(v5[0] + 2975) >> 18); /*0xffd85faa*/\n}","refs":[{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd97eec","name":"unk_FFD97EEC"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd93f14","name":"aErrorDwrCanTFi","string":"ERROR: DWR Can't find PCH Policy (Status: %r)\n"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd9318c","name":"aEHsPurleysktpk_5","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"}]} \ No newline at end of file +int sub_FFD85F37() +{ + int v0; // eax + int v1; // eax + int v2; // esi + int v3; // eax + _DWORD v5[2]; // [esp+8h] [ebp-8h] BYREF + + v0 = sub_FFD8AD54(); /*0xffd85f3e*/ + v1 = (*(int (__cdecl **)(int, void *, _DWORD, _DWORD, _DWORD *))(*(_DWORD *)v0 + 32))(v0, &unk_FFD97EEC, 0, 0, v5); /*0xffd85f53*/ + v2 = v1; /*0xffd85f56*/ + if ( v1 < 0 ) + { + DebugPrint(0x80000000, (int)"ERROR: DWR Can't find PCH Policy (Status: %r)\n", v1); + DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0xffd85f78*/ + v3 = GetReportStatusCodePpi(); /*0xffd85f80*/ + if ( v3 ) /*0xffd85f88*/ + (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd85f99*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchRootPorts.c", + 4100, + "!EFI_ERROR (Status)"); + v5[1] = 0; /*0xffd85f9f*/ + while ( 1 ) /*0xffd85fa2*/ + ; /*0xffd85fa2*/ + } + return (unsigned __int8)(*(_DWORD *)(v5[0] + 2975) >> 18); /*0xffd85faa*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd860b8.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd860b8.c index d7b4203..957beea 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd860b8.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd860b8.c @@ -1,2 +1,54 @@ -// 0xffd860b8 -{"addr":"0xffd860b8","code":"int __thiscall sub_FFD860B8(int this)\n{\n int v2; // esi\n int v3; // edi\n int v4; // eax\n _DWORD *v5; // eax\n int n8; // edx\n int v8; // [esp+14h] [ebp-8h] BYREF\n int n17; // [esp+18h] [ebp-4h] BYREF\n\n DebugPrint(64, (int)\"ConfigureXhci() - Start\\n\"); /*0xffd860c8*/\n v2 = *(_DWORD *)(this + 3510); /*0xffd860cd*/\n sub_FFD8BE68(); /*0xffd860d9*/\n v3 = sub_FFD8CBBA(0, 20, 0); /*0xffd860f1*/\n sub_FFD8C76F(&v8); /*0xffd860f3*/\n *(_DWORD *)(v3 + 16) = v2; /*0xffd860fd*/\n sub_FFD8CC4F(v3 + 4, 6); /*0xffd86101*/\n if ( (*(_BYTE *)(this + 2263) & 2) != 0 ) /*0xffd86109*/\n *(_DWORD *)(v2 + 33004) |= 1u; /*0xffd86114*/\n v4 = sub_FFD8AD54(); /*0xffd8611a*/\n (*(void (__cdecl **)(int, int *))(*(_DWORD *)v4 + 40))(v4, &n17); /*0xffd86127*/\n if ( n17 == 17 ) /*0xffd86133*/\n sub_FFD86747(this + 2263); /*0xffd86137*/\n else\n sub_FFD85FBC(); /*0xffd8613e*/\n sub_FFD861FF(this, v2, v3); /*0xffd86148*/\n sub_FFD8701A(this, v2); /*0xffd86151*/\n DebugPrint(64, (int)\"xHCI: XhciPostInitDone Start\\n\");\n *(_DWORD *)(v2 + 32992) &= ~0x10000u; /*0xffd86174*/\n *(_DWORD *)(v3 + 80) = 265186911; /*0xffd8617c*/\n DebugPrint(64, (int)\"xHCI: XhciPostInitDone End\\n\");\n if ( (*(_BYTE *)(this + 2263) & 4) != 0 ) /*0xffd8618e*/\n {\n sub_FFD86E37(this + 2263, v3); /*0xffd86194*/\n }\n else\n {\n DebugPrint(0x80000000, (int)\"Clear Over-Current registers\\n\"); /*0xffd861a5*/\n v5 = (_DWORD *)(v3 + 208); /*0xffd861ae*/\n n8 = 8; /*0xffd861b4*/\n do /*0xffd861c8*/\n {\n *(v5 - 8) = 0; /*0xffd861b5*/\n *v5++ = 0; /*0xffd861bc*/\n --n8; /*0xffd861c5*/\n }\n while ( n8 ); /*0xffd861c8*/\n }\n sub_FFD8687F(this + 2263, v2); /*0xffd861ce*/\n sub_FFD8CC6A(v3 + 4, 65529); /*0xffd861db*/\n *(_DWORD *)(v3 + 16) = 0; /*0xffd861e7*/\n DebugPrint(64, (int)\"ConfigureXhciPreMem () - End\\n\"); /*0xffd861ee*/\n return 0; /*0xffd861f5*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd94008","name":"aConfigurexhciS","string":"ConfigureXhci() - Start\n"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8c76f","name":"sub_FFD8C76F"},{"addr":"0xffd8cc4f","name":"sub_FFD8CC4F"},{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd86747","name":"sub_FFD86747"},{"addr":"0xffd85fbc","name":"sub_FFD85FBC"},{"addr":"0xffd861ff","name":"sub_FFD861FF"},{"addr":"0xffd8701a","name":"sub_FFD8701A"},{"addr":"0xffd94420","name":"aXhciXhcipostin","string":"xHCI: XhciPostInitDone Start\n"},{"addr":"0xffd94440","name":"aXhciXhcipostin_0","string":"xHCI: XhciPostInitDone End\n"},{"addr":"0xffd86e37","name":"sub_FFD86E37"},{"addr":"0xffd94024","name":"aClearOverCurre","string":"Clear Over-Current registers\n"},{"addr":"0xffd8687f","name":"sub_FFD8687F"},{"addr":"0xffd8cc6a","name":"sub_FFD8CC6A"},{"addr":"0xffd94044","name":"aConfigurexhcip","string":"ConfigureXhciPreMem () - End\n"}]} \ No newline at end of file +int __thiscall sub_FFD860B8(int this) +{ + int v2; // esi + int v3; // edi + int v4; // eax + _DWORD *v5; // eax + int n8; // edx + int v8; // [esp+14h] [ebp-8h] BYREF + int n17; // [esp+18h] [ebp-4h] BYREF + + DebugPrint(64, (int)"ConfigureXhci() - Start\n"); /*0xffd860c8*/ + v2 = *(_DWORD *)(this + 3510); /*0xffd860cd*/ + sub_FFD8BE68(); /*0xffd860d9*/ + v3 = sub_FFD8CBBA(0, 20, 0); /*0xffd860f1*/ + sub_FFD8C76F(&v8); /*0xffd860f3*/ + *(_DWORD *)(v3 + 16) = v2; /*0xffd860fd*/ + sub_FFD8CC4F(v3 + 4, 6); /*0xffd86101*/ + if ( (*(_BYTE *)(this + 2263) & 2) != 0 ) /*0xffd86109*/ + *(_DWORD *)(v2 + 33004) |= 1u; /*0xffd86114*/ + v4 = sub_FFD8AD54(); /*0xffd8611a*/ + (*(void (__cdecl **)(int, int *))(*(_DWORD *)v4 + 40))(v4, &n17); /*0xffd86127*/ + if ( n17 == 17 ) /*0xffd86133*/ + sub_FFD86747(this + 2263); /*0xffd86137*/ + else + sub_FFD85FBC(); /*0xffd8613e*/ + sub_FFD861FF(this, v2, v3); /*0xffd86148*/ + sub_FFD8701A(this, v2); /*0xffd86151*/ + DebugPrint(64, (int)"xHCI: XhciPostInitDone Start\n"); + *(_DWORD *)(v2 + 32992) &= ~0x10000u; /*0xffd86174*/ + *(_DWORD *)(v3 + 80) = 265186911; /*0xffd8617c*/ + DebugPrint(64, (int)"xHCI: XhciPostInitDone End\n"); + if ( (*(_BYTE *)(this + 2263) & 4) != 0 ) /*0xffd8618e*/ + { + sub_FFD86E37(this + 2263, v3); /*0xffd86194*/ + } + else + { + DebugPrint(0x80000000, (int)"Clear Over-Current registers\n"); /*0xffd861a5*/ + v5 = (_DWORD *)(v3 + 208); /*0xffd861ae*/ + n8 = 8; /*0xffd861b4*/ + do /*0xffd861c8*/ + { + *(v5 - 8) = 0; /*0xffd861b5*/ + *v5++ = 0; /*0xffd861bc*/ + --n8; /*0xffd861c5*/ + } + while ( n8 ); /*0xffd861c8*/ + } + sub_FFD8687F(this + 2263, v2); /*0xffd861ce*/ + sub_FFD8CC6A(v3 + 4, 65529); /*0xffd861db*/ + *(_DWORD *)(v3 + 16) = 0; /*0xffd861e7*/ + DebugPrint(64, (int)"ConfigureXhciPreMem () - End\n"); /*0xffd861ee*/ + return 0; /*0xffd861f5*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd86203.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd86203.c index a85291b..ecb0850 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd86203.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd86203.c @@ -1,2 +1 @@ -// 0xffd86203 -{"addr":"0xffd86203","code":null,"error":"Decompilation failed"} \ No newline at end of file +/* Decompilation failed at 0xffd86203 */ diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8690c.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8690c.c index 2646e0a..bda6152 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8690c.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8690c.c @@ -1,2 +1,115 @@ -// 0xffd8690c -{"addr":"0xffd8690c","code":"int __fastcall sub_FFD8690C(int a1, int a2)\n{\n int v2; // ebp\n int n15_1; // ebx\n unsigned __int8 i_4; // cl\n unsigned __int8 i_1; // al\n unsigned __int64 v6; // rdi\n int v7; // ebx\n int v8; // ebp\n _DWORD *v9; // eax\n _DWORD *v10; // esi\n unsigned int v11; // ecx\n int result; // eax\n int v13; // [esp-8h] [ebp-34h]\n char v14; // [esp+11h] [ebp-1Bh] BYREF\n unsigned __int8 i; // [esp+12h] [ebp-1Ah]\n unsigned __int8 i_3; // [esp+13h] [ebp-19h]\n unsigned int n1342177280; // [esp+14h] [ebp-18h] BYREF\n int v18; // [esp+18h] [ebp-14h]\n int v19; // [esp+1Ch] [ebp-10h]\n int n15; // [esp+20h] [ebp-Ch] BYREF\n unsigned int i_2; // [esp+24h] [ebp-8h] BYREF\n unsigned int v22; // [esp+28h] [ebp-4h] BYREF\n\n v2 = a2; /*0xffd86913*/\n v19 = a1; /*0xffd86915*/\n v18 = a2; /*0xffd86920*/\n DebugPrint(64, (int)\"xHCI: Usb2AfeProgramming Start\\n\");\n sub_FFD8BE68(); /*0xffd86929*/\n sub_FFD8BB3A(v13); /*0xffd8692e*/\n sub_FFD8C909(&v22); /*0xffd86937*/\n n15_1 = sub_FFD8CBBA(0, 31, 2); /*0xffd8694b*/\n n15 = n15_1; /*0xffd86951*/\n sub_FFD8ADCC(202, 6, 16427, 0, 0, 0, &n1342177280, &v14, 6); /*0xffd86970*/\n n1342177280 |= 0x400000u; /*0xffd86975*/\n sub_FFD8ADCC(202, 7, 16427, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86999*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd869a9*/\n sub_FFD8ADCC(202, 6, 16385, 0, 0, 0, &n1342177280, &v14, 6); /*0xffd869cc*/\n n1342177280 |= 0x3000000u; /*0xffd869d8*/\n sub_FFD8ADCC(202, 7, 16385, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd869f5*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86a05*/\n sub_FFD8ADCC(202, 6, 28672, 0, 0, 0, &n1342177280, &v14, 6); /*0xffd86a2a*/\n n1342177280 = (unsigned __int16)n1342177280 | 0x50500000; /*0xffd86a41*/\n sub_FFD8ADCC(202, 7, 28672, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86a59*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86a69*/\n n1342177280 = 1342177280; /*0xffd86a71*/\n sub_FFD8ADCC(202, 7, 28724, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86a95*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86aa5*/\n n1342177280 = 175176950; /*0xffd86aad*/\n sub_FFD8ADCC(202, 7, 28728, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86ad3*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86ae3*/\n n1342177280 = 532398080; /*0xffd86aeb*/\n sub_FFD8ADCC(202, 7, 28732, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86b0f*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86b1f*/\n n1342177280 = 34432; /*0xffd86b27*/\n sub_FFD8ADCC(202, 7, 32516, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86b4d*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86b5d*/\n n1342177280 = 67251212; /*0xffd86b65*/\n sub_FFD8ADCC(202, 7, 28712, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86b8b*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86b9b*/\n n1342177280 = 184552192; /*0xffd86ba9*/\n sub_FFD8ADCC(202, 7, 32515, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86bc9*/\n sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86bd9*/\n i_4 = sub_FFD8C035(); /*0xffd86be6*/\n i_1 = 1; /*0xffd86be8*/\n i_3 = i_4; /*0xffd86bea*/\n for ( i = 1; i_1 <= i_3; i = i_1 ) /*0xffd86bf4*/\n {\n i_2 = i_1; /*0xffd86c07*/\n v6 = (unsigned __int64)(i_1 | 0x40u) << 8; /*0xffd86c25*/\n sub_FFD8ADCC(202, 6, v6, SHIDWORD(v6), 0, 0, &n1342177280, &v14, 6); /*0xffd86c2c*/\n v7 = 2 * i; /*0xffd86c3d*/\n n1342177280 = n1342177280 & 0xFFFF80FF /*0xffd86c87*/\n | ((*(_BYTE *)(v19 + 16 * i - 3) & 7\n | (8 * (*(_BYTE *)(v19 + 16 * i - 4) & 7 | (8 * (*(_BYTE *)(v19 + 16 * i - 1) & 1))))) << 8)\n | 0xFC000010;\n sub_FFD8ADCC(202, 7, v6, SHIDWORD(v6), 1u, 0, &n1342177280, &v14, 7); /*0xffd86c93*/\n sub_FFD8A1DE(n1342177280, v18, n15); /*0xffd86ca9*/\n v8 = (unsigned __int64)i_2 >> 24; /*0xffd86cb9*/\n LODWORD(v6) = i_2 << 8; /*0xffd86cbd*/\n HIDWORD(v6) = (i_2 << 8) | 0x4026; /*0xffd86cca*/\n n1342177280 = 0; /*0xffd86cd8*/\n sub_FFD8ADCC(202, 6, SHIDWORD(v6), v8, 0, 0, &n1342177280, &v14, 6); /*0xffd86ce2*/\n n1342177280 ^= (n1342177280 ^ (*(unsigned __int8 *)(v19 + 8 * v7 - 2) << 23)) & 0x1800000; /*0xffd86d0b*/\n sub_FFD8ADCC(202, 7, SHIDWORD(v6), v8, 1u, 0, &n1342177280, &v14, 7); /*0xffd86d22*/\n n15_1 = n15; /*0xffd86d27*/\n sub_FFD8A1DE(n1342177280, v18, n15); /*0xffd86d39*/\n LODWORD(v6) = v6 | 0x4008; /*0xffd86d47*/\n sub_FFD8ADCC(202, 6, v6, v8, 0, 0, &n1342177280, &v14, 6); /*0xffd86d61*/\n n1342177280 = n1342177280 & 0xFFFFC17F | 0x1A80; /*0xffd86d7c*/\n sub_FFD8ADCC(202, 7, v6, v8, 1u, 0, &n1342177280, &v14, 7); /*0xffd86d94*/\n v2 = v18; /*0xffd86d99*/\n sub_FFD8A1DE(n1342177280, v18, n15_1); /*0xffd86da8*/\n i_1 = i + 1; /*0xffd86db4*/\n }\n if ( sub_FFD8BE68() == 2 ) /*0xffd86dcc*/\n {\n i_3 = sub_FFD89FDC(&i_2); /*0xffd86ddd*/\n v9 = (_DWORD *)sub_FFD8A048(); /*0xffd86de1*/\n v10 = v9; /*0xffd86de6*/\n if ( v9 ) /*0xffd86dea*/\n {\n v11 = i_2 + *v9; /*0xffd86df2*/\n n15 = 15; /*0xffd86df8*/\n sub_FFD8D51B(v11, &n15, 4); /*0xffd86e00*/\n *v10 += 4; /*0xffd86e05*/\n if ( i_3 == 1 ) /*0xffd86e0e*/\n sub_FFD8A02F(n15_1); /*0xffd86e12*/\n }\n }\n sub_FFD8A2C4(v2, n15_1); /*0xffd86e1b*/\n result = *(_DWORD *)(v22 + 24) | 0x20000000; /*0xffd86e2a*/\n *(_DWORD *)(v22 + 24) = result; /*0xffd86e2f*/\n return result; /*0xffd86e24*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd94328","name":"aXhciUsb2afepro","string":"xHCI: Usb2AfeProgramming Start\n"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd8bb3a","name":"sub_FFD8BB3A"},{"addr":"0xffd8c909","name":"sub_FFD8C909"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8adcc","name":"sub_FFD8ADCC"},{"addr":"0xffd8a1de","name":"sub_FFD8A1DE"},{"addr":"0xffd8c035","name":"sub_FFD8C035"},{"addr":"0xffd89fdc","name":"sub_FFD89FDC"},{"addr":"0xffd8a048","name":"sub_FFD8A048"},{"addr":"0xffd8d51b","name":"sub_FFD8D51B"},{"addr":"0xffd8a02f","name":"sub_FFD8A02F"},{"addr":"0xffd8a2c4","name":"sub_FFD8A2C4"}]} \ No newline at end of file +int __fastcall sub_FFD8690C(int a1, int a2) +{ + int v2; // ebp + int n15_1; // ebx + unsigned __int8 i_4; // cl + unsigned __int8 i_1; // al + unsigned __int64 v6; // rdi + int v7; // ebx + int v8; // ebp + _DWORD *v9; // eax + _DWORD *v10; // esi + unsigned int v11; // ecx + int result; // eax + int v13; // [esp-8h] [ebp-34h] + char v14; // [esp+11h] [ebp-1Bh] BYREF + unsigned __int8 i; // [esp+12h] [ebp-1Ah] + unsigned __int8 i_3; // [esp+13h] [ebp-19h] + unsigned int n1342177280; // [esp+14h] [ebp-18h] BYREF + int v18; // [esp+18h] [ebp-14h] + int v19; // [esp+1Ch] [ebp-10h] + int n15; // [esp+20h] [ebp-Ch] BYREF + unsigned int i_2; // [esp+24h] [ebp-8h] BYREF + unsigned int v22; // [esp+28h] [ebp-4h] BYREF + + v2 = a2; /*0xffd86913*/ + v19 = a1; /*0xffd86915*/ + v18 = a2; /*0xffd86920*/ + DebugPrint(64, (int)"xHCI: Usb2AfeProgramming Start\n"); + sub_FFD8BE68(); /*0xffd86929*/ + sub_FFD8BB3A(v13); /*0xffd8692e*/ + sub_FFD8C909(&v22); /*0xffd86937*/ + n15_1 = sub_FFD8CBBA(0, 31, 2); /*0xffd8694b*/ + n15 = n15_1; /*0xffd86951*/ + sub_FFD8ADCC(202, 6, 16427, 0, 0, 0, &n1342177280, &v14, 6); /*0xffd86970*/ + n1342177280 |= 0x400000u; /*0xffd86975*/ + sub_FFD8ADCC(202, 7, 16427, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86999*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd869a9*/ + sub_FFD8ADCC(202, 6, 16385, 0, 0, 0, &n1342177280, &v14, 6); /*0xffd869cc*/ + n1342177280 |= 0x3000000u; /*0xffd869d8*/ + sub_FFD8ADCC(202, 7, 16385, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd869f5*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86a05*/ + sub_FFD8ADCC(202, 6, 28672, 0, 0, 0, &n1342177280, &v14, 6); /*0xffd86a2a*/ + n1342177280 = (unsigned __int16)n1342177280 | 0x50500000; /*0xffd86a41*/ + sub_FFD8ADCC(202, 7, 28672, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86a59*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86a69*/ + n1342177280 = 1342177280; /*0xffd86a71*/ + sub_FFD8ADCC(202, 7, 28724, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86a95*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86aa5*/ + n1342177280 = 175176950; /*0xffd86aad*/ + sub_FFD8ADCC(202, 7, 28728, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86ad3*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86ae3*/ + n1342177280 = 532398080; /*0xffd86aeb*/ + sub_FFD8ADCC(202, 7, 28732, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86b0f*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86b1f*/ + n1342177280 = 34432; /*0xffd86b27*/ + sub_FFD8ADCC(202, 7, 32516, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86b4d*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86b5d*/ + n1342177280 = 67251212; /*0xffd86b65*/ + sub_FFD8ADCC(202, 7, 28712, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86b8b*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86b9b*/ + n1342177280 = 184552192; /*0xffd86ba9*/ + sub_FFD8ADCC(202, 7, 32515, 0, 1u, 0, &n1342177280, &v14, 7); /*0xffd86bc9*/ + sub_FFD8A1DE(n1342177280, v2, n15_1); /*0xffd86bd9*/ + i_4 = sub_FFD8C035(); /*0xffd86be6*/ + i_1 = 1; /*0xffd86be8*/ + i_3 = i_4; /*0xffd86bea*/ + for ( i = 1; i_1 <= i_3; i = i_1 ) /*0xffd86bf4*/ + { + i_2 = i_1; /*0xffd86c07*/ + v6 = (unsigned __int64)(i_1 | 0x40u) << 8; /*0xffd86c25*/ + sub_FFD8ADCC(202, 6, v6, SHIDWORD(v6), 0, 0, &n1342177280, &v14, 6); /*0xffd86c2c*/ + v7 = 2 * i; /*0xffd86c3d*/ + n1342177280 = n1342177280 & 0xFFFF80FF /*0xffd86c87*/ + | ((*(_BYTE *)(v19 + 16 * i - 3) & 7 + | (8 * (*(_BYTE *)(v19 + 16 * i - 4) & 7 | (8 * (*(_BYTE *)(v19 + 16 * i - 1) & 1))))) << 8) + | 0xFC000010; + sub_FFD8ADCC(202, 7, v6, SHIDWORD(v6), 1u, 0, &n1342177280, &v14, 7); /*0xffd86c93*/ + sub_FFD8A1DE(n1342177280, v18, n15); /*0xffd86ca9*/ + v8 = (unsigned __int64)i_2 >> 24; /*0xffd86cb9*/ + LODWORD(v6) = i_2 << 8; /*0xffd86cbd*/ + HIDWORD(v6) = (i_2 << 8) | 0x4026; /*0xffd86cca*/ + n1342177280 = 0; /*0xffd86cd8*/ + sub_FFD8ADCC(202, 6, SHIDWORD(v6), v8, 0, 0, &n1342177280, &v14, 6); /*0xffd86ce2*/ + n1342177280 ^= (n1342177280 ^ (*(unsigned __int8 *)(v19 + 8 * v7 - 2) << 23)) & 0x1800000; /*0xffd86d0b*/ + sub_FFD8ADCC(202, 7, SHIDWORD(v6), v8, 1u, 0, &n1342177280, &v14, 7); /*0xffd86d22*/ + n15_1 = n15; /*0xffd86d27*/ + sub_FFD8A1DE(n1342177280, v18, n15); /*0xffd86d39*/ + LODWORD(v6) = v6 | 0x4008; /*0xffd86d47*/ + sub_FFD8ADCC(202, 6, v6, v8, 0, 0, &n1342177280, &v14, 6); /*0xffd86d61*/ + n1342177280 = n1342177280 & 0xFFFFC17F | 0x1A80; /*0xffd86d7c*/ + sub_FFD8ADCC(202, 7, v6, v8, 1u, 0, &n1342177280, &v14, 7); /*0xffd86d94*/ + v2 = v18; /*0xffd86d99*/ + sub_FFD8A1DE(n1342177280, v18, n15_1); /*0xffd86da8*/ + i_1 = i + 1; /*0xffd86db4*/ + } + if ( sub_FFD8BE68() == 2 ) /*0xffd86dcc*/ + { + i_3 = sub_FFD89FDC(&i_2); /*0xffd86ddd*/ + v9 = (_DWORD *)sub_FFD8A048(); /*0xffd86de1*/ + v10 = v9; /*0xffd86de6*/ + if ( v9 ) /*0xffd86dea*/ + { + v11 = i_2 + *v9; /*0xffd86df2*/ + n15 = 15; /*0xffd86df8*/ + sub_FFD8D51B(v11, &n15, 4); /*0xffd86e00*/ + *v10 += 4; /*0xffd86e05*/ + if ( i_3 == 1 ) /*0xffd86e0e*/ + sub_FFD8A02F(n15_1); /*0xffd86e12*/ + } + } + sub_FFD8A2C4(v2, n15_1); /*0xffd86e1b*/ + result = *(_DWORD *)(v22 + 24) | 0x20000000; /*0xffd86e2a*/ + *(_DWORD *)(v22 + 24) = result; /*0xffd86e2f*/ + return result; /*0xffd86e24*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd86e4d.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd86e4d.c index 4ef8e62..eb2349c 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd86e4d.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd86e4d.c @@ -1,2 +1,106 @@ -// 0xffd86e4d -{"addr":"0xffd86e4d","code":"int __usercall sub_FFD86E37@(int a1@, int a2@, int a3, int a4, int a5, int a6, int a7, ...)\n{\n int v7; // ebx\n unsigned int n8_3; // esi\n unsigned int v9; // edi\n unsigned __int8 *v10; // ebx\n unsigned __int8 n8; // al\n int n8_4; // ebp\n int v13; // eax\n unsigned int n8_1; // ecx\n _DWORD *v15; // edx\n int v16; // eax\n unsigned int v17; // edi\n unsigned __int8 *v18; // ebp\n unsigned __int8 n8_2; // al\n int n8_5; // ebx\n int v21; // eax\n _DWORD *v22; // ecx\n int result; // eax\n unsigned int retaddr; // [esp+5Ch] [ebp+0h]\n int v27; // [esp+74h] [ebp+18h] BYREF\n va_list va; // [esp+74h] [ebp+18h]\n int v29; // [esp+78h] [ebp+1Ch]\n int v30; // [esp+7Ch] [ebp+20h]\n int v31; // [esp+80h] [ebp+24h]\n int v32; // [esp+84h] [ebp+28h]\n int v33; // [esp+88h] [ebp+2Ch]\n int v34; // [esp+8Ch] [ebp+30h]\n int v35; // [esp+90h] [ebp+34h]\n va_list va1; // [esp+94h] [ebp+38h] BYREF\n\n va_start(va1, a7);\n va_start(va, a7);\n v27 = va_arg(va1, _DWORD); /*0xffd86e37*/\n v29 = va_arg(va1, _DWORD); /*0xffd86e37*/\n v30 = va_arg(va1, _DWORD); /*0xffd86e37*/\n v31 = va_arg(va1, _DWORD); /*0xffd86e37*/\n v32 = va_arg(va1, _DWORD); /*0xffd86e37*/\n v33 = va_arg(va1, _DWORD); /*0xffd86e37*/\n v34 = va_arg(va1, _DWORD); /*0xffd86e37*/\n v35 = va_arg(va1, _DWORD); /*0xffd86e37*/\n v7 = a2; /*0xffd86e3e*/\n sub_FFD8D4C8(va1, retaddr); /*0xffd86e4f*/\n sub_FFD8D4C8((int *)va, retaddr); /*0xffd86e5b*/\n sub_FFD8BF54(); /*0xffd86e60*/\n n8_3 = 0; /*0xffd86e65*/\n v9 = 0; /*0xffd86e67*/\n if ( (unsigned __int8)sub_FFD8C051() ) /*0xffd86e69*/\n {\n v10 = (unsigned __int8 *)(v7 + 264); /*0xffd86e72*/\n do /*0xffd86ebd*/\n {\n n8 = *v10; /*0xffd86e78*/\n if ( *v10 != 8 ) /*0xffd86e7c*/\n {\n n8_4 = n8; /*0xffd86e7e*/\n if ( n8 >= 8u ) /*0xffd86e84*/\n {\n v13 = GetReportStatusCodePpi(); /*0xffd86e86*/\n if ( v13 ) /*0xffd86e8d*/\n (*(void (**)(void))(v13 + 4))(); /*0xffd86e9e*/\n }\n *((int *)va + n8_4) |= 1 << v9; /*0xffd86eab*/\n }\n ++v9; /*0xffd86eaf*/\n v10 += 16; /*0xffd86eb0*/\n }\n while ( v9 < (unsigned __int8)sub_FFD8C051() ); /*0xffd86ebd*/\n v7 = a2; /*0xffd86ebf*/\n }\n n8_1 = 0; /*0xffd86ec7*/\n v15 = (_DWORD *)(a1 + 208); /*0xffd86ec9*/\n do /*0xffd86edc*/\n {\n v16 = *((int *)va + n8_1++); /*0xffd86ecf*/\n *v15++ = v16; /*0xffd86ed4*/\n }\n while ( n8_1 < 8 ); /*0xffd86edc*/\n v17 = 0; /*0xffd86ede*/\n v18 = (unsigned __int8 *)(v7 + 8); /*0xffd86ee0*/\n while ( (unsigned int)(sub_FFD8BE68() - 1) <= 1 && v17 < retaddr ) /*0xffd86efb*/\n {\n n8_2 = *v18; /*0xffd86efd*/\n if ( *v18 != 8 ) /*0xffd86f02*/\n {\n n8_5 = n8_2; /*0xffd86f04*/\n if ( n8_2 >= 8u ) /*0xffd86f0a*/\n {\n v21 = GetReportStatusCodePpi(); /*0xffd86f0c*/\n if ( v21 ) /*0xffd86f13*/\n (*(void (**)(void))(v21 + 4))(); /*0xffd86f24*/\n }\n va1[n8_5] = (void *)((unsigned int)va1[n8_5] | (1 << v17)); /*0xffd86f31*/\n }\n ++v17; /*0xffd86f35*/\n v18 += 16; /*0xffd86f36*/\n }\n v22 = (_DWORD *)(a1 + 176); /*0xffd86f3f*/\n do /*0xffd86f52*/\n {\n result = (int)va1[n8_3++]; /*0xffd86f45*/\n *v22++ = result; /*0xffd86f4a*/\n }\n while ( n8_3 < 8 ); /*0xffd86f52*/\n return result; /*0xffd86f54*/\n}","refs":[{"addr":"0xffd8d4c8","name":"sub_FFD8D4C8"},{"addr":"0xffd8bf54","name":"sub_FFD8BF54"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd8c051","name":"sub_FFD8C051"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"}]} \ No newline at end of file +int __usercall sub_FFD86E37@(int a1@, int a2@, int a3, int a4, int a5, int a6, int a7, ...) +{ + int v7; // ebx + unsigned int n8_3; // esi + unsigned int v9; // edi + unsigned __int8 *v10; // ebx + unsigned __int8 n8; // al + int n8_4; // ebp + int v13; // eax + unsigned int n8_1; // ecx + _DWORD *v15; // edx + int v16; // eax + unsigned int v17; // edi + unsigned __int8 *v18; // ebp + unsigned __int8 n8_2; // al + int n8_5; // ebx + int v21; // eax + _DWORD *v22; // ecx + int result; // eax + unsigned int retaddr; // [esp+5Ch] [ebp+0h] + int v27; // [esp+74h] [ebp+18h] BYREF + va_list va; // [esp+74h] [ebp+18h] + int v29; // [esp+78h] [ebp+1Ch] + int v30; // [esp+7Ch] [ebp+20h] + int v31; // [esp+80h] [ebp+24h] + int v32; // [esp+84h] [ebp+28h] + int v33; // [esp+88h] [ebp+2Ch] + int v34; // [esp+8Ch] [ebp+30h] + int v35; // [esp+90h] [ebp+34h] + va_list va1; // [esp+94h] [ebp+38h] BYREF + + va_start(va1, a7); + va_start(va, a7); + v27 = va_arg(va1, _DWORD); /*0xffd86e37*/ + v29 = va_arg(va1, _DWORD); /*0xffd86e37*/ + v30 = va_arg(va1, _DWORD); /*0xffd86e37*/ + v31 = va_arg(va1, _DWORD); /*0xffd86e37*/ + v32 = va_arg(va1, _DWORD); /*0xffd86e37*/ + v33 = va_arg(va1, _DWORD); /*0xffd86e37*/ + v34 = va_arg(va1, _DWORD); /*0xffd86e37*/ + v35 = va_arg(va1, _DWORD); /*0xffd86e37*/ + v7 = a2; /*0xffd86e3e*/ + sub_FFD8D4C8(va1, retaddr); /*0xffd86e4f*/ + sub_FFD8D4C8((int *)va, retaddr); /*0xffd86e5b*/ + sub_FFD8BF54(); /*0xffd86e60*/ + n8_3 = 0; /*0xffd86e65*/ + v9 = 0; /*0xffd86e67*/ + if ( (unsigned __int8)sub_FFD8C051() ) /*0xffd86e69*/ + { + v10 = (unsigned __int8 *)(v7 + 264); /*0xffd86e72*/ + do /*0xffd86ebd*/ + { + n8 = *v10; /*0xffd86e78*/ + if ( *v10 != 8 ) /*0xffd86e7c*/ + { + n8_4 = n8; /*0xffd86e7e*/ + if ( n8 >= 8u ) /*0xffd86e84*/ + { + v13 = GetReportStatusCodePpi(); /*0xffd86e86*/ + if ( v13 ) /*0xffd86e8d*/ + (*(void (**)(void))(v13 + 4))(); /*0xffd86e9e*/ + } + *((int *)va + n8_4) |= 1 << v9; /*0xffd86eab*/ + } + ++v9; /*0xffd86eaf*/ + v10 += 16; /*0xffd86eb0*/ + } + while ( v9 < (unsigned __int8)sub_FFD8C051() ); /*0xffd86ebd*/ + v7 = a2; /*0xffd86ebf*/ + } + n8_1 = 0; /*0xffd86ec7*/ + v15 = (_DWORD *)(a1 + 208); /*0xffd86ec9*/ + do /*0xffd86edc*/ + { + v16 = *((int *)va + n8_1++); /*0xffd86ecf*/ + *v15++ = v16; /*0xffd86ed4*/ + } + while ( n8_1 < 8 ); /*0xffd86edc*/ + v17 = 0; /*0xffd86ede*/ + v18 = (unsigned __int8 *)(v7 + 8); /*0xffd86ee0*/ + while ( (unsigned int)(sub_FFD8BE68() - 1) <= 1 && v17 < retaddr ) /*0xffd86efb*/ + { + n8_2 = *v18; /*0xffd86efd*/ + if ( *v18 != 8 ) /*0xffd86f02*/ + { + n8_5 = n8_2; /*0xffd86f04*/ + if ( n8_2 >= 8u ) /*0xffd86f0a*/ + { + v21 = GetReportStatusCodePpi(); /*0xffd86f0c*/ + if ( v21 ) /*0xffd86f13*/ + (*(void (**)(void))(v21 + 4))(); /*0xffd86f24*/ + } + va1[n8_5] = (void *)((unsigned int)va1[n8_5] | (1 << v17)); /*0xffd86f31*/ + } + ++v17; /*0xffd86f35*/ + v18 += 16; /*0xffd86f36*/ + } + v22 = (_DWORD *)(a1 + 176); /*0xffd86f3f*/ + do /*0xffd86f52*/ + { + result = (int)va1[n8_3++]; /*0xffd86f45*/ + *v22++ = result; /*0xffd86f4a*/ + } + while ( n8_3 < 8 ); /*0xffd86f52*/ + return result; /*0xffd86f54*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8733e.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8733e.c index 09b2acc..c271065 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8733e.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8733e.c @@ -1,2 +1 @@ -// 0xffd8733e -{"addr":"0xffd8733e","code":null,"error":"Decompilation failed"} \ No newline at end of file +/* Decompilation failed at 0xffd8733e */ diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd879ed.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd879ed.c index cfdbe00..ce91928 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd879ed.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd879ed.c @@ -1,2 +1,33 @@ -// 0xffd879ed -{"addr":"0xffd879ed","code":"int __thiscall sub_FFD879ED(_DWORD *this)\n{\n unsigned __int8 i; // bl\n int v3; // ecx\n int v5; // [esp-4h] [ebp-20h]\n unsigned __int8 v6; // [esp+11h] [ebp-Bh]\n char v7; // [esp+12h] [ebp-Ah] BYREF\n char v8; // [esp+13h] [ebp-9h] BYREF\n _BYTE v9[2]; // [esp+14h] [ebp-8h] BYREF\n\n DebugPrint(64, (int)\"XhciUsb3Tune() Start\\n\"); /*0xffd879fd*/\n for ( i = 0; i < (unsigned __int8)sub_FFD8C051(); ++i ) /*0xffd87a06*/\n {\n if ( (*(_BYTE *)(this + 4 * i + 67) & 0x81) != 0 ) /*0xffd87a22*/\n {\n sub_FFD8E3BE(); /*0xffd87a2c*/\n sub_FFD8E062(v6, &v8, &v7); /*0xffd87a41*/\n v3 = v5; /*0xffd87a4b*/\n if ( v7 == 1 ) /*0xffd87a4c*/\n {\n LOBYTE(v3) = v6; /*0xffd87a56*/\n sub_FFD8EBC8(v3, v9); /*0xffd87a58*/\n if ( (*(this + 4 * i + 67) & 1) != 0 ) /*0xffd87a6e*/\n sub_FFD8C578(-4128769, (*(this + 4 * i + 67) & 0x7E) << 15); /*0xffd87a85*/\n if ( (*(this + 4 * i + 67) & 0x80u) != 0 ) /*0xffd87a95*/\n sub_FFD8C578(-4128769, (*(this + 4 * i + 67) & 0x3F00) << 8); /*0xffd87aae*/\n sub_FFD8C578(-3, 0); /*0xffd87ac9*/\n sub_FFD8C578(-1, 2); /*0xffd87ad6*/\n }\n }\n }\n return DebugPrint(64, (int)\"XhciUsb3Tune() End\\n\"); /*0xffd87afb*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd9445c","name":"aXhciusb3tuneSt","string":"XhciUsb3Tune() Start\n"},{"addr":"0xffd8e3be","name":"sub_FFD8E3BE"},{"addr":"0xffd8e062","name":"sub_FFD8E062"},{"addr":"0xffd8ebc8","name":"sub_FFD8EBC8"},{"addr":"0xffd8c578","name":"sub_FFD8C578"},{"addr":"0xffd8c051","name":"sub_FFD8C051"},{"addr":"0xffd94474","name":"aXhciusb3tuneEn","string":"XhciUsb3Tune() End\n"}]} \ No newline at end of file +int __thiscall sub_FFD879ED(_DWORD *this) +{ + unsigned __int8 i; // bl + int v3; // ecx + int v5; // [esp-4h] [ebp-20h] + unsigned __int8 v6; // [esp+11h] [ebp-Bh] + char v7; // [esp+12h] [ebp-Ah] BYREF + char v8; // [esp+13h] [ebp-9h] BYREF + _BYTE v9[2]; // [esp+14h] [ebp-8h] BYREF + + DebugPrint(64, (int)"XhciUsb3Tune() Start\n"); /*0xffd879fd*/ + for ( i = 0; i < (unsigned __int8)sub_FFD8C051(); ++i ) /*0xffd87a06*/ + { + if ( (*(_BYTE *)(this + 4 * i + 67) & 0x81) != 0 ) /*0xffd87a22*/ + { + sub_FFD8E3BE(); /*0xffd87a2c*/ + sub_FFD8E062(v6, &v8, &v7); /*0xffd87a41*/ + v3 = v5; /*0xffd87a4b*/ + if ( v7 == 1 ) /*0xffd87a4c*/ + { + LOBYTE(v3) = v6; /*0xffd87a56*/ + sub_FFD8EBC8(v3, v9); /*0xffd87a58*/ + if ( (*(this + 4 * i + 67) & 1) != 0 ) /*0xffd87a6e*/ + sub_FFD8C578(-4128769, (*(this + 4 * i + 67) & 0x7E) << 15); /*0xffd87a85*/ + if ( (*(this + 4 * i + 67) & 0x80u) != 0 ) /*0xffd87a95*/ + sub_FFD8C578(-4128769, (*(this + 4 * i + 67) & 0x3F00) << 8); /*0xffd87aae*/ + sub_FFD8C578(-3, 0); /*0xffd87ac9*/ + sub_FFD8C578(-1, 2); /*0xffd87ad6*/ + } + } + } + return DebugPrint(64, (int)"XhciUsb3Tune() End\n"); /*0xffd87afb*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87b03.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87b03.c index 9773899..4be8e06 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87b03.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87b03.c @@ -1,2 +1,69 @@ -// 0xffd87b03 -{"addr":"0xffd87b03","code":"int __thiscall sub_FFD87B03(int this)\n{\n int v2; // edi\n int v3; // ebx\n int v5; // ebp\n unsigned int n0x3E8; // esi\n unsigned int i; // ebp\n int n2; // esi\n int n35; // edi\n unsigned int v10; // [esp+10h] [ebp-4h] BYREF\n\n v2 = *(_DWORD *)(this + 3510); /*0xffd87b11*/\n v3 = sub_FFD8CBBA(0, 20, 1); /*0xffd87b1d*/\n if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v3) == 0xFFFF )\n {\n DebugPrint(64, (int)\"xDCI: Pci device NOT found\\n\");\n return -2147483634; /*0xffd87b3e*/\n }\n else\n {\n v5 = sub_FFD8CBBA(0, 20, 0); /*0xffd87b63*/\n sub_FFD8C578(-1, 63); /*0xffd87b65*/\n sub_FFD8C5B5(); /*0xffd87b6a*/\n if ( (*(_BYTE *)(this + 2683) & 1) != 0 )\n {\n *(_DWORD *)(v5 + 16) = v2; /*0xffd87cfb*/\n sub_FFD8CC4F(v5 + 4, 2); /*0xffd87cfe*/\n *(_DWORD *)(v2 + 32984) &= 0xFFCFFFFF; /*0xffd87d11*/\n sub_FFD8CC6A(v5 + 4, 65533); /*0xffd87d1e*/\n *(_DWORD *)(v5 + 16) = 0; /*0xffd87d2b*/\n sub_FFD8CC85(4); /*0xffd87d34*/\n }\n else\n {\n DebugPrint(64, (int)\"xDCI: Device disabled\\n\");\n *(_DWORD *)(v5 + 16) = v2; /*0xffd87b91*/\n sub_FFD8CC4F(v5 + 4, 2); /*0xffd87b95*/\n *(_DWORD *)(v2 + 32984) |= 0x200000u; /*0xffd87ba5*/\n n0x3E8 = 0; /*0xffd87bb6*/\n *(_DWORD *)(v2 + 32984) &= ~0x100000u; /*0xffd87bb8*/\n while ( (*(_DWORD *)(v2 + 32988) & 0x20000000) == 0 && n0x3E8 < 0x3E8 ) /*0xffd87bc6*/\n {\n sub_FFD7FA46(0x64u); /*0xffd87bcb*/\n ++n0x3E8; /*0xffd87bd0*/\n }\n *(_DWORD *)(v2 + 32984) = *(_DWORD *)(v2 + 32984) & 0xFFFFFFFC | 1; /*0xffd87bf4*/\n sub_FFD8CC6A(v5 + 4, 65533); /*0xffd87bfa*/\n *(_DWORD *)(v5 + 16) = 0; /*0xffd87c01*/\n *(_DWORD *)(v3 + 16) = v2; /*0xffd87c0c*/\n sub_FFD8CC4F(v3 + 4, 2); /*0xffd87c0f*/\n *(_DWORD *)(v2 + 49424) |= 2u; /*0xffd87c23*/\n *(_DWORD *)(v2 + 49664) |= 0x40u; /*0xffd87c32*/\n *(_DWORD *)(v2 + 49856) |= 0x8000000u; /*0xffd87c46*/\n sub_FFD8CC4F(v2 + 1112088, 3); /*0xffd87c4c*/\n for ( i = 0; (sub_FFD8CCA5((unsigned __int16 *)(v2 + 1112080)) & 0xF00) == 0 && i < 0x3E8; ++i ) /*0xffd87c51*/\n sub_FFD7FA46(0x64u); /*0xffd87c60*/\n sub_FFD8CC6A(v3 + 4, 65533); /*0xffd87c80*/\n *(_DWORD *)(v3 + 16) = 0; /*0xffd87c85*/\n *(_DWORD *)(v3 + 132) |= 3u; /*0xffd87c95*/\n n2 = sub_FFD8BE68(); /*0xffd87ca0*/\n n35 = sub_FFD8BB3A(); /*0xffd87ca7*/\n sub_FFD8C578(-1, 256); /*0xffd87cc4*/\n sub_FFD8C909(&v10); /*0xffd87ccf*/\n if ( n2 == 2 && n35 >= 35 ) /*0xffd87cdc*/\n *(_DWORD *)(v10 + 1576) |= 0x1000000u; /*0xffd87ced*/\n }\n return 0; /*0xffd87d3a*/\n }\n}","refs":[{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd94488","name":"aXdciPciDeviceN","string":"xDCI: Pci device NOT found\n"},{"addr":"0xffd8c578","name":"sub_FFD8C578"},{"addr":"0xffd8c5b5","name":"sub_FFD8C5B5"},{"addr":"0xffd8cc4f","name":"sub_FFD8CC4F"},{"addr":"0xffd8cc6a","name":"sub_FFD8CC6A"},{"addr":"0xffd8cc85","name":"sub_FFD8CC85"},{"addr":"0xffd944a4","name":"aXdciDeviceDisa","string":"xDCI: Device disabled\n"},{"addr":"0xffd7fa46","name":"sub_FFD7FA46"},{"addr":"0xffd8cca5","name":"sub_FFD8CCA5"},{"addr":"0xffd8be68","name":"sub_FFD8BE68"},{"addr":"0xffd8bb3a","name":"sub_FFD8BB3A"},{"addr":"0xffd8c909","name":"sub_FFD8C909"}]} \ No newline at end of file +int __thiscall sub_FFD87B03(int this) +{ + int v2; // edi + int v3; // ebx + int v5; // ebp + unsigned int n0x3E8; // esi + unsigned int i; // ebp + int n2; // esi + int n35; // edi + unsigned int v10; // [esp+10h] [ebp-4h] BYREF + + v2 = *(_DWORD *)(this + 3510); /*0xffd87b11*/ + v3 = sub_FFD8CBBA(0, 20, 1); /*0xffd87b1d*/ + if ( (unsigned __int16)sub_FFD8CCA5((unsigned __int16 *)v3) == 0xFFFF ) + { + DebugPrint(64, (int)"xDCI: Pci device NOT found\n"); + return -2147483634; /*0xffd87b3e*/ + } + else + { + v5 = sub_FFD8CBBA(0, 20, 0); /*0xffd87b63*/ + sub_FFD8C578(-1, 63); /*0xffd87b65*/ + sub_FFD8C5B5(); /*0xffd87b6a*/ + if ( (*(_BYTE *)(this + 2683) & 1) != 0 ) + { + *(_DWORD *)(v5 + 16) = v2; /*0xffd87cfb*/ + sub_FFD8CC4F(v5 + 4, 2); /*0xffd87cfe*/ + *(_DWORD *)(v2 + 32984) &= 0xFFCFFFFF; /*0xffd87d11*/ + sub_FFD8CC6A(v5 + 4, 65533); /*0xffd87d1e*/ + *(_DWORD *)(v5 + 16) = 0; /*0xffd87d2b*/ + sub_FFD8CC85(4); /*0xffd87d34*/ + } + else + { + DebugPrint(64, (int)"xDCI: Device disabled\n"); + *(_DWORD *)(v5 + 16) = v2; /*0xffd87b91*/ + sub_FFD8CC4F(v5 + 4, 2); /*0xffd87b95*/ + *(_DWORD *)(v2 + 32984) |= 0x200000u; /*0xffd87ba5*/ + n0x3E8 = 0; /*0xffd87bb6*/ + *(_DWORD *)(v2 + 32984) &= ~0x100000u; /*0xffd87bb8*/ + while ( (*(_DWORD *)(v2 + 32988) & 0x20000000) == 0 && n0x3E8 < 0x3E8 ) /*0xffd87bc6*/ + { + sub_FFD7FA46(0x64u); /*0xffd87bcb*/ + ++n0x3E8; /*0xffd87bd0*/ + } + *(_DWORD *)(v2 + 32984) = *(_DWORD *)(v2 + 32984) & 0xFFFFFFFC | 1; /*0xffd87bf4*/ + sub_FFD8CC6A(v5 + 4, 65533); /*0xffd87bfa*/ + *(_DWORD *)(v5 + 16) = 0; /*0xffd87c01*/ + *(_DWORD *)(v3 + 16) = v2; /*0xffd87c0c*/ + sub_FFD8CC4F(v3 + 4, 2); /*0xffd87c0f*/ + *(_DWORD *)(v2 + 49424) |= 2u; /*0xffd87c23*/ + *(_DWORD *)(v2 + 49664) |= 0x40u; /*0xffd87c32*/ + *(_DWORD *)(v2 + 49856) |= 0x8000000u; /*0xffd87c46*/ + sub_FFD8CC4F(v2 + 1112088, 3); /*0xffd87c4c*/ + for ( i = 0; (sub_FFD8CCA5((unsigned __int16 *)(v2 + 1112080)) & 0xF00) == 0 && i < 0x3E8; ++i ) /*0xffd87c51*/ + sub_FFD7FA46(0x64u); /*0xffd87c60*/ + sub_FFD8CC6A(v3 + 4, 65533); /*0xffd87c80*/ + *(_DWORD *)(v3 + 16) = 0; /*0xffd87c85*/ + *(_DWORD *)(v3 + 132) |= 3u; /*0xffd87c95*/ + n2 = sub_FFD8BE68(); /*0xffd87ca0*/ + n35 = sub_FFD8BB3A(); /*0xffd87ca7*/ + sub_FFD8C578(-1, 256); /*0xffd87cc4*/ + sub_FFD8C909(&v10); /*0xffd87ccf*/ + if ( n2 == 2 && n35 >= 35 ) /*0xffd87cdc*/ + *(_DWORD *)(v10 + 1576) |= 0x1000000u; /*0xffd87ced*/ + } + return 0; /*0xffd87d3a*/ + } +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87d42.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87d42.c index b45935f..3bbe394 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87d42.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87d42.c @@ -1,2 +1,37 @@ -// 0xffd87d42 -{"addr":"0xffd87d42","code":"int InstallPchSpiPpi()\n{\n int v0; // eax\n int v1; // eax\n _DWORD *v2; // edi\n int v4; // eax\n int v5; // esi\n int v6; // eax\n\n DebugPrint(64, (int)\"InstallPchSpi() Start\\n\"); /*0xffd87d4c*/\n v0 = sub_FFD8CBBA(0, 31, 5); /*0xffd87d58*/\n *(_DWORD *)(v0 + 16) = -33488896; /*0xffd87d60*/\n *(_DWORD *)(v0 + 4) |= 2u; /*0xffd87d6d*/\n v1 = sub_FFD8ADB0(104); /*0xffd87d73*/\n v2 = (_DWORD *)v1; /*0xffd87d78*/\n if ( !v1 ) /*0xffd87d7c*/\n return -2147483639; /*0xffd87d7e*/\n sub_FFD8F09A((_DWORD *)(v1 + 12)); /*0xffd87d88*/\n *v2 = -2147483632; /*0xffd87d90*/\n v2[1] = &unk_FFD97EBC; /*0xffd87d98*/\n v2[2] = v2 + 5; /*0xffd87d9f*/\n v4 = InstallPpi(v2); /*0xffd87da2*/\n v5 = v4; /*0xffd87da7*/\n if ( v4 < 0 ) /*0xffd87dab*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v4); /*0xffd87db8*/\n v6 = GetReportStatusCodePpi(); /*0xffd87dc0*/\n if ( v6 ) /*0xffd87dc7*/\n (*(void (__cdecl **)(const char *, int, const char *))(v6 + 4))( /*0xffd87dd8*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchSpi.c\",\n 130,\n \"!EFI_ERROR (Status)\");\n }\n DebugPrint(64, (int)\"SPI PPI Installed\\n\"); /*0xffd87de5*/\n DebugPrint(64, (int)\"InstallPchSpi() End\\n\"); /*0xffd87df1*/\n return v5; /*0xffd87dfb*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd944bc","name":"aInstallpchspiS","string":"InstallPchSpi() Start\n"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8adb0","name":"sub_FFD8ADB0"},{"addr":"0xffd8f09a","name":"sub_FFD8F09A"},{"addr":"0xffd97ebc","name":"unk_FFD97EBC"},{"addr":"0xffd7f948","name":"InstallPpi"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd944d4","name":"aEHsPurleysktpk_7","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchSpi.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffd94520","name":"aSpiPpiInstalle","string":"SPI PPI Installed\n"},{"addr":"0xffd94534","name":"aInstallpchspiE","string":"InstallPchSpi() End\n"}]} \ No newline at end of file +int InstallPchSpiPpi() +{ + int v0; // eax + int v1; // eax + _DWORD *v2; // edi + int v4; // eax + int v5; // esi + int v6; // eax + + DebugPrint(64, (int)"InstallPchSpi() Start\n"); /*0xffd87d4c*/ + v0 = sub_FFD8CBBA(0, 31, 5); /*0xffd87d58*/ + *(_DWORD *)(v0 + 16) = -33488896; /*0xffd87d60*/ + *(_DWORD *)(v0 + 4) |= 2u; /*0xffd87d6d*/ + v1 = sub_FFD8ADB0(104); /*0xffd87d73*/ + v2 = (_DWORD *)v1; /*0xffd87d78*/ + if ( !v1 ) /*0xffd87d7c*/ + return -2147483639; /*0xffd87d7e*/ + sub_FFD8F09A((_DWORD *)(v1 + 12)); /*0xffd87d88*/ + *v2 = -2147483632; /*0xffd87d90*/ + v2[1] = &unk_FFD97EBC; /*0xffd87d98*/ + v2[2] = v2 + 5; /*0xffd87d9f*/ + v4 = InstallPpi(v2); /*0xffd87da2*/ + v5 = v4; /*0xffd87da7*/ + if ( v4 < 0 ) /*0xffd87dab*/ + { + DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v4); /*0xffd87db8*/ + v6 = GetReportStatusCodePpi(); /*0xffd87dc0*/ + if ( v6 ) /*0xffd87dc7*/ + (*(void (__cdecl **)(const char *, int, const char *))(v6 + 4))( /*0xffd87dd8*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchSpi.c", + 130, + "!EFI_ERROR (Status)"); + } + DebugPrint(64, (int)"SPI PPI Installed\n"); /*0xffd87de5*/ + DebugPrint(64, (int)"InstallPchSpi() End\n"); /*0xffd87df1*/ + return v5; /*0xffd87dfb*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87dff.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87dff.c index 2e615a6..1d15f3f 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87dff.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87dff.c @@ -1,2 +1,27 @@ -// 0xffd87dff -{"addr":"0xffd87dff","code":"int __thiscall ConfigureLpcOnPolicy(_BYTE *this)\n{\n int result; // eax\n int v3; // esi\n int n128; // ecx\n _DWORD v5[4]; // [esp+8h] [ebp-10h] BYREF\n\n result = DebugPrint(64, (int)\"ConfigureLpcOnPolicy()\\n\"); /*0xffd87e0f*/\n if ( (*(this + 3514) & 1) == 0 ) /*0xffd87e1d*/\n {\n DebugPrint(64, (int)\"Disable EnhancePort8xhDecoding\\n\"); /*0xffd87e26*/\n sub_FFD8D48A(v5, 16); /*0xffd87e33*/\n result = sub_FFD8CA98(v5); /*0xffd87e3b*/\n v3 = 0; /*0xffd87e40*/\n while ( 1 ) /*0xffd87e42*/\n {\n n128 = v5[v3]; /*0xffd87e42*/\n if ( (_WORD)n128 == 128 && (n128 & 0x7FFF0000) == 0x100000 ) /*0xffd87e59*/\n break; /*0xffd87e59*/\n if ( (unsigned int)++v3 >= 4 ) /*0xffd87e5f*/\n return result; /*0xffd87e5f*/\n }\n *(_DWORD *)(sub_FFD8CBBA(0, 31, 0) + 4 * v3 + 132) = 0; /*0xffd87e83*/\n return sub_FFD8C497(4, 0); /*0xffd87e8d*/\n }\n return result; /*0xffd87e94*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd9454c","name":"aConfigurelpcon","string":"ConfigureLpcOnPolicy()\n"},{"addr":"0xffd94564","name":"aDisableEnhance","string":"Disable EnhancePort8xhDecoding\n"},{"addr":"0xffd8d48a","name":"sub_FFD8D48A"},{"addr":"0xffd8ca98","name":"sub_FFD8CA98"},{"addr":"0xffd8cbba","name":"sub_FFD8CBBA"},{"addr":"0xffd8c497","name":"sub_FFD8C497"}]} \ No newline at end of file +int __thiscall ConfigureLpcOnPolicy(_BYTE *this) +{ + int result; // eax + int v3; // esi + int n128; // ecx + _DWORD v5[4]; // [esp+8h] [ebp-10h] BYREF + + result = DebugPrint(64, (int)"ConfigureLpcOnPolicy()\n"); /*0xffd87e0f*/ + if ( (*(this + 3514) & 1) == 0 ) /*0xffd87e1d*/ + { + DebugPrint(64, (int)"Disable EnhancePort8xhDecoding\n"); /*0xffd87e26*/ + sub_FFD8D48A(v5, 16); /*0xffd87e33*/ + result = sub_FFD8CA98(v5); /*0xffd87e3b*/ + v3 = 0; /*0xffd87e40*/ + while ( 1 ) /*0xffd87e42*/ + { + n128 = v5[v3]; /*0xffd87e42*/ + if ( (_WORD)n128 == 128 && (n128 & 0x7FFF0000) == 0x100000 ) /*0xffd87e59*/ + break; /*0xffd87e59*/ + if ( (unsigned int)++v3 >= 4 ) /*0xffd87e5f*/ + return result; /*0xffd87e5f*/ + } + *(_DWORD *)(sub_FFD8CBBA(0, 31, 0) + 4 * v3 + 132) = 0; /*0xffd87e83*/ + return sub_FFD8C497(4, 0); /*0xffd87e8d*/ + } + return result; /*0xffd87e94*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87e99.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87e99.c index 330c2d8..42f2c75 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87e99.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87e99.c @@ -1,2 +1,18 @@ -// 0xffd87e99 -{"addr":"0xffd87e99","code":"bool PchWdtIsUnexpectedReset()\n{\n int v0; // esi\n int n5120; // eax\n bool result; // al\n unsigned __int16 v3; // [esp+4h] [ebp-4h] BYREF\n\n sub_FFD8C76F(&v3); /*0xffd87ea1*/\n v0 = v3; /*0xffd87ea6*/\n result = 0; /*0xffd87ee2*/\n if ( (sub_FFD8CD06(v3) & 0x8000u) != 0 ) /*0xffd87eb9*/\n {\n n5120 = sub_FFD8CD06(v0 + 4) & 0x1C00; /*0xffd87ed0*/\n if ( (_WORD)n5120 == 5120 || (_WORD)n5120 == 6144 ) /*0xffd87ee0*/\n return 1; /*0xffd87eb9*/\n }\n return result; /*0xffd87ee8*/\n}","refs":[{"addr":"0xffd8c76f","name":"sub_FFD8C76F"},{"addr":"0xffd8cd06","name":"sub_FFD8CD06"}]} \ No newline at end of file +bool PchWdtIsUnexpectedReset() +{ + int v0; // esi + int n5120; // eax + bool result; // al + unsigned __int16 v3; // [esp+4h] [ebp-4h] BYREF + + sub_FFD8C76F(&v3); /*0xffd87ea1*/ + v0 = v3; /*0xffd87ea6*/ + result = 0; /*0xffd87ee2*/ + if ( (sub_FFD8CD06(v3) & 0x8000u) != 0 ) /*0xffd87eb9*/ + { + n5120 = sub_FFD8CD06(v0 + 4) & 0x1C00; /*0xffd87ed0*/ + if ( (_WORD)n5120 == 5120 || (_WORD)n5120 == 6144 ) /*0xffd87ee0*/ + return 1; /*0xffd87eb9*/ + } + return result; /*0xffd87ee8*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87eed.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87eed.c index fd47ec2..1b06ca4 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87eed.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd87eed.c @@ -1,2 +1,81 @@ -// 0xffd87eed -{"addr":"0xffd87eed","code":"int PchWdtInit()\n{\n int v0; // eax\n int v1; // ebx\n __int16 v2; // bp\n int v3; // eax\n int result; // eax\n char v5; // cl\n _DWORD *v6; // edi\n unsigned int v7; // ebx\n unsigned int v8; // ebx\n int v9; // eax\n int v10; // eax\n int v11; // esi\n int v12; // eax\n int v13; // [esp+14h] [ebp-8h] BYREF\n int v14; // [esp+18h] [ebp-4h]\n\n v0 = sub_FFD8EEB6(); /*0xffd87ef4*/\n v1 = sub_FFD8CD6B(v0); /*0xffd87f00*/\n DebugPrint(64, (int)\"(WDT) Readback = 0x%08x\\n\", v1); /*0xffd87f0a*/\n if ( (v1 & 0x4000) != 0 ) /*0xffd87f18*/\n {\n LOBYTE(v14) = 1; /*0xffd87f1c*/\n v2 = (v1 & 0x3FF) + 1; /*0xffd87f27*/\n }\n else\n {\n v14 = 0; /*0xffd87f2e*/\n v2 = 0; /*0xffd87f32*/\n }\n v3 = sub_FFD8AD54(); /*0xffd87f34*/\n result = (*(int (__cdecl **)(int, int, int, int *))(*(_DWORD *)v3 + 52))(v3, 4, 28, &v13); /*0xffd87f45*/\n if ( result >= 0 ) /*0xffd87f4d*/\n {\n v5 = v14; /*0xffd87f5c*/\n v6 = (_DWORD *)(v13 + 8); /*0xffd87f60*/\n *(_DWORD *)(v13 + 8) = unk_FFD97F0C; /*0xffd87f63*/\n *++v6 = unk_FFD97F10; /*0xffd87f64*/\n *++v6 = unk_FFD97F14; /*0xffd87f65*/\n v6[1] = unk_FFD97F18; /*0xffd87f66*/\n *(_BYTE *)(v13 + 26) = v5; /*0xffd87f75*/\n *(_WORD *)(v13 + 24) = v2; /*0xffd87f7c*/\n if ( (v1 & 0x3000000) != 0 ) /*0xffd87f82*/\n {\n DebugPrint(0x80000000, (int)\"(WDT) Expiration detected.\\n\", v1); /*0xffd87f8b*/\n v7 = v1 & 0xFC3FFFFF | 0x3800000; /*0xffd87f99*/\n }\n else\n {\n if ( (v1 & 0x400000) == 0 || PchWdtIsUnexpectedReset() ) /*0xffd87fa9*/\n {\n DebugPrint(64, (int)\"(WDT) Status OK.\\n\", v1); /*0xffd87fcf*/\n v8 = v1 & 0xFF7FFFFF; /*0xffd87fd7*/\n }\n else\n {\n DebugPrint(0x80000000, (int)\"(WDT) Unexpected reset detected and ignored.\\n\"); /*0xffd87fb8*/\n v8 = v1 & 0xFF3FFFFF; /*0xffd87fbf*/\n }\n v7 = v8 | 0x3000000; /*0xffd87fdd*/\n }\n v9 = sub_FFD8EEB6(); /*0xffd87fdf*/\n sub_FFD8CD97(v9, v7); /*0xffd87fe8*/\n InstallPpi(&unk_FFD9816C); /*0xffd87ff2*/\n v10 = InstallPpi(&unk_FFD98144); /*0xffd87ffc*/\n v11 = v10; /*0xffd88001*/\n if ( v10 < 0 ) /*0xffd88005*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v10); /*0xffd8800e*/\n v12 = GetReportStatusCodePpi(); /*0xffd88016*/\n if ( v12 ) /*0xffd8801d*/\n (*(void (__cdecl **)(const char *, int, const char *))(v12 + 4))( /*0xffd8802e*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\Wdt.c\",\n 216,\n \"!EFI_ERROR (Status)\");\n }\n return v11; /*0xffd88034*/\n }\n return result; /*0xffd88036*/\n}","refs":[{"addr":"0xffd8eeb6","name":"sub_FFD8EEB6"},{"addr":"0xffd8cd6b","name":"sub_FFD8CD6B"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd945a8","name":"aWdtReadback0x0","string":"(WDT) Readback = 0x%08x\n"},{"addr":"0xffd8ad54","name":"sub_FFD8AD54"},{"addr":"0xffd97f0c","name":"unk_FFD97F0C"},{"addr":"0xffd97f10","name":"unk_FFD97F10"},{"addr":"0xffd97f14","name":"unk_FFD97F14"},{"addr":"0xffd97f18","name":"unk_FFD97F18"},{"addr":"0xffd945c4","name":"aWdtExpirationD","string":"(WDT) Expiration detected.\n"},{"addr":"0xffd94610","name":"aWdtStatusOk","string":"(WDT) Status OK.\n"},{"addr":"0xffd945e0","name":"aWdtUnexpectedR","string":"(WDT) Unexpected reset detected and ignored.\n"},{"addr":"0xffd87e99","name":"PchWdtIsUnexpectedReset"},{"addr":"0xffd8cd97","name":"sub_FFD8CD97"},{"addr":"0xffd7f948","name":"InstallPpi"},{"addr":"0xffd9816c","name":"unk_FFD9816C"},{"addr":"0xffd98144","name":"unk_FFD98144"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd94624","name":"aEHsPurleysktpk_8","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\Wdt.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"}]} \ No newline at end of file +int PchWdtInit() +{ + int v0; // eax + int v1; // ebx + __int16 v2; // bp + int v3; // eax + int result; // eax + char v5; // cl + _DWORD *v6; // edi + unsigned int v7; // ebx + unsigned int v8; // ebx + int v9; // eax + int v10; // eax + int v11; // esi + int v12; // eax + int v13; // [esp+14h] [ebp-8h] BYREF + int v14; // [esp+18h] [ebp-4h] + + v0 = sub_FFD8EEB6(); /*0xffd87ef4*/ + v1 = sub_FFD8CD6B(v0); /*0xffd87f00*/ + DebugPrint(64, (int)"(WDT) Readback = 0x%08x\n", v1); /*0xffd87f0a*/ + if ( (v1 & 0x4000) != 0 ) /*0xffd87f18*/ + { + LOBYTE(v14) = 1; /*0xffd87f1c*/ + v2 = (v1 & 0x3FF) + 1; /*0xffd87f27*/ + } + else + { + v14 = 0; /*0xffd87f2e*/ + v2 = 0; /*0xffd87f32*/ + } + v3 = sub_FFD8AD54(); /*0xffd87f34*/ + result = (*(int (__cdecl **)(int, int, int, int *))(*(_DWORD *)v3 + 52))(v3, 4, 28, &v13); /*0xffd87f45*/ + if ( result >= 0 ) /*0xffd87f4d*/ + { + v5 = v14; /*0xffd87f5c*/ + v6 = (_DWORD *)(v13 + 8); /*0xffd87f60*/ + *(_DWORD *)(v13 + 8) = unk_FFD97F0C; /*0xffd87f63*/ + *++v6 = unk_FFD97F10; /*0xffd87f64*/ + *++v6 = unk_FFD97F14; /*0xffd87f65*/ + v6[1] = unk_FFD97F18; /*0xffd87f66*/ + *(_BYTE *)(v13 + 26) = v5; /*0xffd87f75*/ + *(_WORD *)(v13 + 24) = v2; /*0xffd87f7c*/ + if ( (v1 & 0x3000000) != 0 ) /*0xffd87f82*/ + { + DebugPrint(0x80000000, (int)"(WDT) Expiration detected.\n", v1); /*0xffd87f8b*/ + v7 = v1 & 0xFC3FFFFF | 0x3800000; /*0xffd87f99*/ + } + else + { + if ( (v1 & 0x400000) == 0 || PchWdtIsUnexpectedReset() ) /*0xffd87fa9*/ + { + DebugPrint(64, (int)"(WDT) Status OK.\n", v1); /*0xffd87fcf*/ + v8 = v1 & 0xFF7FFFFF; /*0xffd87fd7*/ + } + else + { + DebugPrint(0x80000000, (int)"(WDT) Unexpected reset detected and ignored.\n"); /*0xffd87fb8*/ + v8 = v1 & 0xFF3FFFFF; /*0xffd87fbf*/ + } + v7 = v8 | 0x3000000; /*0xffd87fdd*/ + } + v9 = sub_FFD8EEB6(); /*0xffd87fdf*/ + sub_FFD8CD97(v9, v7); /*0xffd87fe8*/ + InstallPpi(&unk_FFD9816C); /*0xffd87ff2*/ + v10 = InstallPpi(&unk_FFD98144); /*0xffd87ffc*/ + v11 = v10; /*0xffd88001*/ + if ( v10 < 0 ) /*0xffd88005*/ + { + DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v10); /*0xffd8800e*/ + v12 = GetReportStatusCodePpi(); /*0xffd88016*/ + if ( v12 ) /*0xffd8801d*/ + (*(void (__cdecl **)(const char *, int, const char *))(v12 + 4))( /*0xffd8802e*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\Wdt.c", + 216, + "!EFI_ERROR (Status)"); + } + return v11; /*0xffd88034*/ + } + return result; /*0xffd88036*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd880d2.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd880d2.c index 316c19c..a3f0f80 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd880d2.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd880d2.c @@ -1,2 +1,65 @@ -// 0xffd880d2 -{"addr":"0xffd880d2","code":"int InstallPchResetPpi()\n{\n int v0; // eax\n _DWORD *v1; // edi\n int v2; // eax\n int v3; // eax\n _DWORD *v4; // esi\n _DWORD *v5; // eax\n int v6; // eax\n int v7; // esi\n int v8; // eax\n int v10; // eax\n\n DebugPrint(64, (int)\"InstallPchReset() Start\\n\"); /*0xffd880de*/\n v0 = sub_FFD8ADB0(40); /*0xffd880e8*/\n v1 = (_DWORD *)v0; /*0xffd880ed*/\n if ( !v0 ) /*0xffd880f1*/\n return -2147483639; /*0xffd881e7*/\n sub_FFD90233(v0 + 12); /*0xffd880fc*/\n v1[5] = PchResetInitCallback; /*0xffd88106*/\n *v1 = -2147483632; /*0xffd8810c*/\n v1[1] = &unk_FFD97FAC; /*0xffd88112*/\n v1[2] = v1 + 5; /*0xffd88119*/\n v2 = InstallPpi(v1); /*0xffd8811c*/\n if ( v2 < 0 ) /*0xffd88132*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v2); /*0xffd8813b*/\n v3 = GetReportStatusCodePpi(); /*0xffd88143*/\n if ( v3 ) /*0xffd8814a*/\n (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd88153*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchReset.c\",\n 132,\n \"!EFI_ERROR (Status)\");\n }\n v4 = (_DWORD *)sub_FFD8ADB0(12); /*0xffd88164*/\n v5 = (_DWORD *)sub_FFD8ADB0(4); /*0xffd88166*/\n if ( !v4 || !v5 ) /*0xffd88171*/\n {\n v10 = GetReportStatusCodePpi(); /*0xffd881cd*/\n if ( v10 ) /*0xffd881d4*/\n (*(void (__cdecl **)(const char *, int, const char *))(v10 + 4))( /*0xffd881e1*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchReset.c\",\n 139,\n \"((BOOLEAN)(0==1))\");\n return -2147483639; /*0xffd881e1*/\n }\n *v5 = PchResetCallback2; /*0xffd88173*/\n *v4 = -2147483632; /*0xffd8817b*/\n v4[1] = &unk_FFD97F2C; /*0xffd88181*/\n v4[2] = v5; /*0xffd88188*/\n v6 = InstallPpi(v4); /*0xffd8818b*/\n v7 = v6; /*0xffd88190*/\n if ( v6 < 0 ) /*0xffd88194*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v6); /*0xffd8819d*/\n v8 = GetReportStatusCodePpi(); /*0xffd881a5*/\n if ( v8 ) /*0xffd881ac*/\n (*(void (__cdecl **)(const char *, int, const char *))(v8 + 4))( /*0xffd881b5*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\LibraryPrivate\\\\PeiPchInitLib\\\\PchReset.c\",\n 153,\n \"!EFI_ERROR (Status)\");\n }\n DebugPrint(64, (int)\"InstallPchReset() End\\n\"); /*0xffd881c2*/\n return v7; /*0xffd881ec*/\n}","refs":[{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd946d0","name":"aInstallpchrese","string":"InstallPchReset() Start\n"},{"addr":"0xffd8adb0","name":"sub_FFD8ADB0"},{"addr":"0xffd90233","name":"sub_FFD90233"},{"addr":"0xffd88046","name":"PchResetInitCallback"},{"addr":"0xffd97fac","name":"unk_FFD97FAC"},{"addr":"0xffd7f948","name":"InstallPpi"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd94684","name":"aEHsPurleysktpk_9","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchReset.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffd91b10","name":"aBoolean01","string":"((BOOLEAN)(0==1))"},{"addr":"0xffd88081","name":"PchResetCallback2"},{"addr":"0xffd97f2c","name":"unk_FFD97F2C"},{"addr":"0xffd946ec","name":"aInstallpchrese_0","string":"InstallPchReset() End\n"}]} \ No newline at end of file +int InstallPchResetPpi() +{ + int v0; // eax + _DWORD *v1; // edi + int v2; // eax + int v3; // eax + _DWORD *v4; // esi + _DWORD *v5; // eax + int v6; // eax + int v7; // esi + int v8; // eax + int v10; // eax + + DebugPrint(64, (int)"InstallPchReset() Start\n"); /*0xffd880de*/ + v0 = sub_FFD8ADB0(40); /*0xffd880e8*/ + v1 = (_DWORD *)v0; /*0xffd880ed*/ + if ( !v0 ) /*0xffd880f1*/ + return -2147483639; /*0xffd881e7*/ + sub_FFD90233(v0 + 12); /*0xffd880fc*/ + v1[5] = PchResetInitCallback; /*0xffd88106*/ + *v1 = -2147483632; /*0xffd8810c*/ + v1[1] = &unk_FFD97FAC; /*0xffd88112*/ + v1[2] = v1 + 5; /*0xffd88119*/ + v2 = InstallPpi(v1); /*0xffd8811c*/ + if ( v2 < 0 ) /*0xffd88132*/ + { + DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0xffd8813b*/ + v3 = GetReportStatusCodePpi(); /*0xffd88143*/ + if ( v3 ) /*0xffd8814a*/ + (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffd88153*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchReset.c", + 132, + "!EFI_ERROR (Status)"); + } + v4 = (_DWORD *)sub_FFD8ADB0(12); /*0xffd88164*/ + v5 = (_DWORD *)sub_FFD8ADB0(4); /*0xffd88166*/ + if ( !v4 || !v5 ) /*0xffd88171*/ + { + v10 = GetReportStatusCodePpi(); /*0xffd881cd*/ + if ( v10 ) /*0xffd881d4*/ + (*(void (__cdecl **)(const char *, int, const char *))(v10 + 4))( /*0xffd881e1*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchReset.c", + 139, + "((BOOLEAN)(0==1))"); + return -2147483639; /*0xffd881e1*/ + } + *v5 = PchResetCallback2; /*0xffd88173*/ + *v4 = -2147483632; /*0xffd8817b*/ + v4[1] = &unk_FFD97F2C; /*0xffd88181*/ + v4[2] = v5; /*0xffd88188*/ + v6 = InstallPpi(v4); /*0xffd8818b*/ + v7 = v6; /*0xffd88190*/ + if ( v6 < 0 ) /*0xffd88194*/ + { + DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v6); /*0xffd8819d*/ + v8 = GetReportStatusCodePpi(); /*0xffd881a5*/ + if ( v8 ) /*0xffd881ac*/ + (*(void (__cdecl **)(const char *, int, const char *))(v8 + 4))( /*0xffd881b5*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\LibraryPrivate\\PeiPchInitLib\\PchReset.c", + 153, + "!EFI_ERROR (Status)"); + } + DebugPrint(64, (int)"InstallPchReset() End\n"); /*0xffd881c2*/ + return v7; /*0xffd881ec*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8ad54.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8ad54.c index 9f1c1d8..b3f48a6 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8ad54.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8ad54.c @@ -1,2 +1,15 @@ -// 0xffd8ad54 -{"addr":"0xffd8ad54","code":"int sub_FFD8AD54()\n{\n int v0; // esi\n int __return_address; // [esp+0h] [ebp-Ch]\n int v3; // [esp+6h] [ebp-6h]\n\n sub_FFD8D30B(__return_address); /*0xffd8ad5d*/\n v0 = *(_DWORD *)(v3 - 4); /*0xffd8ad65*/\n if ( !v0 ) /*0xffd8ad6a*/\n sub_FFD7F9D9( /*0xffd8ad79*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n \"PeiServices != ((void *) 0)\");\n return v0; /*0xffd8ad81*/\n}","refs":[{"addr":"0xffd8d30b","name":"sub_FFD8D30B"},{"addr":"0xffd7f9d9","name":"sub_FFD7F9D9"},{"addr":"0xffd956a4","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c"},{"addr":"0xffd95684","name":"aPeiservicesVoi","string":"PeiServices != ((void *) 0)"}]} \ No newline at end of file +int sub_FFD8AD54() +{ + int v0; // esi + int __return_address; // [esp+0h] [ebp-Ch] + int v3; // [esp+6h] [ebp-6h] + + sub_FFD8D30B(__return_address); /*0xffd8ad5d*/ + v0 = *(_DWORD *)(v3 - 4); /*0xffd8ad65*/ + if ( !v0 ) /*0xffd8ad6a*/ + sub_FFD7F9D9( /*0xffd8ad79*/ + (int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c", + 48, + "PeiServices != ((void *) 0)"); + return v0; /*0xffd8ad81*/ +} diff --git a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8b940.c b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8b940.c index 64fa6dc..cdc0424 100644 --- a/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8b940.c +++ b/PurleySktPkg/SouthClusterLbg/SiInit/Pei/SiInitPreMem/decompiled/ffd8b940.c @@ -1,2 +1,41 @@ -// 0xffd8b940 -{"addr":"0xffd8b940","code":"int __thiscall sub_FFD8B940(void *this)\n{\n int n256; // esi\n int n13; // edi\n int v3; // eax\n void *v4; // ecx\n int v5; // eax\n int result; // eax\n\n n256 = 256; /*0xffd8b947*/\n n13 = 13; /*0xffd8b94e*/\n do /*0xffd8b9e0*/\n {\n v3 = sub_FFD8B14D(n256, this, -1, 0, 0); /*0xffd8b95f*/\n if ( v3 < 0 ) /*0xffd8b969*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v3); /*0xffd8b976*/\n v5 = GetReportStatusCodePpi(); /*0xffd8b97e*/\n if ( v5 ) /*0xffd8b985*/\n (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd8b992*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\Library\\\\PeiDxeSmmGpioLib\\\\GpioLib.c\",\n 1584,\n \"!EFI_ERROR (Status)\");\n }\n result = sub_FFD8B14D(n256, v4, -1, 0, 0); /*0xffd8b9a3*/\n if ( result < 0 ) /*0xffd8b9ad*/\n {\n DebugPrint(0x80000000, (int)\"\\nASSERT_EFI_ERROR (Status = %r)\\n\", result); /*0xffd8b9ba*/\n result = GetReportStatusCodePpi(); /*0xffd8b9c2*/\n if ( result ) /*0xffd8b9c9*/\n result = (*(int (__cdecl **)(const char *, int, const char *))(result + 4))( /*0xffd8b9d6*/\n \"e:\\\\hs\\\\PurleySktPkg\\\\SouthClusterLbg\\\\Library\\\\PeiDxeSmmGpioLib\\\\GpioLib.c\",\n 1712,\n \"!EFI_ERROR (Status)\");\n }\n ++n256; /*0xffd8b9dc*/\n --n13; /*0xffd8b9dd*/\n }\n while ( n13 ); /*0xffd8b9e0*/\n return result; /*0xffd8b9e6*/\n}","refs":[{"addr":"0xffd8b14d","name":"sub_FFD8B14D"},{"addr":"0xffd7f9af","name":"DebugPrint"},{"addr":"0xffd9192c","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffd7f97e","name":"GetReportStatusCodePpi"},{"addr":"0xffd95844","name":"aEHsPurleysktpk_16","string":"e:\\hs\\PurleySktPkg\\SouthClusterLbg\\Library\\PeiDxeSmmGpioLib\\GpioLib.c"},{"addr":"0xffd91950","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"}]} \ No newline at end of file +int __thiscall sub_FFD8B940(void *this) +{ + int n256; // esi + int n13; // edi + int v3; // eax + void *v4; // ecx + int v5; // eax + int result; // eax + + n256 = 256; /*0xffd8b947*/ + n13 = 13; /*0xffd8b94e*/ + do /*0xffd8b9e0*/ + { + v3 = sub_FFD8B14D(n256, this, -1, 0, 0); /*0xffd8b95f*/ + if ( v3 < 0 ) /*0xffd8b969*/ + { + DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v3); /*0xffd8b976*/ + v5 = GetReportStatusCodePpi(); /*0xffd8b97e*/ + if ( v5 ) /*0xffd8b985*/ + (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffd8b992*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\Library\\PeiDxeSmmGpioLib\\GpioLib.c", + 1584, + "!EFI_ERROR (Status)"); + } + result = sub_FFD8B14D(n256, v4, -1, 0, 0); /*0xffd8b9a3*/ + if ( result < 0 ) /*0xffd8b9ad*/ + { + DebugPrint(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", result); /*0xffd8b9ba*/ + result = GetReportStatusCodePpi(); /*0xffd8b9c2*/ + if ( result ) /*0xffd8b9c9*/ + result = (*(int (__cdecl **)(const char *, int, const char *))(result + 4))( /*0xffd8b9d6*/ + "e:\\hs\\PurleySktPkg\\SouthClusterLbg\\Library\\PeiDxeSmmGpioLib\\GpioLib.c", + 1712, + "!EFI_ERROR (Status)"); + } + ++n256; /*0xffd8b9dc*/ + --n13; /*0xffd8b9dd*/ + } + while ( n13 ); /*0xffd8b9e0*/ + return result; /*0xffd8b9e6*/ +}