================
@@ -1571,6 +1571,25 @@ class Process : public 
std::enable_shared_from_this<Process>,
   virtual size_t ReadMemory(lldb::addr_t vm_addr, void *buf, size_t size,
                             Status &error);
 
+  /// Read from multiple memory ranges and write the results into buffer.
+  ///
+  /// \param[in] ranges
+  ///     A collection of ranges (base address + size) to read from.
+  ///
+  /// \param[out] buffer
+  ///     A buffer where the read memory will be written to. It must be at 
least
----------------
jasonmolenda wrote:

I'm unclear on the data store model.  This description sounds like calling 
ReadMemoryRanges({[0, 4], [4, 4], [8, 4]}, buffer) would need a buffer of at 
least 12 bytes.  But reading `Process::ReadMemoryRanges`, looks like it is 
using `buffer` as the store of a single memory range -- we could just as easily 
loop over the ranges, find the largest range, and create a local buffer instead 
of using an allocation from the caller.  I suppose we avoid the loop over the 
ranges.

If this description is correct -- the buffer provided by the caller is where 
*all* the results are stored, then the `Process::ReadMemoryRanges` 
implementation is wrong.  It's checking each individual memory range size 
against buffer size, but we need to check if the current read plus all previous 
reads overflows buffer.  And we need to read bytes into the buffer at the 
correct offset of each read.

https://github.com/llvm/llvm-project/pull/163651
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to