OverflowError: in method 'SBProcess_ReadPointerFromMemory', argument 2 of type 'lldb::addr_t'

I ran into the error in the subject when running a python script with “script myfile.myscript()”.

The value addr_t parameter used is 0x0000000001223f68, the following works fine:

(lldb) scr
Python Interactive Interpreter. To exit, type ‘quit()’, ‘exit()’ or Ctrl-D.

e = lldb.SBError()
ptr = lldb.process.ReadPointerFromMemory(0x0000000001223f68, e)
print ptr
0

Any suggestion how to further investigate? Thanks.

myfile.myscript() calls the following function in a loop (iterate through all vtable symbols), which contains the call ReadPointerFromMemory.

def dump_vtbl(vtableAddr) :
error = lldb.SBError()
vtableEndAddr = lldb.process.ReadPointerFromMemory(vtableAddr+8, error)
if not error.success :
return False
print “vtable: [%0.16x, %0.16x)” % (vtableAddr, vtableEndAddr)
for addr in range(vtableAddr, vtableEndAddr, 8) :
print “read from address %.016x” % addr
try:
funcAddr = lldb.process.ReadPointerFromMemory(addr, error)
except:
sys.exc_clear()
continue
if not error.success :
continue

You passed an error into ReadPointerFromMemory. In the cases where you aren't getting what you expect, what does that error say?

Jim

I tried printing error.descryption, but it didn’t work, because when the error happens, it seems ReadPointerFromMemory never returned to my code.

read from address 0000000001223f68
Traceback (most recent call last):
File “”, line 1, in
File “/home/leikong/repo/WindowsFabric/build.prod/test/fabdbg.py”, line 289, in findall
findtypes(pattern,ignorePureVirtualType)
File “/home/leikong/repo/WindowsFabric/build.prod/test/fabdbg.py”, line 246, in findtypes
if ignorePureVirtualType and has_pure_virtual(vtableAddr, pureVirtualFuncs) :
File “/home/leikong/repo/WindowsFabric/build.prod/test/fabdbg.py”, line 190, in has_pure_virtual
vtableEndAddr = lldb.process.ReadPointerFromMemory(vtableAddr-8, error)
File “/home/leikong/bin/lldb/lib/python2.7/site-packages/lldb/init.py”, line 9418, in ReadPointerFromMemory
return _lldb.SBProcess_ReadPointerFromMemory(self, addr, error)
OverflowError: in method ‘SBProcess_ReadPointerFromMemory’, argument 2 of type ‘lldb::addr_t’

Try printing the type of the value you are passing in the line:

    vtableEndAddr = lldb.process.ReadPointerFromMemory(vtableAddr-8, error)

print type(vtableAddr)
print type(vtableAddr-8)

It seems like it thinks vtableAddr doesn't fit into a lldb::addr_t which is a uint64_t

If you want to send your fabdbg.py we can try it out and see if we see anything wrong.