Skip to content

Commit 93c0cf1

Browse files
committed
peview: Enable brepro, Add POGO debug tab
1 parent c933473 commit 93c0cf1

27 files changed

+484
-224
lines changed

tools/peview/attributes.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ INT_PTR CALLBACK PvpPeExtendedAttributesDlgProc(
143143

144144
dialogItem = PvAddPropPageLayoutItem(hwndDlg, hwndDlg, PH_PROP_PAGE_TAB_CONTROL_PARENT, PH_ANCHOR_ALL);
145145
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_LIST), dialogItem, PH_ANCHOR_ALL);
146-
147146
PvDoPropPageLayout(hwndDlg);
148147

149148
propPageContext->LayoutInitialized = TRUE;

tools/peview/cfgprp.c

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ INT_PTR CALLBACK PvpPeCgfDlgProc(
4848
PhSetControlTheme(lvHandle, L"explorer");
4949

5050
PhAddListViewColumn(lvHandle, 0, 0, 0, LVCFMT_LEFT, 40, L"#");
51-
PhAddListViewColumn(lvHandle, 1, 1, 1, LVCFMT_RIGHT, 80, L"VA");
51+
PhAddListViewColumn(lvHandle, 1, 1, 1, LVCFMT_RIGHT, 80, L"RVA");
5252
PhAddListViewColumn(lvHandle, 2, 2, 2, LVCFMT_LEFT, 250, L"Name");
5353
PhAddListViewColumn(lvHandle, 3, 3, 3, LVCFMT_LEFT, 100, L"Flags");
5454
PhSetExtendedListView(lvHandle);
@@ -65,18 +65,17 @@ INT_PTR CALLBACK PvpPeCgfDlgProc(
6565
PPH_STRING symbolName = NULL;
6666
PH_SYMBOL_RESOLVE_LEVEL symbolResolveLevel = PhsrlInvalid;
6767
IMAGE_CFG_ENTRY cfgFunctionEntry = { 0 };
68-
WCHAR number[PH_INT64_STR_LEN_1];
69-
WCHAR pointer[PH_PTR_STR_LEN_1];
68+
WCHAR value[PH_INT64_STR_LEN_1];
7069

7170
// Parse cfg entry : if it fails, just skip it ?
7271
if (!NT_SUCCESS(PhGetMappedImageCfgEntry(&cfgConfig, i, ControlFlowGuardFunction, &cfgFunctionEntry)))
7372
continue;
7473

75-
PhPrintUInt64(number, i + 1);
76-
lvItemIndex = PhAddListViewItem(lvHandle, MAXINT, number, NULL);
74+
PhPrintUInt64(value, i + 1);
75+
lvItemIndex = PhAddListViewItem(lvHandle, MAXINT, value, NULL);
7776

78-
PhPrintPointer(pointer, UlongToPtr(cfgFunctionEntry.Rva));
79-
PhSetListViewSubItem(lvHandle, lvItemIndex, 1, pointer);
77+
PhPrintPointer(value, UlongToPtr(cfgFunctionEntry.Rva));
78+
PhSetListViewSubItem(lvHandle, lvItemIndex, 1, value);
8079

8180
// Resolve name based on public symbols
8281

@@ -182,11 +181,8 @@ INT_PTR CALLBACK PvpPeCgfDlgProc(
182181
{
183182
PPH_LAYOUT_ITEM dialogItem;
184183

185-
dialogItem = PvAddPropPageLayoutItem(hwndDlg, hwndDlg,
186-
PH_PROP_PAGE_TAB_CONTROL_PARENT, PH_ANCHOR_ALL);
187-
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_LIST),
188-
dialogItem, PH_ANCHOR_ALL);
189-
184+
dialogItem = PvAddPropPageLayoutItem(hwndDlg, hwndDlg, PH_PROP_PAGE_TAB_CONTROL_PARENT, PH_ANCHOR_ALL);
185+
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_LIST), dialogItem, PH_ANCHOR_ALL);
190186
PvDoPropPageLayout(hwndDlg);
191187

