是否可以强制指定虚拟地址范围?

2024-01-10

我有一个为特定(嵌入式、多处理器、32 位)架构编写的 Ada 程序。我尝试在 64 位 RHEL 上的模拟中使用相同的代码作为共享对象(因为有多个版本,并且我需要在运行时选择一个版本)。

我遇到的问题是代码中的几个地方编写代码的人(不是我...)使用 Unchecked_Conversions 将 System.Addresses 转换为 32 位整数。不仅如此,还有多个带有硬编码内存地址的例程。我可以对此代码进行微小的更改,但将其完全移植到 x86_64 并不是一个真正的选择。有处理中断、CPU 任务调度等的例程。

该代码过去在静态链接到以前版本的模拟(由 Fortran/C/C++ 组成)时运行良好。然而现在,主可执行文件启动,然后根据一些输入加载共享对象。然后,该共享对象检查其他一些输入并加载适当的 Ada 共享对象。

查看代码,很明显,如果我可以将逻辑内存地址保持在 0 到 2,147,483,647(32 位有符号整数)之间,它应该可以正常工作。有没有办法强制共享对象加载器在较低范围内为 Ada 代码留出空间,或者让 Ada 代码“认为”它的地址在 0 到 2,147,483,647 之间?


有没有办法强制共享对象加载器在较低范围内为 Ada 代码留出空间

好消息是装载机将保持较低的范围不变。

坏消息是它不会在那里加载任何共享对象。没有可用于影响共享对象放置的界面。

也就是说,从内存中 dlopen https://sourceware.org/bugzilla/show_bug.cgi?id=11767(我们在 glibc 的私有分支中实现)将允许您做到这一点。但这是不公开的。

您的其他可能的选择是:

  • 如果您可以将整个过程放入 32 位地址空间,那么您的解决方案就很简单:只需使用-m32.

  • use prelink将图书馆重新定位到所需的地址。由于该地址几乎总是可用的,因此加载器很可能将库准确地加载到那里。

  • 将加载程序与自定义链接mmap实现,它通过某种侧通道检测感兴趣的库,并执行mmap系统调用与MAP_32BIT set, or

  • 在 a 中运行该程序ptrace沙箱。这样的沙箱可以再次拦截mmap系统调用和 or-inMAP_32BIT当需要时。

或者也许让 Ada 代码“认为”它的地址在 0 到 2,147,483,647 之间?

我不明白这怎么可能。如果库将函数或全局的地址存储在 32 位内存位置,然后加载该地址并取消引用它......它将获得一个 32 位截断地址和一个SIGSEGV关于取消引用。

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

是否可以强制指定虚拟地址范围? 的相关文章

  • EULA 接受 Bash 脚本

    我有一个尝试安装垃圾箱的脚本 除了 bin 在 more 中打开 EULA 之外 一切正常 在脚本再次开始并自行完成安装之前 您必须手动 ctrl c 退出此 more 实例 因为这更多的是逃离 shell 所以脚本在打开后不知道要运行什么
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • PHP mail() 函数不发送邮件

    我有一个小问题 我正在使用一个工作脚本 在我的测试帐户 共享服务器上工作 使用 mail 函数通过 PHP 发送邮件 我刚刚得到了一个专用服务器 但我还无法让该功能发挥作用 在过去的 10 个小时左右的时间里 我阅读了有关 BIND 用于
  • gpg:抱歉,根本没有请求终端 - 无法获取输入

    解密时出现以下错误 eyaml decrypt s ENC and the key goes on here gnupg quiet no secmem warning no permission warning no tty yes de
  • 如何在C程序中直接改变显存映射来绘制像素(无需库函数)

    是否可以通过使用 C 程序更改 RAM 中屏幕 视频即监视器 内存映射中的值来显示黑点 我不想使用任何库函数 因为我的主要目标是学习如何开发简单的操作系统 我尝试访问起始屏幕内存映射 即 0xA0000 在 C 中 我尝试运行该程序 但由于
  • 警告:找不到入口符号Reset_Handler

    错误的完整摘要如下 Info Internal Builder is used for build arm atollic eabi gcc o test elf main o stm32f4xx it o system stm32f4xx
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • 为什么我的代码在编译用于分析 (-pg) 时在多线程下运行比在单线程下运行慢?

    我正在写一个光线追踪器 最近 我在程序中添加了线程 以利用 i5 四核上的附加内核 奇怪的是 应用程序的调试版本现在运行速度变慢 但优化后的构建运行速度比添加线程之前更快 我将 g pg 标志传递给 gcc 以进行调试构建 并将 O3 标志
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • AS3 内存泄漏示例

    有人可以发布一个 as3 代码的示例 特别是包括事件侦听器 这将是一个可能泄漏内存的简单示例 也希望您能发布所显示问题的解决方案吗 问题是 AS3 事件监听器中内存泄漏的一个简单示例是什么 如何解决它 public class MySpri
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • C# - OPC-UA 服务器应用程序尚未在 Linux 计算机中创建 PKI 证书

    当我跑步时OPC UA serverWindows 机器中的 C 应用程序 然后 OPC UA 服务器已创建证书路径C ProgramData OPC Foundation pki own 并在此路径中生成一些证书 但是当我在中安装 OPC
  • 如何从命令行执行 PHP 代码?

    我想执行单个 PHP 语句 例如if function exists my func echo function exists 直接使用命令行 无需使用单独的 PHP 文件 这怎么可能 如果您要在命令行中执行 PHP 我建议您安装phpsh
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • 从sourceforge下载最新版本

    我正在尝试在 bash 脚本中从 Sourceforge 下载最新版本的graphicsmagick wget q https sourceforge net projects graphicsmagick files latest dow
  • 抛出错误的分配

    我在尝试使用升压托管共享内存时收到 bad alloc 我从他们的快速指南中复制了升压示例 以供不耐烦的人使用 并结合了我自己的更改 我的代码如下 我注释掉了示例内容并在下面编写了自己的代码 我还进行了一些调试和测试 有人有什么想法吗 任何
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • 如何在树莓派上更新到最新的 python 3.5.1 版本?

    我昨天拿到了 Raspberry Pi 我已经在尝试用它来编写代码了 我有一个计划在其上运行的程序 但它仅与 Python 版本 3 5 0 或 3 5 1 兼容 并且我在互联网上找到的所有内容似乎都已经过时 与 Python 2 有关 或
  • 如何从python导入路径中删除当前目录

    我想使用 Mercurial 存储库hg本身 也就是说 我克隆了 Mercurialhttps www mercurial scm org repo hg https www mercurial scm org repo hg并想运行一些h

随机推荐