mach_vm_region_recurse,在 osx 上映射内存和共享库

2023-12-30

我使用 vm_region_recurse_64 来映射给定进程的内存,vmmap 样式。

然而,尝试通过检查内存中每个库的 Mach-O 标头来获取应用程序加载的共享库的完整列表,但 vm_region_recurse 似乎与 vmmap 命令行工具在某些特定内存部分的具体开始和结束位置方面不一致。

在加载大多数操作系统共享库的 90000000-a0000000 系统子图中尤其如此。

现在我有点困惑了。我可以列出内存段,大致了解它们是什么类型,并使用 vm_read 从中读取。但列出它们并得到correct事实证明,特定地区的信息很困难。

vmmap 如何获取加载库的特定位置的列表?我的方法好像没有效果。

编辑:这是我正在使用的基本代码。它返回一个与 vmmap 类似但不完全相同的内存映射。没有特定库的内存区域。

kern_return_t krc = KERN_SUCCESS;
vm_address_t address = 0;
vm_size_t size = 0;
uint32_t depth = 1;
while (1) {
    struct vm_region_submap_info_64 info;
    mach_msg_type_number_t count = VM_REGION_SUBMAP_INFO_COUNT_64;
    krc = vm_region_recurse_64(port, &address, &size, &depth, (vm_region_info_64_t)&info, &count);
    if (krc == KERN_INVALID_ADDRESS){
        break;
    }
    if (info.is_submap){
        depth++;
    }
    else {
        //do stuff
        printf ("Found region: %08x to %08x\n", (uint32_t)address, (uint32_t)address+size);
        address += size;
    }
}

vmmap 调用 mach_vm_region_recurse() 来列出内存区域。

为了查看 0x90000000..0xa0000000 处的 dyld 共享缓存等子映射的内容,您需要查找设置了 is_submap 的区域,然后使用相同的地址和更深的嵌套深度再次调用 mach_vm_region_recurse() 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mach_vm_region_recurse,在 osx 上映射内存和共享库 的相关文章

  • CakePHP:无法访问 MySQL 数据库

    我是 CakePHP 的新手 刚刚完成配置过程 但很困惑为什么 Cake 无法访问我的 MySQL 数据库 Cake 信息页面显示我的 tmp 目录是可写的 FileEngine 正在用于缓存 不知道这意味着什么 并且我的数据库配置文件存在
  • MacOS 每秒唤醒次数错误

    构建 Rails 应用程序 ruby 2 4 0p0 Rails 5 1 4 并使用我的 Macbook Air MacOS High Sierra 10 13 2 进行本地测试 我不断遇到此问题 过去 241 秒内有 45001 次唤醒
  • 如何在 Xcode 构建完成时设置警报?

    我是一名懒惰的 iOS 开发人员 在一个大型 iOS 项目中工作 我已经应用了许多优化来减少项目构建时间 但每次构建都需要超过 10 12 分钟 我开始构建 有时当构建完成时 我会在桌子上睡着 有没有什么方法可以将任何语音 铃声警报与 xc
  • postgresql 数据库在 OS X 上的位置?

    我确信这个问题已经得到解答 但我似乎找不到答案 我使用 Homebrew brew install postgresql 安装了 postgresql 它安装到 usr local Cellar postgresql 后记按照我这样做的说明
  • Xcode:无法检查应用程序包

    我正在运行 Xcode 6 和 iOS 8 GM 每当我运行我的应用程序时 我都会从 Xcode 收到此消息 无法检查应用程序包 这样我就可以运行和构建 我会收到消息 我再次运行并构建 一切都按预期运行 这是我的设备 然后它会冲洗并重复 每
  • 使用 MTL/Boost 库 Mac 终端 C++

    准确地说 我正在尝试运行这个优秀的项目 https github com ppwwyyxx panorama https github com ppwwyyxx panorama 我使用的是现代 Mac 问题是我似乎无法让我的计算机正确包含
  • 有没有办法在 OSX 中安装 gcc 而无需安装 Xcode?

    我用谷歌搜索了一下 似乎没有办法在 OS X 上安装 gcc 而不安装 Xcode 至少需要 1 5GB 的空间 我需要的只是 gcc 而不是 Xcode 附带的其他垃圾 此时 我将采用任何其他类型的 C 编译器 我知道我可以简单地安装 X
  • Mac OS X 上的 Qt 字体系列和样式

    我有一个基于 Qt PyQt 的 GUI 应用程序 在 Mac OS X 和其他平台 上运行 它允许用户选择字体并具有粗体和斜体选项的复选框 在更新到新的基于 Cocoa 的 Qt 时 用户发现QFontComboBox不再显示不同的字体样
  • tmux 标题字符串不执行 shell 命令

    我的中有以下几行 tmux conf set option g set titles on set option g set titles string whoami H PWD S W F I P 这在过去是有效的 但升级到 2 0 后
  • set-key-partition-list codesign 后仍提示密钥访问

    我正在导入一个PEM使用以下命令包含我的代码签名身份的公钥和私钥的文件 security import PEM FILE k Library Keychains login keychain T usr bin codesign T usr
  • 如何使 SFSpeechRecognizer 在 macOS 上可用?

    我正在尝试使用 Apple 的语音框架在 macOS 10 15 1 上进行语音识别 在 macOS 10 15 之前 语音识别仅在 iOS 上可用 但根据文档 https developer apple com documentation
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • Vim 和 Mac:如何在不使用 pbcopy 的情况下复制到剪贴板

    我有一个同时支持剪贴板和 xterm clipboard 的 vim 版本 然而 y or y不要复制到系统剪贴板 我知道我可以使用 w pbcopy 甚至为其创建快捷方式 但我真的想要标准方式 我也看到了 fakeclip 但希望找到一个
  • 在 MAC OS X 10.9 上安装 NLTK 确实很困难

    我是 Python Mac OS 新手 我正在寻找 NLTK 教科书 但我在安装它时遇到了一些问题 我一直在寻找解决方案 但不幸的是 所有解决方案似乎都不适合我 或者我误解了如何使用它们 我遇到的基本问题是 尽管按照说明进行操作 NLTK
  • 在 mac os Sierra 上,卡在“设置 CocoaPods 主存储库”上

    转移到 mac os sierra 后 我完全格式化了我的 mac 现在每次运行时我都面临安装 cocoapods 的问题sudo gem install cocoapods pre一切都安装得很好 当我尝试安装 Pod 时 终端堆栈打开S
  • 核心数据 iCloud 同步中的关系完整性和验证

    考虑以下简单的实体模型 实体 A 与实体 B 具有一对一关系 称为b 实体 B 具有逆对一关系 称为a 这两种关系都不是可选的 A B b lt gt a 假设我们有两个设备 1 和 2 开始完全同步 每个对象都有一个 A 类对象和一个 B
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移

随机推荐