192188
propPageContext->LayoutInitialized = TRUE;

tools/peview/clrprp.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ PPH_STRING PvpPeClrGetMvid(
162162
break;
163163
}
164164

165-
streamHeader = PTR_ADD_OFFSET(streamHeader, ALIGN_UP(UFIELD_OFFSET(STORAGESTREAM, Name) + strlen(streamHeader->Name) + 1, ULONG));
165+
streamHeader = PTR_ADD_OFFSET(streamHeader, ALIGN_UP(UFIELD_OFFSET(STORAGESTREAM, Name) + strlen(streamHeader->Name) + sizeof(ANSI_NULL), ULONG));
166166
}
167167

168168
return guidMvidString;
@@ -190,7 +190,7 @@ VOID PvpPeClrEnumSections(
190190
streamHeader->Name,
191191
sizeof(streamHeader->Name),
192192
sectionName,
193-
ARRAYSIZE(sectionName),
193+
RTL_NUMBER_OF(sectionName),
194194
NULL
195195
))
196196
{
@@ -374,7 +374,6 @@ INT_PTR CALLBACK PvpPeClrDlgProc(
374374

375375
dialogItem = PvAddPropPageLayoutItem(hwndDlg, hwndDlg, PH_PROP_PAGE_TAB_CONTROL_PARENT, PH_ANCHOR_ALL);
376376
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_LIST), dialogItem, PH_ANCHOR_ALL);
377-
378377
PvDoPropPageLayout(hwndDlg);
379378

380379
propPageContext->LayoutInitialized = TRUE;

tools/peview/debugprp.c

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ INT_PTR CALLBACK PvpPeDebugDlgProc(
104104
PhAddListViewColumn(lvHandle, 2, 2, 2, LVCFMT_LEFT, 100, L"RVA (start)");
105105
PhAddListViewColumn(lvHandle, 3, 3, 3, LVCFMT_LEFT, 100, L"RVA (end)");
106106
PhAddListViewColumn(lvHandle, 4, 4, 4, LVCFMT_LEFT, 100, L"Size");
107+
PhAddListViewColumn(lvHandle, 5, 5, 5, LVCFMT_LEFT, 80, L"Hash");
107108
PhSetExtendedListView(lvHandle);
108109
PhLoadListViewColumnsFromSetting(L"ImageDebugListViewColumns", lvHandle);
109110

@@ -117,22 +118,51 @@ INT_PTR CALLBACK PvpPeDebugDlgProc(
117118

118119
PhPrintUInt32(value, ++count);
119120
lvItemIndex = PhAddListViewItem(lvHandle, MAXINT, value, NULL);
120-
121121
PhSetListViewSubItem(lvHandle, lvItemIndex, 1, PvpGetDebugTypeString(entry.Type));
122-
123122
PhPrintPointer(value, UlongToPtr(entry.AddressOfRawData));
124123
PhSetListViewSubItem(lvHandle, lvItemIndex, 2, value);
125-
126124
PhPrintPointer(value, PTR_ADD_OFFSET(entry.AddressOfRawData, entry.SizeOfData));
127125
PhSetListViewSubItem(lvHandle, lvItemIndex, 3, value);
128-
129126
PhSetListViewSubItem(lvHandle, lvItemIndex, 4, PhaFormatSize(entry.SizeOfData, ULONG_MAX)->Buffer);
127+
128+
if (entry.AddressOfRawData && entry.SizeOfData)
129+
{
130+
__try
131+
{
132+
PVOID imageSectionData;
133+
PH_HASH_CONTEXT hashContext;
134+
PPH_STRING hashString;
135+
UCHAR hash[32];
136+
137+
if (imageSectionData = PhMappedImageRvaToVa(&PvMappedImage, entry.AddressOfRawData, NULL))
138+
{
139+
PhInitializeHash(&hashContext, Md5HashAlgorithm); // PhGetIntegerSetting(L"HashAlgorithm")
140+
PhUpdateHash(&hashContext, imageSectionData, entry.SizeOfData);
141+
142+
if (PhFinalHash(&hashContext, hash, 16, NULL))
143+
{
144+
hashString = PhBufferToHexString(hash, 16);
145+
PhSetListViewSubItem(lvHandle, lvItemIndex, 5, hashString->Buffer);
146+
PhDereferenceObject(hashString);
147+
}
148+
}
149+
}
150+
__except (EXCEPTION_EXECUTE_HANDLER)
151+
{
152+
PPH_STRING message;
153+
154+
//message = PH_AUTO(PhGetNtMessage(GetExceptionCode()));
155+
message = PH_AUTO(PhGetWin32Message(RtlNtStatusToDosError(GetExceptionCode()))); // WIN32_FROM_NTSTATUS
156+
157+
PhSetListViewSubItem(lvHandle, lvItemIndex, 5, PhGetStringOrEmpty(message));
158+
}
159+
}
130160
}
131161

132162
PhFree(debug.DebugEntries);
133163
}
134164

