Skip to content

Commit b1f3d3e

Browse files
committed
peview: Add symbol for entrypoint
1 parent 189e1d3 commit b1f3d3e

File tree

1 file changed

+54
-5
lines changed

1 file changed

+54
-5
lines changed

tools/peview/peprp.c

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,21 +1121,70 @@ VOID PvpSetPeImageEntropy(
11211121
PhQueueItemWorkQueue(PhGetGlobalWorkQueue(), PvpEntropyImageThreadStart, WindowHandle);
11221122
}
11231123

1124-
VOID PvpSetPeImageEntryPoint(
1125-
_In_ HWND ListViewHandle
1124+
static NTSTATUS PvpEntryPointImageThreadStart(
1125+
_In_ PVOID Parameter
11261126
)
11271127
{
11281128
ULONG addressOfEntryPoint;
11291129
PPH_STRING string;
1130+
PPH_STRING symbol;
1131+
PPH_STRING symbolName = NULL;
1132+
PH_SYMBOL_RESOLVE_LEVEL symbolResolveLevel = PhsrlInvalid;
11301133

11311134
if (PvMappedImage.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
11321135
addressOfEntryPoint = PvMappedImage.NtHeaders32->OptionalHeader.AddressOfEntryPoint;
11331136
else
11341137
addressOfEntryPoint = PvMappedImage.NtHeaders->OptionalHeader.AddressOfEntryPoint;
11351138

1136-
string = PhFormatString(L"0x%I32x", addressOfEntryPoint);
1137-
PhSetListViewSubItem(ListViewHandle, PVP_IMAGE_GENERAL_INDEX_ENTRYPOINT, 1, string->Buffer);
1138-
PhDereferenceObject(string);
1139+
if (PvMappedImage.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
1140+
{
1141+
symbol = PhGetSymbolFromAddress(
1142+
PvSymbolProvider,
1143+
(ULONG64)PTR_ADD_OFFSET(PvMappedImage.NtHeaders32->OptionalHeader.ImageBase, addressOfEntryPoint),
1144+
&symbolResolveLevel,
1145+
NULL,
1146+
&symbolName,
1147+
NULL
1148+
);
1149+
}
1150+
else
1151+
{
1152+
symbol = PhGetSymbolFromAddress(
1153+
PvSymbolProvider,
1154+
(ULONG64)PTR_ADD_OFFSET(PvMappedImage.NtHeaders->OptionalHeader.ImageBase, addressOfEntryPoint),
1155+
&symbolResolveLevel,
1156+
NULL,
1157+
&symbolName,
1158+
NULL
1159+
);
1160+
}
1161+
1162+
if (symbolName && symbolResolveLevel == PhsrlFunction || symbolResolveLevel == PhsrlModule || symbolResolveLevel == PhsrlAddress)
1163+
{
1164+
string = PhFormatString(L"0x%I32x (%s)", addressOfEntryPoint, PhGetStringOrEmpty(symbolName));
1165+
PhSetListViewSubItem(Parameter, PVP_IMAGE_GENERAL_INDEX_ENTRYPOINT, 1, string->Buffer);
1166+
PhDereferenceObject(string);
1167+
}
1168+
else
1169+
{
1170+
string = PhFormatString(L"0x%I32x", addressOfEntryPoint);
1171+
PhSetListViewSubItem(Parameter, PVP_IMAGE_GENERAL_INDEX_ENTRYPOINT, 1, string->Buffer);
1172+
PhDereferenceObject(string);
1173+
}
1174+
1175+
if (symbolName)
1176+
PhDereferenceObject(symbolName);
1177+
PhDereferenceObject(symbol);
1178+
return STATUS_SUCCESS;
1179+
}
1180+
1181+
VOID PvpSetPeImageEntryPoint(
1182+
_In_ HWND ListViewHandle
1183+
)
1184+
{
1185+
PhSetListViewSubItem(ListViewHandle, PVP_IMAGE_GENERAL_INDEX_ENTRYPOINT, 1, L"Resolving...");
1186+
1187+
PhQueueItemWorkQueue(PhGetGlobalWorkQueue(), PvpEntryPointImageThreadStart, ListViewHandle);
11391188
}
11401189

11411190
VOID PvpSetPeImageCheckSum(

0 commit comments

Comments
 (0)