> On Sep 19, 2016, at 10:33 AM, Lei Kong <leik...@msn.com> wrote: > > You are right, it seems the argument is out of range, both vtableAddr and > vtableAddr-8 are “8.5” byte long. Maybe there is something wrong with the way > I get vtableAddress? I will clean up my full script and send it to you if the > following does not provide enough information, thanks much. > > def vtable_addr (vtableSymbol): > return vtableSymbol.addr.section.file_addr + vtableSymbol.addr.offset + > 0x10
You actually want to get the load address when reading from memory. This should be: def vtable_addr (vtableSymbol, target): return vtableSymbol.addr.GetLoadAddress(target) + 0x10 > > > vtableAddr, type=<type 'long'>, value=0x1000000000000000f > vtableAddr-8, type=<type 'long'>, value=0x10000000000000007 > Traceback (most recent call last): > File "<input>", line 1, in <module> > File "/home/leikong/repo/WindowsFabric/build.prod/test/fabdbg.py", line > 199, in findall > findtypes(pattern,ignorePureVirtualType) > File "/home/leikong/repo/WindowsFabric/build.prod/test/fabdbg.py", line > 156, in findtypes > if ignorePureVirtualType and has_pure_virtual(vtableAddr, > pureVirtualFuncs) : > File "/home/leikong/repo/WindowsFabric/build.prod/test/fabdbg.py", line > 100, 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' > > From: Greg Clayton > Sent: Monday, September 19, 2016 09:12 AM > To: Lei Kong > Cc: Jim Ingham; lldb-dev@lists.llvm.org > Subject: Re: [lldb-dev] 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 > > > > > On Sep 16, 2016, at 7:39 PM, Lei Kong via lldb-dev > > <lldb-dev@lists.llvm.org> wrote: > > > > 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 "<input>", line 1, in <module> > > 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' > > > > > > > Subject: Re: [lldb-dev] OverflowError: in method > > > 'SBProcess_ReadPointerFromMemory', argument 2 of type 'lldb::addr_t' > > > From: jing...@apple.com > > > Date: Fri, 16 Sep 2016 17:12:24 -0700 > > > CC: lldb-dev@lists.llvm.org > > > To: leik...@msn.com > > > > > > You passed an error into ReadPointerFromMemory. In the cases where you > > > aren't getting what you expect, what does that error say? > > > > > > Jim > > > > > > > On Sep 16, 2016, at 5:06 PM, Lei Kong via lldb-dev > > > > <lldb-dev@lists.llvm.org> wrote: > > > > > > > > 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 > > > > > > > > _______________________________________________ > > > > lldb-dev mailing list > > > > lldb-dev@lists.llvm.org > > > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev > > > > > _______________________________________________ > > lldb-dev mailing list > > lldb-dev@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev