mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-28 16:14:04 +02:00
ShellPkg: UefiShellDebug1CommandsLib: Image Execution Table in Dmem.c
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4352 Implemented dumping of the Image Execution Table using Dmem.c Cc: Ray Ni <ray.ni@intel.com> Cc: Zhichao Gao <zhichao.gao@intel.com> Signed-off-by: Sam Kaynor <Sam.Kaynor@arm.com> Tested-by: Stuart Yoder <stuart.yoder@arm.com> Reviewed-by: Stuart Yoder <stuart.yoder@arm.com> Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
This commit is contained in:
parent
749065300a
commit
f46b5b06c6
@ -139,6 +139,138 @@ DisplayRtProperties (
|
|||||||
return (ShellStatus);
|
return (ShellStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieve the ImageExecutionTable Entry ImageName from ImagePath
|
||||||
|
|
||||||
|
@param[in] FileName The full path of the image.
|
||||||
|
@param[out] BaseName The name of the image.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
GetBaseName (
|
||||||
|
IN CHAR16 *FileName,
|
||||||
|
OUT CHAR16 **BaseName
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN StrLen;
|
||||||
|
CHAR16 *StrTail;
|
||||||
|
|
||||||
|
StrLen = StrSize (FileName);
|
||||||
|
|
||||||
|
for (StrTail = FileName + StrLen - 1; StrTail != FileName && *StrTail != L'\\'; StrTail--) {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrTail == FileName) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
*BaseName = StrTail+1;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieve the ImageExecutionTable entries.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
GetImageExecutionInfo (
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_IMAGE_EXECUTION_INFO_TABLE *ExecInfoTablePtr;
|
||||||
|
EFI_IMAGE_EXECUTION_INFO *InfoPtr;
|
||||||
|
CHAR8 *ptr;
|
||||||
|
CHAR16 *ImagePath;
|
||||||
|
CHAR16 *ImageName;
|
||||||
|
UINTN Image;
|
||||||
|
UINTN *NumberOfImages;
|
||||||
|
CHAR16 *ActionType;
|
||||||
|
|
||||||
|
EfiGetSystemConfigurationTable (&gEfiImageSecurityDatabaseGuid, (VOID **)&ExecInfoTablePtr);
|
||||||
|
|
||||||
|
NumberOfImages = &ExecInfoTablePtr->NumberOfImages;
|
||||||
|
|
||||||
|
ptr = (CHAR8 *)ExecInfoTablePtr + 1;
|
||||||
|
|
||||||
|
for (Image = 0; Image < *NumberOfImages; Image++, ptr += InfoPtr->InfoSize) {
|
||||||
|
InfoPtr = (EFI_IMAGE_EXECUTION_INFO *)ptr;
|
||||||
|
ImagePath = (CHAR16 *)(InfoPtr + 1);
|
||||||
|
|
||||||
|
GetBaseName (ImagePath, &ImageName);
|
||||||
|
|
||||||
|
switch (InfoPtr->Action) {
|
||||||
|
case EFI_IMAGE_EXECUTION_AUTHENTICATION:
|
||||||
|
ActionType = L"AUTHENTICATION";
|
||||||
|
break;
|
||||||
|
case EFI_IMAGE_EXECUTION_AUTH_UNTESTED:
|
||||||
|
ActionType = L"AUTH_UNTESTED";
|
||||||
|
break;
|
||||||
|
case EFI_IMAGE_EXECUTION_AUTH_SIG_FAILED:
|
||||||
|
ActionType = L"AUTH_SIG_FAILED";
|
||||||
|
break;
|
||||||
|
case EFI_IMAGE_EXECUTION_AUTH_SIG_PASSED:
|
||||||
|
ActionType = L"AUTH_SIG_PASSED";
|
||||||
|
break;
|
||||||
|
case EFI_IMAGE_EXECUTION_AUTH_SIG_NOT_FOUND:
|
||||||
|
ActionType = L"AUTH_SIG_NOT_FOUND";
|
||||||
|
break;
|
||||||
|
case EFI_IMAGE_EXECUTION_AUTH_SIG_FOUND:
|
||||||
|
ActionType = L"AUTH_SIG_FOUND";
|
||||||
|
break;
|
||||||
|
case EFI_IMAGE_EXECUTION_POLICY_FAILED:
|
||||||
|
ActionType = L"POLICY_FAILED";
|
||||||
|
break;
|
||||||
|
case EFI_IMAGE_EXECUTION_INITIALIZED:
|
||||||
|
ActionType = L"INITIALIZED";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ActionType = L"invalid action";
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = ShellPrintHiiEx (
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMEM_IMG_EXE_ENTRY),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
|
ImageName,
|
||||||
|
ActionType
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Display the ImageExecutionTable entries
|
||||||
|
|
||||||
|
@param[in] Address The pointer to the ImageExecutionTable.
|
||||||
|
**/
|
||||||
|
SHELL_STATUS
|
||||||
|
DisplayImageExecutionEntries (
|
||||||
|
IN UINT64 Address
|
||||||
|
)
|
||||||
|
{
|
||||||
|
SHELL_STATUS ShellStatus;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
ShellStatus = SHELL_SUCCESS;
|
||||||
|
|
||||||
|
if (Address != 0) {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_IMG_EXE_TABLE), gShellDebug1HiiHandle);
|
||||||
|
Status = GetImageExecutionInfo ();
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
ShellStatus = SHELL_ABORTED;
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_ERR_GET_FAIL), gShellDebug1HiiHandle, L"ImageExecutionTable");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_ERR_NOT_FOUND), gShellDebug1HiiHandle, L"ImageExecutionTable");
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ShellStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
||||||
{ L"-mmio", TypeFlag },
|
{ L"-mmio", TypeFlag },
|
||||||
{ L"-verbose", TypeFlag },
|
{ L"-verbose", TypeFlag },
|
||||||
@ -369,6 +501,10 @@ ShellCommandRunDmem (
|
|||||||
if (ShellStatus == SHELL_SUCCESS) {
|
if (ShellStatus == SHELL_SUCCESS) {
|
||||||
ShellStatus = DisplayRtProperties (RtPropertiesTableAddress);
|
ShellStatus = DisplayRtProperties (RtPropertiesTableAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ShellStatus == SHELL_SUCCESS) {
|
||||||
|
ShellStatus = DisplayImageExecutionEntries (ImageExecutionTableAddress);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ShellStatus = DisplayMmioMemory (Address, (UINTN)Size);
|
ShellStatus = DisplayMmioMemory (Address, (UINTN)Size);
|
||||||
|
@ -144,6 +144,9 @@
|
|||||||
" UPDATE_CAPSULE %d\r\n"
|
" UPDATE_CAPSULE %d\r\n"
|
||||||
" QUERY_CAPSULE_CAPABILITIES %d\r\n"
|
" QUERY_CAPSULE_CAPABILITIES %d\r\n"
|
||||||
" QUERY_VARIABLE_INFO %d\r\n"
|
" QUERY_VARIABLE_INFO %d\r\n"
|
||||||
|
#string STR_DMEM_IMG_EXE_TABLE #language en-US "\r\nImage Execution Table\r\n"
|
||||||
|
"----------------------------------------\r\n"
|
||||||
|
#string STR_DMEM_IMG_EXE_ENTRY #language en-US "%20s: %s\r\n"
|
||||||
#string STR_DMEM_ERR_NOT_FOUND #language en-US "\r\n%H%s%N: Table address not found.\r\n"
|
#string STR_DMEM_ERR_NOT_FOUND #language en-US "\r\n%H%s%N: Table address not found.\r\n"
|
||||||
#string STR_DMEM_ERR_GET_FAIL #language en-US "\r\n%H%s%N: Unable to get table information.\r\n"
|
#string STR_DMEM_ERR_GET_FAIL #language en-US "\r\n%H%s%N: Unable to get table information.\r\n"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user