Newer
Older
AMI-Aptio-BIOS-Reversed / TcgPlatformSetupPeiPolicy / TcgPlatformSetupPeiPolicy.c
@Ajax Dong Ajax Dong 2 days ago 12 KB Init
//
// TcgPlatformSetupPeiPolicy.efi - Full Decompilation
// Source: IDA Pro MCP port 13376
// Functions: 13
//

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

{"addr":"0xffe179d4","code":"int CompareMem(_BYTE *DestBuffer, _BYTE *a2, int Length)\n{\n bool v6; // zf\n\n do /*0xffe179e2*/\n {\n if ( !Length ) /*0xffe179e2*/\n break; /*0xffe179e2*/\n v6 = *DestBuffer++ == *a2++; /*0xffe179e2*/\n --Length; /*0xffe179e2*/\n }\n while ( v6 ); /*0xffe179e2*/\n return (unsigned __int8)*(DestBuffer - 1) - (unsigned __int8)*(a2 - 1); /*0xffe179ee*/\n}"}

{"addr":"0xffe179f4","code":"void *SetMem(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe17a01*/\n return buf; /*0xffe17a07*/\n}"}

{"addr":"0xffe17a14","code":"int CopyMemBackwards(int DstBase, int Count, int LoVal, int HiVal)\n{\n do /*0xffe17a2d*/\n {\n *(_DWORD *)(DstBase + 8 *Count - 8) = LoVal; /*0xffe17a25*/\n *(_DWORD *)(DstBase + 8 *Count-- - 4) = HiVal; /*0xffe17a29*/\n }\n while ( Count ); /*0xffe17a2d*/\n return DstBase; /*0xffe17a31*/\n}"}

{"addr":"0xffe17a34","code":"void *SetMem32(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe17a41*/\n return buf; /*0xffe17a47*/\n}"}

{"addr":"0xffe17a54","code":"char *CopyMem(char *dst, char *src, unsigned int count)\n{\n unsigned int count_1; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count_1 = count; /*0xffe17a5e*/\n if ( src < dst && &src[count - 1] >= dst ) /*0xffe17a6c*/\n {\n src_1 = &src[count - 1]; /*0xffe17a80*/\n dst_1 = &dst[count - 1]; /*0xffe17a82*/\n }\n else\n {\n count_1 = count & 3; /*0xffe17a70*/\n qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe17a79*/\n src_1 = &src[4 * (count >> 2)]; /*0xffe17a79*/\n dst_1 = &dst[4 * (count >> 2)]; /*0xffe17a79*/\n }\n qmemcpy(dst_1, src_1, count_1); /*0xffe17a89*/\n return dst; /*0xffe17a90*/\n}"}

{"addr":"0xffe17ab4","code":"// bad sp value at call has been detected, the output may be wrong!\nEFI_STATUS TcgPlatformSetupPolicyEntry(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n int ( **TpmProtocol)(); // esi\n int PeiServices; // eax\n int Status; // eax\n int Status_1; // esi\n int DebugOutputInterface; // eax\n _DWORD *PolicyDataPtr; // edi\n char TpmDeviceSelect; // [esp-333h] [ebp-333h]\n char TpmIntStsPolarity; // [esp-332h] [ebp-332h]\n char TpmDeviceEnable; // [esp-32Eh] [ebp-32Eh]\n char TpmPtpIrqEnable; // [esp-32Dh] [ebp-32Dh]\n char TpmSubOwner; // [esp-32Ch] [ebp-32Ch]\n char Tpm2AcpiRev; // [esp-32Ah] [ebp-32Ah]\n char TpmClearOwner; // [esp-327h] [ebp-327h]\n char TpmIntType; // [esp-326h] [ebp-326h]\n char TpmFlags1; // [esp-325h] [ebp-325h]\n char TpmFlags2; // [esp-324h] [ebp-324h]\n char TpmFlags3; // [esp-323h] [ebp-323h]\n char TpmFlags4; // [esp-322h] [ebp-322h]\n char TpmInterfaceType; // [esp-321h] [ebp-321h]\n char TpmMiscFlags; // [esp-320h] [ebp-320h]\n unsigned __int8 TpmTypeBits0; // [esp-31Ah] [ebp-31Ah]\n unsigned __int8 TpmTypeBits1; // [esp-319h] [ebp-319h]\n unsigned __int8 TpmTypeBits2; // [esp-318h] [ebp-318h]\n unsigned __int8 TpmTypeBits3; // [esp-317h] [ebp-317h]\n unsigned __int8 TpmTypeBits4; // [esp-316h] [ebp-316h]\n _DWORD PpiBuffer[2]; // [esp-10h] [ebp-10h] BYREF\n int PolicyData; // [esp-8h] [ebp-8h] BYREF\n\n PpiBuffer[1] = 814; /*0xffe17bb6*/\n PeiServices = SystemTable->Hdr.Signature; /*0xffe17bc9*/\n PolicyData = 0; /*0xffe17bcc*/\n if ( (*(int ( **)(EFI_SYSTEM_TABLE *, void *, _DWORD, _DWORD, _DWORD *))(PeiServices + 32))( /*0xffe17bf3*/\n SystemTable,\n &unk_FFE182E4,\n 0,\n 0,\n PpiBuffer) < 0\n || (*(int ( **)(EFI_SYSTEM_TABLE *, int, int, int *))(LODWORD(SystemTable->Hdr.Signature) + 52))(\n SystemTable,\n 4,\n 51,\n &PolicyData) < 0 )\n {\n return 0; /*0xffe17bd9*/\n }\n PpiBuffer[0] = TpmProtocol; /*0xffe17bf5*/\n Status = (*TpmProtocol)(); /*0xffe17c10*/\n Status_1 = Status; /*0xffe17c12*/\n if ( Status < 0 ) /*0xffe17c19*/\n {\n DebugPrint(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", Status); /*0xffe17c26*/\n DebugOutputInterface = GetDebugOutputInterface(); /*0xffe17c2e*/\n if ( DebugOutputInterface ) /*0xffe17c35*/\n (*(void ( **)(const char *, int, const char *))(DebugOutputInterface + 4))( /*0xffe17c46*/\n \"e:\\\\hs\\\\AmiModulePkg\\\\TCG2\\\\Common\\\\TcgPlatformSetupPeiPolicy\\\\TcgPlatformSetupPeiPolicy.c\",\n 213,\n \"!EFI_ERROR (Status)\");\n }\n if ( PolicyData ) /*0xffe17c51*/\n {\n if ( Status_1 >= 0 ) /*0xffe17c59*/\n {\n (*(void ( **)(int, int, _DWORD))(LODWORD(SystemTable->Hdr.Signature) + 84))(PolicyData + 24, 27, 0); /*0xffe17c68*/\n PolicyDataPtr = (_DWORD *)(PolicyData + 8); /*0xffe17c76*/\n *(_DWORD *)(PolicyData + 8) = *(_DWORD *)byte_FFE18304; /*0xffe17c79*/\n *++PolicyDataPtr = unk_FFE18308; /*0xffe17c7a*/\n *++PolicyDataPtr = unk_FFE1830C; /*0xffe17c7b*/\n PolicyDataPtr[1] = unk_FFE18310; /*0xffe17c7c*/\n *(_BYTE *)(PolicyData + 24) = TpmDeviceEnable; /*0xffe17c86*/\n *(_BYTE *)(PolicyData + 25) = TpmDeviceSelect; /*0xffe17c92*/\n *(_BYTE *)(PolicyData + 26) = Tpm2AcpiRev; /*0xffe17c9e*/\n *(_BYTE *)(PolicyData + 27) = TpmIntStsPolarity; /*0xffe17caa*/\n *(_BYTE *)(PolicyData + 42) = TpmClearOwner; /*0xffe17cb6*/\n *(_BYTE *)(PolicyData + 29) = TpmIntType; /*0xffe17cc2*/\n *(_BYTE *)(PolicyData + 45) = TpmFlags3; /*0xffe17cce*/\n *(_BYTE *)(PolicyData + 44) = TpmFlags2; /*0xffe17cda*/\n *(_BYTE *)(PolicyData + 43) = TpmFlags1; /*0xffe17ce6*/\n *(_BYTE *)(PolicyData + 46) = TpmFlags4; /*0xffe17cf2*/\n *(_BYTE *)(PolicyData + 30) = TpmInterfaceType; /*0xffe17cfe*/\n *(_BYTE *)(PolicyData + 36) = TpmSubOwner; /*0xffe17d0a*/\n *(_BYTE *)(PolicyData + 35) = TpmPtpIrqEnable; /*0xffe17d16*/\n *(_DWORD *)(PolicyData + 47) = TpmTypeBits0 | TpmTypeBits1 | TpmTypeBits2 | TpmTypeBits3 | (16 *TpmTypeBits4); /*0xffe17d4a*/\n *(_BYTE *)(PolicyData + 39) = TpmMiscFlags; /*0xffe17d56*/\n }\n }\n return (*(int ( **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 24))( /*0xffe17d6c*/\n SystemTable,\n &unk_FFE18324);\n}","refs":[{"addr":"0xffe182e4","name":"unk_FFE182E4"},{"addr":"0xffe17e36","name":"DebugPrint"},{"addr":"0xffe17f40","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe17e05","name":"GetDebugOutputInterface"},{"addr":"0xffe17f7c","name":"aEHsAmimodulepk","string":"e:\\hs\\AmiModulePkg\\TCG2\\Common\\TcgPlatformSetupPeiPolicy\\TcgPlatformSetupPeiPolicy.c"},{"addr":"0xffe17f64","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe18304","name":"DestBuffer"},{"addr":"0xffe18308","name":"unk_FFE18308"},{"addr":"0xffe1830c","name":"unk_FFE1830C"},{"addr":"0xffe18310","name":"unk_FFE18310"},{"addr":"0xffe18324","name":"unk_FFE18324"}]}

{"addr":"0xffe17d6d","code":"int CompareMemWithDebug(_BYTE *DestBuffer, int Length)\n{\n int DebugOutputInterface; // eax\n int Status; // eax\n int Status2; // eax\n\n if ( DestBuffer == ::DestBuffer ) /*0xffe17d79*/\n return 0; /*0xffe17d7b*/\n if ( !DestBuffer ) /*0xffe17d84*/\n {\n DebugOutputInterface = GetDebugOutputInterface(); /*0xffe17d86*/\n if ( DebugOutputInterface ) /*0xffe17d8d*/\n (*(void ( **)(const char *, int, const char *))(DebugOutputInterface + 4))( /*0xffe17d9b*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CompareMemWrapper.c\",\n 60,\n \"DestinationBuffer != ((void *) 0)\");\n }\n if ( Length - 1 > (unsigned int)(-1 - (_DWORD)DestBuffer) ) /*0xffe17daf*/\n {\n Status = GetDebugOutputInterface(); /*0xffe17db1*/\n if ( Status ) /*0xffe17db8*/\n (*(void ( **)(const char *, int, const char *))(Status + 4))( /*0xffe17dc6*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CompareMemWrapper.c\",\n 62,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)\");\n }\n if ( Length - 1 > (unsigned int)(-1 - (_DWORD)::DestBuffer) ) /*0xffe17dd6*/\n {\n Status2 = GetDebugOutputInterface(); /*0xffe17dd8*/\n if ( Status2 ) /*0xffe17ddf*/\n (*(void ( **)(const char *, int, const char *))(Status2 + 4))( /*0xffe17ded*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CompareMemWrapper.c\",\n 63,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)\");\n }\n return CompareMem(DestBuffer, ::DestBuffer, Length); /*0xffe17e02*/\n}","refs":[{"addr":"0xffe18304","name":"DestBuffer"},{"addr":"0xffe17e05","name":"GetDebugOutputInterface"},{"addr":"0xffe17ff8","name":"aEHsMdepkgLibra_1","string":"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CompareMemWrapper.c"},{"addr":"0xffe17fd4","name":"aDestinationbuf","string":"DestinationBuffer != ((void *) 0)"},{"addr":"0xffe18038","name":"aLength10xfffff","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)"},{"addr":"0xffe18070","name":"aLength10xfffff_0","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)"},{"addr":"0xffe179d4","name":"CompareMem"}]}

{"addr":"0xffe17e05","code":"int GetDebugOutputInterface()\n{\n int PeiServicesTablePointer; // eax\n _BYTE GuidBuffer[4]; // [esp+0h] [ebp-8h] BYREF\n int DebugInterface; // [esp+4h] [ebp-4h] BYREF\n\n PeiServicesTablePointer = GetPeiServicesTablePointer(); /*0xffe17e0a*/\n if ( (*(int ( **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)PeiServicesTablePointer + 32))( /*0xffe17e29*/\n PeiServicesTablePointer,\n &unk_FFE182F4,\n 0,\n GuidBuffer,\n &DebugInterface) >= 0 )\n return DebugInterface; /*0xffe17e2f*/\n else\n return 0; /*0xffe17e2b*/\n}","refs":[{"addr":"0xffe17ecd","name":"GetPeiServicesTablePointer"},{"addr":"0xffe182f4","name":"unk_FFE182F4"}]}

{"addr":"0xffe17e36","code":"int DebugPrint(int a1, const char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...)\n{\n int DebugInterface_1; // eax\n int ( **DebugInterface)(int, const char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n);\n DebugInterface_1 = GetDebugOutputInterface(); /*0xffe17e37*/\n DebugInterface = (int ( **)(int, const char *, char *))DebugInterface_1; /*0xffe17e3c*/\n if ( DebugInterface_1 ) /*0xffe17e40*/\n {\n DebugInterface_1 = GetTpmState(); /*0xffe17e42*/\n if ( (DebugInterface_1 & a1) != 0 ) /*0xffe17e4d*/\n return (*DebugInterface)(a1, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); /*0xffe17e59*/\n }\n return DebugInterface_1; /*0xffe17e5e*/\n}","refs":[{"addr":"0xffe17e05","name":"GetDebugOutputInterface"},{"addr":"0xffe17e7e","name":"GetTpmState"}]}

{"addr":"0xffe17e60","code":"int DebugOutputString(\n int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n int n48,\n int PeiServices____((void__)_0))\n{\n int DebugInterface; // eax\n\n DebugInterface = GetDebugOutputInterface(); /*0xffe17e66*/\n if ( DebugInterface ) /*0xffe17e6d*/\n return (*(int ( **)(int, int, int))(DebugInterface + 4))( /*0xffe17e75*/\n e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n n48,\n PeiServices____((void__)_0));\n return DebugInterface; /*0xffe17e7b*/\n}","refs":[{"addr":"0xffe17e05","name":"GetDebugOutputInterface"}]}

{"addr":"0xffe17e7e","code":"int GetTpmState()\n{\n unsigned __int8 CmosIndex; // al\n char TpmStateRead; // al\n char TpmStateRead_1; // cl\n\n CmosIndex = __inbyte(0x70u); /*0xffe17e84*/\n __outbyte(0x70u, CmosIndex & 0x80 | 0x4A); /*0xffe17e89*/\n TpmStateRead = __inbyte(0x71u); /*0xffe17e90*/\n TpmStateRead_1 = TpmStateRead; /*0xffe17e91*/\n if ( (unsigned __int8)TpmStateRead <= 3u ) /*0xffe17e96*/\n {\nLABEL_4:\n if ( !TpmStateRead_1 ) /*0xffe17eb1*/\n return 0; /*0xffe17eb1*/\n goto LABEL_5; /*0xffe17eb1*/\n }\n TpmStateRead_1 = n3; /*0xffe17e98*/\n if ( !n3 ) /*0xffe17ea0*/\n {\n TpmStateRead_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe17eac*/\n goto LABEL_4; /*0xffe17eac*/\n }\nLABEL_5:\n if ( TpmStateRead_1 != -1 )\n return TpmStateRead_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe17ec9*/\n}","refs":[{"addr":"0xffe18338","name":"n3"}]}

{"addr":"0xffe17ecd","code":"int GetPeiServicesTablePointer()\n{\n int PeiServices; // esi\n _BYTE IdtrStorage[2]; // [esp+4h] [ebp-8h] BYREF\n int IdtrBase; // [esp+6h] [ebp-6h]\n\n ReadIdtr(IdtrStorage); /*0xffe17ed6*/\n PeiServices = *(_DWORD *)(IdtrBase - 4); /*0xffe17ede*/\n if ( !PeiServices ) /*0xffe17ee3*/\n DebugOutputString( /*0xffe17ef2*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n (int)\"PeiServices != ((void *) 0)\");\n return PeiServices; /*0xffe17efa*/\n}","refs":[{"addr":"0xffe17eff","name":"ReadIdtr"},{"addr":"0xffe17e60","name":"DebugOutputString"},{"addr":"0xffe180c4","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c"},{"addr":"0xffe180a4","name":"aPeiservicesVoi","string":"PeiServices != ((void *) 0)"}]}

{"addr":"0xffe17eff","code":"void *__thiscall ReadIdtr(void *Idtr)\n{\n void *Idtr_1; // eax\n\n if ( !Idtr ) /*0xffe17f05*/\n DebugOutputString((int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\", 37, (int)\"Idtr != ((void *) 0)\"); /*0xffe17f14*/\n Idtr_1 = Idtr; /*0xffe17f1a*/\n __sidt(Idtr); /*0xffe17f1d*/\n return Idtr_1; /*0xffe17f21*/\n}","refs":[{"addr":"0xffe17e60","name":"DebugOutputString"},{"addr":"0xffe1812c","name":"aEHsMdepkgLibra_0","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c"},{"addr":"0xffe18114","name":"aIdtrVoid0","string":"Idtr != ((void *) 0)"}]}