Newer
Older
AMI-Aptio-BIOS-Reversed / AmiModulePkg / TCG2 / Common / AmiTcgPlatformPei / AmiTcgPlatformPeiAfterMem / AmiTcgPlatformPeiAfterMem.c
@Ajax Dong Ajax Dong 2 days ago 122 KB Restructure the repo
//
// AmiTcgPlatformPeiAfterMem.efi - Full Decompilation
// Source: IDA Pro MCP port 13379
// Functions: 80
//

#include <Uefi.h>
#include <PiPei.h>

{"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}"}

{"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}"}

{"addr":"0xffe19268","code":"void *ZeroMem(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe19275*/\n return buf; /*0xffe1927b*/\n}"}

{"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}"}

{"addr":"0xffe192c8","code":"void *SetMemWrapper(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe192d5*/\n return buf; /*0xffe192db*/\n}"}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

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

{"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}"}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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}"}

{"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}"}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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}"}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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)"}]}

{"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)"}]}

{"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)"}]}

{"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)"}]}

{"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)"}]}

{"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)"}]}

{"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"}]}

{"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"}]}

{"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)"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

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

{"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}"}

{"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"}]}

{"addr":"0xffe1fc50","code":"// local variable allocation has failed, the output may be wrong!\nint __usercall PeiPcdGetPtr@<eax>(_DWORD *buf@<ecx>, _BYTE *DigestBuffer@<edx>, int FitEntryIndex@<ebx>)\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"}]}

{"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"}]}

{"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"}]}

{"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"}]}

{"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)"}]}

{"addr":"0xffe2000c","code":"unsigned __int64 __usercall _umoddi3@<edx:eax>(unsigned __int8 n0x40@<cl>, unsigned __int64 a2@<edx:eax>)\n{\n if ( n0x40 >= 0x40u ) /*0xffe2000f*/\n return 0; /*0xffe20026*/\n else\n return a2 >> n0x40; /*0xffe20019*/\n}"}