We have a way internally with:

    virtual Error
    lldb_private::Process::GetMemoryRegionInfo (lldb::addr_t load_addr, 
MemoryRegionInfo &range_info);

This isn't expose via the public API in lldb::SBProcess. If you want, you can 
expose this. We would need to expose a SBMemoryRegionInfo and the call could be:

namespace lldb
{
    class SBProcess
    {
        SBError GetMemoryRegionInfo (lldb::addr_t load_addr, SBMemoryRegionInfo 
&range_info);
    };
}

then you would call this API with address zero and it would return a 
SBMemoryRegionInfo with an address range and if that memory is 
read/write/execute. On MacOSX we always have a page zero at address 0 for 64 
bit apps so it would respond with:

[0x0 - 0x100000000) read=false, write=false, execute=false

Then you call the function again with the end address of the previous range. 

I would love to see this functionality exported through our public API. Let me 
know if you are up for making a patch. If you are, you might want to quickly 
read the following web page to see the rules that we apply to anything going 
into our public API:

http://lldb.llvm.org/SB-api-coding-rules.html


Greg

> On May 12, 2016, at 6:20 AM, Howard Hellyer via lldb-dev 
> <lldb-dev@lists.llvm.org> wrote:
> 
> I'm working on a plugin for lldb and need to scan the memory of a crashed 
> process. Using the API to read chunks of memory and scan (via 
> SBProcess::Read*) for what I'm looking for is easy but I haven't been able to 
> find a way to find which address ranges are accessible. The SBProcess::Read* 
> calls will return an error on an invalid address but it's not an efficient 
> way to scan a 64 bit address space. 
> 
> This seems like it blocks simple tasks like scanning memory for blocks 
> allocated with a header and footer to track down memory leaks, which is crude 
> but traditional, and ought to be pretty quick to script via the Python API. 
> 
> At the moment I've resorted to running a python script prior to launching my 
> plugin that takes the output of "readelf --segments", /proc/<pid>/maps or 
> "otool -l" but this isn't ideal. On the assumption that I'm not missing 
> something huge I've looked at whether it is possible to extend LLDB to 
> provide this functionality and it seems possible, there are checks protecting 
> calls to read memory that use the data that would need to be exposed. I'm 
> working on a prototype implementation which I'd like to deliver back at some 
> stage but before I go too far does this sound like a good idea? 
> Howard Hellyer
> IBM Runtime Technologies, IBM Systems 
> 
> 
> _______________________________________________
> 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

Reply via email to