我正在试验Pin ,一个测量工具,我使用它来根据variables的内存地址计算一些统计数据。 我想用我的工具工具收集的信息重新运行我的程序,但是至关重要的是虚拟内存地址通过不同的运行保持不变。
一般来说,我应该让操作系统处理内存分配,但在这种情况下,我需要某种方式来强制它始终分配到相同的虚拟地址。 特别是,我感兴趣的是一个非常长的数组,我正在用numa_alloc_onnode()分配,尽pipe我可以使用其他的东西。
什么才是正确的方法呢?
谢谢
有没有一个相当于Linux内核的alternative()macros的用户空间?
.NET是否支持Windows Eventing 6.0?
为什么同一个程序的INST_PTR(指令指针)值为不同的运行而改变?
在Linux中使用“top”作为半永久性仪器
你可以试试mmap(2)。
您的程序的仪表版本将使用与原始程序不同的内存布局,因为引脚需要动态翻译等内存,并将更改内存布局。 (如果我没记错的话)
除地址空间布局随机化之外,给定相同的调用和数据的大多数内存分配器,加载器和用于分配虚拟内存地址的系统例程将返回相同的结果(不是通过故意设计,而是由软件的工作原理自然产生) 。 所以,你需要:
禁用地址空间布局随机化。
确保您的程序每次都以相同的方式执行。
地址空间布局的随机化是故意改变地址空间来阻止攻击者:如果地址在每个程序执行中被改变,攻击就更难以使用各种漏洞来控制被执行的代码。 应该暂时禁用,仅用于调试目的。 这个答案显示了一个这样做的方法和链接到更多的信息,但确切的方法可能取决于你使用的Linux版本。
由于各种原因(例如使用线程或使用异步信号或进程间通信),您的程序可能会执行不同的操作。 这将取决于你在你的程序中控制它。
一般来说,内存分配不保证是可重复的。 你得到的结果可能是按原样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。