@@ -1121,21 +1121,70 @@ VOID PvpSetPeImageEntropy(
1121
1121
PhQueueItemWorkQueue (PhGetGlobalWorkQueue (), PvpEntropyImageThreadStart , WindowHandle );
1122
1122
}
1123
1123
1124
- VOID PvpSetPeImageEntryPoint (
1125
- _In_ HWND ListViewHandle
1124
+ static NTSTATUS PvpEntryPointImageThreadStart (
1125
+ _In_ PVOID Parameter
1126
1126
)
1127
1127
{
1128
1128
ULONG addressOfEntryPoint ;
1129
1129
PPH_STRING string ;
1130
+ PPH_STRING symbol ;
1131
+ PPH_STRING symbolName = NULL ;
1132
+ PH_SYMBOL_RESOLVE_LEVEL symbolResolveLevel = PhsrlInvalid ;
1130
1133
1131
1134
if (PvMappedImage .Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC )
1132
1135
addressOfEntryPoint = PvMappedImage .NtHeaders32 -> OptionalHeader .AddressOfEntryPoint ;
1133
1136
else
1134
1137
addressOfEntryPoint = PvMappedImage .NtHeaders -> OptionalHeader .AddressOfEntryPoint ;
1135
1138
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 );
1139
1188
}
1140
1189
1141
1190
VOID PvpSetPeImageCheckSum (
0 commit comments