================
@@ -0,0 +1,31 @@
+import lldb
+
+SINGLE_INSTANCE_PATTERN = "there_is_only_one_of_me"
+DOUBLE_INSTANCE_PATTERN = "there_is_exactly_two_of_me"
+
+
+def GetAddressRanges(test_base):
+    mem_regions = test_base.process.GetMemoryRegions()
+    test_base.assertTrue(len(mem_regions) > 0, "Make sure there are memory 
regions")
+    addr_ranges = lldb.SBAddressRangeList()
+    for i in range(mem_regions.GetSize()):
+        region_info = lldb.SBMemoryRegionInfo()
+        if not mem_regions.GetMemoryRegionAtIndex(i, region_info):
+            continue
+        if not (region_info.IsReadable() and region_info.IsWritable()):
+            continue
+        if region_info.IsExecutable():
+            continue
+        if not region_info.GetName() or region_info.GetName() != "[heap]":
----------------
clayborg wrote:

We can't rely on `[heap]` being the memory region name, this won't work on 
macOS:
```
(lldb) p (void *)malloc(12)
(void *) 0x00006000005dc000
(lldb) memory region 0x00006000005dc000
[0x0000600000000000-0x0000600020000000) rw-
```
if you want memory regions that contain data from the heap, I would run malloc 
as an expression, then find the memory region it exists in by using the 
expression result:
```
>>> v = lldb.frame.EvaluateExpression('(void *)malloc(16)')
>>> v.GetValueAsUnsigned()
105553122394112
>>> v.GetValue()
'0x00006000005d8000'
```
Then you can use the `v.GetValueAsUnsigned()` to find the right memory region.

https://github.com/llvm/llvm-project/pull/95007
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to