如何为在XCode中以调试模式运行的iOS应用程序创建整个内存的转储

问题描述 投票:0回答:1

我有一个在Xcode中以调试模式运行的应用程序。我想检查应用程序的整个内存(堆栈和堆)。我知道我可以使用lldb进行转储。我使用以下命令:

(lldb) memory read --outfile filename address

例如

(lldb) memory read --outfile /tmp/mem-dump.txt --force --count 10000 0x000000010d051000

,但是我需要指定内存的起始地址和大小。我不知道如何查找我的应用程序进行转储所占用的内存区域。是否有可能找到存储器的地址空间?也许存在其他使转储(不使用lldb)的方法?我不使用越狱设备。

ios xcode memory lldb dump
1个回答
0
投票
  • [将以下python脚本复制并保存到Mac。让我们将其命名为mem.py
import lldb

def processAllMemoryRegions():
    process = lldb.debugger.GetSelectedTarget().GetProcess()
    memoryRegionInfoList = process.GetMemoryRegions()
    numberOfMemoryRegions = memoryRegionInfoList.GetSize()
    memoryRegionIndex = 0
    while (memoryRegionIndex < numberOfMemoryRegions):
        memoryRegionInfo = lldb.SBMemoryRegionInfo()
        success = memoryRegionInfoList.GetMemoryRegionAtIndex(memoryRegionIndex, memoryRegionInfo)
        if success:
            print("Processing: "+str(memoryRegionIndex+1)+"/"+str(numberOfMemoryRegions))
            processOneMemoryRegion(process, memoryRegionInfo)
        else:
            print("Could not get memory at index: "+str(memoryRegionIndex))    
        memoryRegionIndex = memoryRegionIndex+1

def processOneMemoryRegion(process, memoryRegionInfo):
    begAddressOfMemoryRegion = memoryRegionInfo.GetRegionBase()
    endAddressOfMemoryRegion = memoryRegionInfo.GetRegionEnd()
    if memoryRegionInfo.IsReadable():
        print("Beg address of a memory region: "+stringifyMemoryAddress(begAddressOfMemoryRegion))
        print("End address of a memory region: "+stringifyMemoryAddress(endAddressOfMemoryRegion))
        error = lldb.SBError()
        regionSize = endAddressOfMemoryRegion-begAddressOfMemoryRegion
        memoryData = process.ReadMemory(begAddressOfMemoryRegion, regionSize, error)
        if error.Success():
            #do something with memoryData (bytearray) eg. save it to file
            pass
        else:
            print("Could not access memory data.")
    else:
        print("Memory region is not readable.")

def stringifyMemoryAddress(memoryAddress):
    return '0x{:016x}'.format(memoryAddress)
  • 在断点上停止执行应用程序

在lldb窗口中

  • 输入:脚本

  • 导入python脚本:exec(open('/ absolute / path / to / mem.py')。read())>

  • Enter:processAllMemoryRegions()

  • enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.