135-
EnableThemeDialogTexture(hwndDlg, ETDT_ENABLETAB);
165+
PhInitializeWindowTheme(hwndDlg, PeEnableThemeSupport);
136166
}
137167
break;
138168
case WM_DESTROY:

tools/peview/exlfdynamic.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,13 @@ VOID PvpProcessElfDynamic(
146146
{
147147
PPH_ELF_IMAGE_DYNAMIC_ENTRY dynamic = dynamics->Items[i];
148148
INT lvItemIndex;
149-
WCHAR number[PH_INT32_STR_LEN_1];
150-
WCHAR pointer[PH_PTR_STR_LEN_1];
149+
WCHAR value[PH_PTR_STR_LEN_1];
151150

152-
PhPrintUInt32(number, ++count);
153-
lvItemIndex = PhAddListViewItem(ListViewHandle, MAXINT, number, NULL);
151+
PhPrintUInt32(value, ++count);
152+
lvItemIndex = PhAddListViewItem(ListViewHandle, MAXINT, value, NULL);
154153

155-
PhPrintPointer(pointer, (PVOID)dynamic->Tag);
156-
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 1, pointer);
154+
PhPrintPointer(value, (PVOID)dynamic->Tag);
155+
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 1, value);
157156
//PhSetListViewSubItem(ListViewHandle, lvItemIndex, 1, PhaFormatString(L"0x%016llx", (PVOID)dynamic->Tag)->Buffer);
158157
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 2, PvpGetDynamicTagName(dynamic->Tag));
159158
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 3, PhGetStringOrEmpty(dynamic->Value));
@@ -194,7 +193,7 @@ INT_PTR CALLBACK PvpExlfDynamicDlgProc(
194193
PvpProcessElfDynamic(lvHandle);
195194
ExtendedListView_SortItems(lvHandle);
196195

197-
EnableThemeDialogTexture(hwndDlg, ETDT_ENABLETAB);
196+
PhInitializeWindowTheme(hwndDlg, PeEnableThemeSupport);
198197
}
199198
break;
200199
case WM_DESTROY:
@@ -210,7 +209,6 @@ INT_PTR CALLBACK PvpExlfDynamicDlgProc(
210209

211210
dialogItem = PvAddPropPageLayoutItem(hwndDlg, hwndDlg, PH_PROP_PAGE_TAB_CONTROL_PARENT, PH_ANCHOR_ALL);
212211
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_LIST), dialogItem, PH_ANCHOR_ALL);
213-
214212
PvDoPropPageLayout(hwndDlg);
215213

216214
propPageContext->LayoutInitialized = TRUE;

