@@ -63,48 +63,54 @@ PPH_STRING PvpQueryModuleOrdinalName(
63
63
}
64
64
else
65
65
{
66
- if (exportFunction .Function )
66
+ if (exportFunction .ForwardedName )
67
67
{
68
- PPH_STRING symbolName ;
68
+ PPH_STRING forwardName ;
69
69
70
- // Try find the export name using symbols.
71
- if (PvMappedImage .Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC )
70
+ forwardName = PhZeroExtendToUtf16 (exportFunction .ForwardedName );
71
+
72
+ if (forwardName -> Buffer [0 ] == '?' )
72
73
{
73
- symbolName = PhGetSymbolFromAddress (
74
- PvSymbolProvider ,
75
- (ULONG64 )PTR_ADD_OFFSET (PvMappedImage .NtHeaders32 -> OptionalHeader .ImageBase , exportFunction .Function ),
76
- NULL ,
77
- NULL ,
78
- NULL ,
79
- NULL
80
- );
74
+ PPH_STRING undecoratedName ;
75
+
76
+ if (undecoratedName = PhUndecorateSymbolName (PvSymbolProvider , forwardName -> Buffer ))
77
+ PhMoveReference (& forwardName , undecoratedName );
81
78
}
82
- else
79
+
80
+ PhMoveReference (& exportName , PhFormatString (L"%s (Forwarded)" , forwardName -> Buffer ));
81
+ PhDereferenceObject (forwardName );
82
+ }
83
+ else if (exportFunction .Function )
84
+ {
85
+ PPH_STRING exportSymbol = NULL ;
86
+ PPH_STRING exportSymbolName = NULL ;
87
+
88
+ if (PhLoadModuleSymbolProvider (
89
+ PvSymbolProvider ,
90
+ FileName -> Buffer ,
91
+ (ULONG64 )mappedImage .ViewBase ,
92
+ (ULONG )mappedImage .Size
93
+ ))
83
94
{
84
- symbolName = PhGetSymbolFromAddress (
95
+ // Try find the export name using symbols.
96
+ exportSymbol = PhGetSymbolFromAddress (
85
97
PvSymbolProvider ,
86
- (ULONG64 )PTR_ADD_OFFSET (PvMappedImage .NtHeaders -> OptionalHeader .ImageBase , exportFunction .Function ),
87
- NULL ,
98
+ (ULONG64 )PTR_ADD_OFFSET (mappedImage .ViewBase , exportFunction .Function ),
88
99
NULL ,
89
100
NULL ,
101
+ & exportSymbolName ,
90
102
NULL
91
103
);
92
104
}
93
105
94
- if (symbolName )
106
+ if (exportSymbolName )
95
107
{
96
- static PH_STRINGREF unnamedText = PH_STRINGREF_INIT (L" (unnamed)" );
97
- PH_STRINGREF exportNameText ;
98
- PH_STRINGREF firstPart ;
99
- PH_STRINGREF secondPart ;
100
-
101
- if (PhSplitStringRefAtLastChar (& symbolName -> sr , L'!' , & firstPart , & secondPart ))
102
- exportNameText = secondPart ;
103
- else
104
- exportNameText = symbolName -> sr ;
105
-
106
- exportName = PhCreateString2 (& exportNameText );
108
+ PhSetReference (& exportName , exportSymbolName );
109
+ PhDereferenceObject (exportSymbolName );
107
110
}
111
+
112
+ if (exportSymbol )
113
+ PhDereferenceObject (exportSymbol );
108
114
}
109
115
}
110
116
@@ -149,7 +155,7 @@ VOID PvpProcessImports(
149
155
else
150
156
name = PhZeroExtendToUtf16 (importDll .Name );
151
157
152
- PhPrintUInt64 (number , ++ (* Count )); // HACK
158
+ PhPrintUInt32 (number , ++ (* Count )); // HACK
153
159
lvItemIndex = PhAddListViewItem (ListViewHandle , MAXINT , number , NULL );
154
160
155
161
PhSetListViewSubItem (ListViewHandle , lvItemIndex , 1 , name -> Buffer );
@@ -177,95 +183,36 @@ VOID PvpProcessImports(
177
183
}
178
184
else
179
185
{
180
- PLDR_DATA_TABLE_ENTRY moduleLdrEntry = NULL ;
181
- PVOID moduleExportAddress = NULL ;
182
- PVOID importModuleDllBase = NULL ;
183
- PPH_STRING exportDllName = NULL ;
186
+ PPH_STRING exportDllName ;
184
187
PPH_STRING exportOrdinalName = NULL ;
185
- PPH_STRING exportSymbolName = NULL ;
186
-
187
- //PPH_STRING baseDirectory;
188
- //
189
- //if (baseDirectory = PhGetBaseDirectory(PvFileName))
190
- //{
191
- // static DLL_DIRECTORY_COOKIE (WINAPI *AddDllDirectory_I)(
192
- // _In_ PCWSTR NewDirectory
193
- // );
194
- //
195
- // if (AddDllDirectory_I = PhGetDllProcedureAddress(L"kernel32.dll", "AddDllDirectory", 0))
196
- // {
197
- // AddDllDirectory_I(baseDirectory->Buffer);
198
- // }
199
- //}
200
- //
201
- //if (importModuleDllBase = LoadLibraryA(importDll.Name))
202
- //{
203
- // moduleLdrEntry = PhFindLoaderEntry(importModuleDllBase, NULL, NULL);
204
- // moduleExportAddress = PhGetDllBaseProcedureAddress(importModuleDllBase, NULL, importEntry.Ordinal);
205
- // exportOrdinalName = PhGetExportNameFromOrdinal(importModuleDllBase, importEntry.Ordinal);
206
- //}
207
188
208
189
if (exportDllName = PhConvertUtf8ToUtf16 (importDll .Name ))
209
190
{
210
191
PPH_STRING filePath ;
211
192
193
+ // TODO: Implement ApiSet mappings for exportDllName. (dmex)
194
+ // TODO: Add DLL directory to PhSearchFilePath for locating non-system images. (dmex)
195
+
212
196
if (filePath = PhSearchFilePath (exportDllName -> Buffer , L".dll" ))
213
197
{
214
198
PhMoveReference (& exportDllName , filePath );
215
199
}
216
200
217
201
exportOrdinalName = PvpQueryModuleOrdinalName (exportDllName , importEntry .Ordinal );
202
+ PhDereferenceObject (exportDllName );
218
203
}
219
204
220
205
if (exportOrdinalName )
221
206
{
222
207
name = PhaFormatString (L"%s (Ordinal %u)" , PhGetStringOrEmpty (exportOrdinalName ), importEntry .Ordinal );
223
208
PhSetListViewSubItem (ListViewHandle , lvItemIndex , 2 , PhGetString (name ));
209
+ PhDereferenceObject (exportOrdinalName );
224
210
}
225
211
else
226
212
{
227
- if (moduleLdrEntry && moduleExportAddress )
228
- {
229
- if (PhLoadModuleSymbolProvider (
230
- PvSymbolProvider ,
231
- moduleLdrEntry -> FullDllName .Buffer ,
232
- (ULONG64 )importModuleDllBase ,
233
- moduleLdrEntry -> SizeOfImage
234
- ))
235
- {
236
- exportSymbolName = PhGetSymbolFromAddress (
237
- PvSymbolProvider ,
238
- (ULONG64 )moduleExportAddress ,
239
- NULL ,
240
- NULL ,
241
- NULL ,
242
- NULL
243
- );
244
- }
245
- }
246
-
247
- if (exportSymbolName )
248
- {
249
- PH_STRINGREF firstPart ;
250
- PH_STRINGREF secondPart ;
251
-
252
- if (PhSplitStringRefAtLastChar (& exportSymbolName -> sr , L'!' , & firstPart , & secondPart ))
253
- name = PhaFormatString (L"%s (Ordinal %u)" , secondPart .Buffer , importEntry .Ordinal );
254
- else
255
- name = PhaFormatString (L"%s (Ordinal %u)" , exportSymbolName -> Buffer , importEntry .Ordinal );
256
-
257
- PhSetListViewSubItem (ListViewHandle , lvItemIndex , 2 , name -> Buffer );
258
- }
259
- else
260
- {
261
- name = PhaFormatString (L"(Ordinal %u)" , importEntry .Ordinal );
262
- PhSetListViewSubItem (ListViewHandle , lvItemIndex , 2 , name -> Buffer );
263
- }
213
+ name = PhaFormatString (L"(Ordinal %u)" , importEntry .Ordinal );
214
+ PhSetListViewSubItem (ListViewHandle , lvItemIndex , 2 , name -> Buffer );
264
215
}
265
-
266
- if (exportSymbolName ) PhDereferenceObject (exportSymbolName );
267
- if (exportOrdinalName ) PhDereferenceObject (exportOrdinalName );
268
- if (exportDllName ) PhDereferenceObject (exportDllName );
269
216
}
270
217
}
271
218
}
0 commit comments