Skip to content

Commit ed6efb9

Browse files
committed
Work a bit on __main__.py
1 parent b9416f1 commit ed6efb9

2 files changed

Lines changed: 38 additions & 76 deletions

File tree

pydia2/__init__.py

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -55,51 +55,3 @@ def CreateObject(progid, interface=None):
5555
iid = interface._iid_
5656
_NoRegCoCreate(str(_DIA_DLL), ctypes.byref(clsid), ctypes.byref(iid), ctypes.byref(p))
5757
return client.GetBestInterface(p)
58-
59-
60-
class SymTag(enum.IntEnum):
61-
Null = dia.SymTagNull
62-
Exe = dia.SymTagExe
63-
Compiland = dia.SymTagCompiland
64-
CompilandDetails = dia.SymTagCompilandDetails
65-
CompilandEnv = dia.SymTagCompilandEnv
66-
Function = dia.SymTagFunction
67-
Block = dia.SymTagBlock
68-
Data = dia.SymTagData
69-
Annotation = dia.SymTagAnnotation
70-
Label = dia.SymTagLabel
71-
PublicSymbol = dia.SymTagPublicSymbol
72-
UDT = dia.SymTagUDT
73-
# Enum = dia.SymTagEnum
74-
Enum = 12
75-
FunctionType = dia.SymTagFunctionType
76-
PointerType = dia.SymTagPointerType
77-
ArrayType = dia.SymTagArrayType
78-
BaseType = dia.SymTagBaseType
79-
Typedef = dia.SymTagTypedef
80-
BaseClass = dia.SymTagBaseClass
81-
Friend = dia.SymTagFriend
82-
FunctionArgType = dia.SymTagFunctionArgType
83-
FuncDebugStart = dia.SymTagFuncDebugStart
84-
FuncDebugEnd = dia.SymTagFuncDebugEnd
85-
UsingNamespace = dia.SymTagUsingNamespace
86-
VTableShape = dia.SymTagVTableShape
87-
VTable = dia.SymTagVTable
88-
Custom = dia.SymTagCustom
89-
Thunk = dia.SymTagThunk
90-
CustomType = dia.SymTagCustomType
91-
ManagedType = dia.SymTagManagedType
92-
Dimension = dia.SymTagDimension
93-
CallSite = dia.SymTagCallSite
94-
InlineSite = dia.SymTagInlineSite
95-
BaseInterface = dia.SymTagBaseInterface
96-
VectorType = dia.SymTagVectorType
97-
MatrixType = dia.SymTagMatrixType
98-
HLSLType = dia.SymTagHLSLType
99-
Caller = dia.SymTagCaller
100-
Callee = dia.SymTagCallee
101-
Export = dia.SymTagExport
102-
HeapAllocationSite = dia.SymTagHeapAllocationSite
103-
CoffGroup = dia.SymTagCoffGroup
104-
Inlinee = dia.SymTagInlinee
105-
Max = dia.SymTagMax

pydia2/__main__.py

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def dump_all_pdb_info(session):
4747
def dump_all_mods(session):
4848
print("\n\n*** MODULES\n")
4949

50-
enum_symbols = session.globalScope.findChildren(pydia2.dia.SymTagCompiland, None, 0)
50+
enum_symbols = session.globalScope.findChildren(pydia2.cvconst.SymTag.Compiland, None, 0)
5151
for i, symbol in enumerate(enum_symbols, 1):
5252
symbol = symbol.QueryInterface(pydia2.dia.IDiaSymbol)
5353
print(f"{i:04X} {symbol.name}")
@@ -58,7 +58,7 @@ def dump_all_mods(session):
5858
def dump_all_publics(session):
5959
print("\n\n*** PUBLICS\n")
6060

61-
enum_symbols = session.globalScope.findChildren(pydia2.dia.SymTagPublicSymbol, None, 0)
61+
enum_symbols = session.globalScope.findChildren(pydia2.cvconst.SymTag.PublicSymbol, None, 0)
6262
for symbol in enum_symbols:
6363
symbol = symbol.QueryInterface(pydia2.dia.IDiaSymbol)
6464
print_public_symbol(symbol)
@@ -69,7 +69,7 @@ def dump_all_publics(session):
6969
def dump_all_symbols(session):
7070
print("\n\n*** SYMBOLS\n")
7171

72-
enum_symbols = session.globalScope.findChildren(pydia2.dia.SymTagCompiland, None, 0)
72+
enum_symbols = session.globalScope.findChildren(pydia2.cvconst.SymTag.Compiland, None, 0)
7373
for compiland in enum_symbols:
7474
compiland = compiland.QueryInterface(pydia2.dia.IDiaSymbol)
7575
print("\n** Module: ", end='')
@@ -79,7 +79,7 @@ def dump_all_symbols(session):
7979
except comtypes.COMError:
8080
print("(???)\n")
8181

82-
enum_children = compiland.findChildren(pydia2.dia.SymTagNull, None, 0)
82+
enum_children = compiland.findChildren(pydia2.cvconst.SymTag.Null, None, 0)
8383
for symbol in enum_children:
8484
symbol = symbol.QueryInterface(pydia2.dia.IDiaSymbol)
8585
print_symbol(symbol, 0)
@@ -153,9 +153,9 @@ def print_public_symbol(symbol):
153153
except comtypes.COMError:
154154
rva = 0xFFFFFFFF
155155

156-
print(f"{pydia2.SymTag(symbol.symTag).name}: [{rva:08X}][{symbol.addressSection:04X}:{symbol.addressOffset:08X}] ", end='')
156+
print(f"{pydia2.cvconst.SymTag(symbol.symTag).name}: [{rva:08X}][{symbol.addressSection:04X}:{symbol.addressOffset:08X}] ", end='')
157157

158-
if symbol.symTag == pydia2.dia.SymTagThunk:
158+
if symbol.symTag == pydia2.cvconst.SymTag.Thunk:
159159
try:
160160
print("f{symbol.name}")
161161
except comtypes.COMError:
@@ -194,31 +194,31 @@ def print_symbol(symbol, indent):
194194
except comtypes.COMError:
195195
print("ERROR - PrintSymbol get_symTag() failed")
196196

197-
if sym_tag == pydia2.dia.SymTagFunction:
197+
if sym_tag == pydia2.cvconst.SymTag.Function:
198198
print()
199199

200200
print_sym_tag(sym_tag)
201201

202202
print(' ' * indent, end='')
203203

204-
if sym_tag == pydia2.dia.SymTagCompilandDetails:
204+
if sym_tag == pydia2.cvconst.SymTag.CompilandDetails:
205205
print_compiland_details(symbol)
206206

207-
elif sym_tag == pydia2.dia.SymTagCompilandEnv:
207+
elif sym_tag == pydia2.cvconst.SymTag.CompilandEnv:
208208
print_compiland_env(symbol)
209209

210-
elif sym_tag == pydia2.dia.SymTagData:
210+
elif sym_tag == pydia2.cvconst.SymTag.Data:
211211
print_data(symbol)
212212

213-
elif sym_tag in (pydia2.dia.SymTagFunction, pydia2.dia.SymTagBlock):
213+
elif sym_tag in (pydia2.cvconst.SymTag.Function, pydia2.cvconst.SymTag.Block):
214214
print_location(symbol)
215215

216216
try:
217217
print(f", len = {symbol.length:08X}", end='')
218218
except comtypes.COMError:
219219
pass
220220

221-
if sym_tag == pydia2.dia.SymTagFunction:
221+
if sym_tag == pydia2.cvconst.SymTag.Function:
222222
try:
223223
# TODO enum
224224
print(f", {symbol.callingConvention}", end='')
@@ -228,7 +228,7 @@ def print_symbol(symbol, indent):
228228
print_und_name(symbol)
229229
print()
230230

231-
if sym_tag == pydia2.dia.SymTagFunction:
231+
if sym_tag == pydia2.cvconst.SymTag.Function:
232232
print(' ' * indent, end='')
233233
print(" Function attribute:", end='')
234234

@@ -341,44 +341,44 @@ def print_symbol(symbol, indent):
341341

342342
print()
343343

344-
enum_children = symbol.findChildren(pydia2.dia.SymTagNull, None, 0)
344+
enum_children = symbol.findChildren(pydia2.cvconst.SymTag.Null, None, 0)
345345
for child in enum_children:
346346
child = child.QueryInterface(pydia2.dia.IDiaSymbol)
347347
print_symbol(child, indent + 2)
348348

349-
elif sym_tag == pydia2.dia.SymTagAnnotation:
349+
elif sym_tag == pydia2.cvconst.SymTag.Annotation:
350350
print_location(symbol)
351351
print()
352352

353-
elif sym_tag == pydia2.dia.SymTagLabel:
353+
elif sym_tag == pydia2.cvconst.SymTag.Label:
354354
print_location(symbol)
355355
print(", ", end='')
356356
print_name(symbol)
357357