tools/peview/exlfexports.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,16 @@ VOID PvpProcessElfExports(
3535
{
3636
PPH_ELF_IMAGE_SYMBOL_ENTRY export = exports->Items[i];
3737
INT lvItemIndex;
38-
WCHAR number[PH_INT32_STR_LEN_1];
39-
WCHAR pointer[PH_PTR_STR_LEN_1];
38+
WCHAR value[PH_PTR_STR_LEN_1];
4039

4140
if (!export->ExportSymbol)
4241
continue;
4342

44-
PhPrintUInt32(number, ++count);
45-
lvItemIndex = PhAddListViewItem(ListViewHandle, MAXINT, number, NULL);
43+
PhPrintUInt32(value, ++count);
44+
lvItemIndex = PhAddListViewItem(ListViewHandle, MAXINT, value, NULL);
4645

47-
PhPrintPointer(pointer, (PVOID)export->Address);
48-
49-
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 1, pointer);
46+
PhPrintPointer(value, (PVOID)export->Address);
47+
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 1, value);
5048
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 2, export->Name);
5149
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 3, PhaFormatSize(export->Size, ULONG_MAX)->Buffer);
5250
PhSetListViewSubItem(ListViewHandle, lvItemIndex, 4, PvpGetSymbolTypeName(export->TypeInfo));
@@ -94,7 +92,7 @@ INT_PTR CALLBACK PvpExlfExportsDlgProc(
9492
PvpProcessElfExports(lvHandle);
9593
ExtendedListView_SortItems(lvHandle);
9694

97-
EnableThemeDialogTexture(hwndDlg, ETDT_ENABLETAB);
95+
PhInitializeWindowTheme(hwndDlg, PeEnableThemeSupport);
9896
}
9997
break;
10098
case WM_DESTROY:

tools/peview/exlfimports.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ INT_PTR CALLBACK PvpExlfImportsDlgProc(
8989
PvpProcessElfImports(lvHandle);
9090
ExtendedListView_SortItems(lvHandle);
9191

92-
EnableThemeDialogTexture(hwndDlg, ETDT_ENABLETAB);
92+
PhInitializeWindowTheme(hwndDlg, PeEnableThemeSupport);
9393
}
9494
break;
9595
case WM_DESTROY:
@@ -105,7 +105,6 @@ INT_PTR CALLBACK PvpExlfImportsDlgProc(
105105

106106
dialogItem = PvAddPropPageLayoutItem(hwndDlg, hwndDlg, PH_PROP_PAGE_TAB_CONTROL_PARENT, PH_ANCHOR_ALL);
107107
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_LIST), dialogItem, PH_ANCHOR_ALL);
108-
109108
PvDoPropPageLayout(hwndDlg);
110109

111110
propPageContext->LayoutInitialized = TRUE;

tools/peview/exlfprp.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ INT_PTR CALLBACK PvpExlfGeneralDlgProc(
463463

464464
PvpLoadWslSections(lvHandle);
465465

466-
EnableThemeDialogTexture(hwndDlg, ETDT_ENABLETAB);
466+
PhInitializeWindowTheme(hwndDlg, PeEnableThemeSupport);
467467
}
468468
break;
469469
case WM_DESTROY:
@@ -482,7 +482,6 @@ INT_PTR CALLBACK PvpExlfGeneralDlgProc(
482482
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_NAME), dialogItem, PH_ANCHOR_LEFT | PH_ANCHOR_TOP | PH_ANCHOR_RIGHT);
483483
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_COMPANYNAME), dialogItem, PH_ANCHOR_LEFT | PH_ANCHOR_TOP | PH_ANCHOR_RIGHT);
484484
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_LIST), dialogItem, PH_ANCHOR_ALL);
485-
486485
PvDoPropPageLayout(hwndDlg);
487486

488487
propPageContext->LayoutInitialized = TRUE;

tools/peview/expprp.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,10 @@ INT_PTR CALLBACK PvpPeExportsDlgProc(
6767
)
6868
{
6969
INT lvItemIndex;
70-
WCHAR number[PH_INT32_STR_LEN_1];
71-
WCHAR pointer[PH_PTR_STR_LEN_1];
70+
WCHAR value[PH_PTR_STR_LEN_1];
7271

73-
PhPrintUInt32(number, i + 1);
74-
lvItemIndex = PhAddListViewItem(lvHandle, MAXINT, number, NULL);
72+
PhPrintUInt32(value, i + 1);
73+
lvItemIndex = PhAddListViewItem(lvHandle, MAXINT, value, NULL);
7574

7675
if (exportFunction.ForwardedName)
7776
{
@@ -92,8 +91,8 @@ INT_PTR CALLBACK PvpPeExportsDlgProc(
9291
}
9392
else
9493
{
95-
PhPrintPointer(pointer, exportFunction.Function);
96-
PhSetListViewSubItem(lvHandle, lvItemIndex, 1, pointer);
94+
PhPrintPointer(value, exportFunction.Function);
95+
PhSetListViewSubItem(lvHandle, lvItemIndex, 1, value);
9796
}
9897

9998
if (exportEntry.Name)
@@ -163,13 +162,13 @@ INT_PTR CALLBACK PvpPeExportsDlgProc(
163162
}
164163
}
165164

166-
PhPrintUInt32(number, exportEntry.Ordinal);
167-
PhSetListViewSubItem(lvHandle, lvItemIndex, 3, number);
165+
PhPrintUInt32(value, exportEntry.Ordinal);
166+
PhSetListViewSubItem(lvHandle, lvItemIndex, 3, value);
168167

169168
if (exportEntry.Name) // Note: The 'Hint' is only valid for named exports. (dmex)
170169
{
171-
PhPrintUInt32(number, exportEntry.Hint);
172-
PhSetListViewSubItem(lvHandle, lvItemIndex, 4, number);
170+
PhPrintUInt32(value, exportEntry.Hint);
171+
PhSetListViewSubItem(lvHandle, lvItemIndex, 4, value);
173172
}
174173
}
175174
}
@@ -193,7 +192,6 @@ INT_PTR CALLBACK PvpPeExportsDlgProc(
193192

194193
dialogItem = PvAddPropPageLayoutItem(hwndDlg, hwndDlg, PH_PROP_PAGE_TAB_CONTROL_PARENT, PH_ANCHOR_ALL);
195194
PvAddPropPageLayoutItem(hwndDlg, GetDlgItem(hwndDlg, IDC_LIST), dialogItem, PH_ANCHOR_ALL);
196-
197195
PvDoPropPageLayout(hwndDlg);
198196

199197
propPageContext->LayoutInitialized = TRUE;

tools/peview/impprp.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ PPH_STRING PvpQueryModuleOrdinalName(
5353
{
5454
exportName = PhZeroExtendToUtf16(exportEntry.Name);
5555

56-
if (exportName->Buffer[0] == '?')
56+
if (exportName->Buffer[0] == L'?')
5757
{
5858
PPH_STRING undecoratedName;
5959

@@ -69,7 +69,7 @@ PPH_STRING PvpQueryModuleOrdinalName(
6969

7070
forwardName = PhZeroExtendToUtf16(exportFunction.ForwardedName);
7171

72-
if (forwardName->Buffer[0] == '?')
72+
if (forwardName->Buffer[0] == L'?')
7373
{
7474
PPH_STRING undecoratedName;
7575

@@ -265,7 +265,7 @@ VOID PvpProcessImports(
265265

266266
importName = PhZeroExtendToUtf16(importEntry.Name);
267267

268-
if (importName->Buffer[0] == '?')
268+
if (importName->Buffer[0] == L'?')
269269
{
270270
PPH_STRING undecoratedName;
271271

tools/peview/include/peview.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,13 @@ INT_PTR CALLBACK PvpPeEhContDlgProc(
481481
_In_ LPARAM lParam
482482
);
483483

484+
INT_PTR CALLBACK PvpPeDebugPogoDlgProc(
485+
_In_ HWND hwndDlg,
486+
_In_ UINT uMsg,
487+
_In_ WPARAM wParam,
488+
_In_ LPARAM lParam
489+
);
490+
484491
// ELF
485492

486493
PWSTR PvpGetSymbolTypeName(

0 commit comments

Comments
 (0)