358-
elif sym_tag in (pydia2.dia.SymTagEnum, pydia2.dia.SymTagTypedef, pydia2.dia.SymTagUDT, pydia2.dia.SymTagBaseClass):
358+
elif sym_tag in (pydia2.cvconst.SymTag.Enum, pydia2.cvconst.SymTag.Typedef, pydia2.cvconst.SymTag.UDT, pydia2.cvconst.SymTag.BaseClass):
359359
print_udt(symbol)
360360

361-
elif sym_tag in (pydia2.dia.SymTagFuncDebugStart, pydia2.dia.SymTagFuncDebugEnd):
361+
elif sym_tag in (pydia2.cvconst.SymTag.FuncDebugStart, pydia2.cvconst.SymTag.FuncDebugEnd):
362362
print_location(symbol)
363363

364-
elif sym_tag in (pydia2.dia.SymTagFunctionArgType, pydia2.dia.SymTagFunctionType, pydia2.dia.SymTagPointerType, pydia2.dia.SymTagArrayType, pydia2.dia.SymTagBaseType):
364+
elif sym_tag in (pydia2.cvconst.SymTag.FunctionArgType, pydia2.cvconst.SymTag.FunctionType, pydia2.cvconst.SymTag.PointerType, pydia2.cvconst.SymTag.ArrayType, pydia2.cvconst.SymTag.BaseType):
365365
try:
366366
print_type(symbol.type)
367367
except comtypes.COMError:
368368
pass
369369

370370
print()
371371

372-
elif sym_tag == pydia2.dia.SymTagThunk:
372+
elif sym_tag == pydia2.cvconst.SymTag.Thunk:
373373
print_thunk(symbol)
374374

375-
elif sym_tag == pydia2.dia.SymTagCallSite:
375+
elif sym_tag == pydia2.cvconst.SymTag.CallSite:
376376
print_call_site_info(symbol)
377377

378-
elif sym_tag == pydia2.dia.SymTagHeapAllocationSite:
378+
elif sym_tag == pydia2.cvconst.SymTag.HeapAllocationSite:
379379
print_heap_alloc_site(symbol)
380380

381-
elif sym_tag == pydia2.dia.SymTagCoffGroup:
381+
elif sym_tag == pydia2.cvconst.SymTag.CoffGroup:
382382
print_coff_group(symbol)
383383

384384
else:
@@ -391,10 +391,10 @@ def print_symbol(symbol, indent):
391391
except comtypes.COMError:
392392
pass
393393

394-
if sym_tag in (pydia2.dia.SymTagUDT, pydia2.dia.SymTagAnnotation):
394+
if sym_tag in (pydia2.cvconst.SymTag.UDT, pydia2.cvconst.SymTag.Annotation):
395395
print()
396396

397-
enum_children = symbol.findChildren(pydia2.dia.SymTagNull, None, 0)
397+
enum_children = symbol.findChildren(pydia2.cvconst.SymTag.Null, None, 0)
398398
for child in enum_children:
399399
child = child.QueryInterface(pydia2.dia.IDiaSymbol)
400400
print_symbol(child, indent + 2)
@@ -403,7 +403,7 @@ def print_symbol(symbol, indent):
403403

404404

405405
def print_sym_tag(sym_tag):
406-
print(f"{pydia2.SymTag(sym_tag).name:15s}: ", end='')
406+
print(f"{pydia2.cvconst.SymTag(sym_tag).name:15s}: ", end='')
407407

408408

409409
def print_name(symbol):
@@ -427,7 +427,18 @@ def print_compiland_env(symbol):
427427

428428

429429
def print_location(symbol):
430-
pass # TODO
430+
try:
431+
location_type = symbol.locationType
432+
except comtypes.COMError:
433+
print("symbol in optimized code", end='')
434+
return
435+
436+
if location_type == pydia2.cvconst.LocationType.Static:
437+
try:
438+
print(f"{pydia2.cvconst.LocationType(location_type).name}, [{symbol.relativeVirtualAddress:08X}][{symbol.addressSection:04X}:{symbol.addressOffset:08X}]", end='')
439+
except comtypes.COMError:
440+
pass
441+
# TODO
431442

432443

433444
def print_const(symbol):
@@ -529,7 +540,6 @@ def main():
529540
parser.add_argument("--mapfromsrc", metavar="RVA", help="dump image RVA for src RVA")
530541

531542
args = parser.parse_args()
532-
print(args)
533543

534544
source, session = load_data_from_pdb(args.file)
535545

0 commit comments

Comments
 (0)