由于 PIC,无法从程序集中的 x86-64 对象链接共享库

2023-12-05

我正在将共享库从 32 位移植到 64 位。它由一些导出多个过程的程序集(为 NASM 编写)和一些高级 C 粘合代码组成。我正在使用 NASM 2.10.01 和 GNU ld 2.22 的 64 位 Debian 机器上进行构建。

解决了所有的推送/弹出问题(推送寄存器的 32 位部分显然无法在 64 位模式下工作),我已经得到了要组装的对象,但现在我被链接阶段阻止了。这是我的命令行 - 汇编:

nasm -Ox -dPTC_ARCH=X64 -f elf64 particl.asm -o particlasm.o

Linking:

ld -shared -lc -S -melf_x86_64 particlasm.o ptc_highlevel.o -o libparticlasm.so(-lc 开关强制链接标准 C 库 - 我需要在汇编代码中使用它的一些函数)

但是,链接器失败并显示以下消息:

ld: particlasm.o: relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC
particlasm.o: could not read symbols: Bad value`

我知道为什么 64 位系统需要 PIC;事实是,我确实按照 9.2 节中的描述使用 PICNASM手册。然而,在我看来,NASM 不知何故没有在 ELF 符号表中将我的代码标记为 PIC,这导致链接器抗议,并且我在 手动修复此问题。

有任何想法吗?


我已经解决了!就我而言,搬迁的原因是:

1) libc调用,我通过附加解决了wrt ..plt to libc电话,例如call rand wrt ..plt,

2)对代码中放置的常量的引用,这些常量需要从例如push MASK_RGB to push ptr [rel MASK_RGB] (where ptr是我自己的类型,它是给定平台的本机单词类型的别名)。

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

由于 PIC,无法从程序集中的 x86-64 对象链接共享库 的相关文章

  • 如何在 VC++ 中使用 _W64 和 __w64?

    有这样的事情 w64 http msdn microsoft com en us library s04b5w00 VS 71 aspx在 Visual C 9 中 我在尝试将本机 C DLL 移植到 64 位时遇到了它 特别是在crtde
  • .NET File.Exists 在 Windows\System32\Drivers 文件夹中不起作用?

    该过程已提升 并且我确保 VS 调试器中的路径是正确的 我使用 Environment GetFolderPath Environment SpecialFolder System 而不是对其进行硬编码 但 File Exists 仍然返回
  • 编写 AMD64 SysV 程序集时使用哪些寄存器作为临时寄存器?

    我正在使用实现一个功能cpuid根据 AMD64 SysV ABI 进行组装 我需要在函数本身中使用 2 个临时寄存器 第一个用于累积返回值 第二个用作计数器 我的功能目前如下所示 zero argument function some c
  • 为 Visual Studio 应用程序设置平台目标的目的是什么?

    对于任何 VS 项目 都可以在该项目的构建属性中设置平台目标 您可以将其设置为任何 CPU x86 x64 或 Itanium 我的问题是 如果我将此值设置为 x86 是否意味着我无法在 x64 计算机上运行该项目 如果是这样 为什么还要使
  • 重复符号_OBJC_CLASS_$_LoginController

    我知道这个问题以前已经被问过很多次了 但到目前为止还没有解决我的问题 我知道当您在项目中获得文件的多个副本时 会发生此错误 我尝试清理构建 删除任何登录控制器 m文件输入编译源然后构建 很好 没有错误 当我在编译源中添加 LoginCont
  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • 尝试使用 x86 程序集 GNU GAS 在数组索引处赋值时出现错误

    我在用x86GNU 与 GCC 的程序集 并尝试实现相当于以下内容的程序集c c int x 10 x 0 5 但是 当我尝试运行 使用命令 a out 我的汇编代码如下 第一次编译后gcc filename s 错误Segmentatio
  • Linux 的 gcc __attribute__((selectany)) 替代方案?

    我想知道是否有替代方案 attribute selectany 在Linux中 我想定义这样的东西 char a qwe zxc 并将其包含在许多链接在一起的 c 文件中 因此链接器将看到 a 的多个定义 因此不会链接 我读过这个属性 se
  • 页面错误陷阱的成本

    我有一个应用程序 它定期 每 1 或 2 秒后 通过分叉自身来获取检查点 因此 检查点是原始进程的一个分支 它一直保持空闲状态 直到原始进程发生某些错误时被要求启动 现在我的问题是fork的写时复制机制的成本有多大 每当原始进程写入内存页面
  • AxAcroPDF - Vista64 类未注册错误

    我们有一个用 C 编写的 WinForms 应用程序 它使用 AxAcroPDFLib AxAcroPDF 组件来加载和打印 PDF 文件 在 Windows XP 下一直运行没有任何问题 我已将开发环境移至 Vista 64 位 现在除非
  • 为什么在强度降低乘法和循环进位加法之后,这段代码的执行速度会变慢?

    我正在读书阿格纳 雾 https en wikipedia org wiki Agner Fog s 优化手册 https en wikipedia org wiki Agner Fog Optimization 我遇到了这个例子 doub
  • 从 NASM 调用 C 函数 _printf 会导致分段错误

    我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
  • 如何在 Debian 上编译 DOS 程序?

    在我的汇编语言课程中 我们使用 DPMI 编写 DOS 程序 不幸的是 我无法一直使用 32 位 Windows 机器 我在我使用的几乎每台计算机上都安装了 Debian 虚拟机 我已经安装了 DOSBox 和 DOSEMU 有什么办法可以
  • 无关的库链接

    我有一个可能有点愚蠢的问题 因为我很确定我可能已经知道答案了 假设你有静态库A 动态共享库B和你的linux下的程序C 假设库 A 调用库 B 中的函数 并且您的程序调用库 A 中的函数 现在假设 C 在 A 中调用的所有函数都不使用 B
  • cmake 生成 Xcode 项目 - 发布构建有效,但存档因链接器错误而失败

    使用 Xcode 6 3 1 CMake 3 2 2 我有一个与图书馆链接的项目 该库作为代码包含在 xcode project 中 经过编译 然后与主可执行文件链接 项目是用cmake生成的 CMakeLists txt 的一些摘录 ad
  • 使用 Turbo C 编译并链接到 .com 文件

    我正在尝试使用 Turbo C 编译器和链接器编译一个简单的程序并将其链接到 DOS com 文件 我尝试了我能想到的最简单的 C 程序 void main Turbo C 链接器中是否有链接到 com 文件的命令行参数 我从链接器收到的错
  • 在 64 位操作系统上以 32 位运行 IIS 与以 64 位运行 IIS 有何优缺点?

    可能更适合 机架溢出 但从开发人员的角度来看 在 64 位 Windows 主机上将 IIS 同时服务于传统经典 ASP 和 NET 作为 32 位进程而不是 64 位进程运行有哪些优点和缺点 32 64 iis 服务器 相对于 32 32
  • 在 Visual Studio 2012 中安装 OpenCV

    我正在尝试安装 OpenCV 来与 Visual Studio 一起使用 我使用的是2012Pro版本 但我认为它应该与vs10相同 我正在关注这个教程 http docs opencv org doc tutorials introduc
  • 为什么 printf 使用浮点和整数格式说明符打印随机值

    我在64位机器上写了一个简单的代码 int main printf d 2 443 所以 这就是编译器的行为方式 它将识别第二个参数为双精度型 因此它将在堆栈上压入 8 个字节 或者可能只是在调用之间使用寄存器来访问变量 d需要 4 字节整
  • 在 64 位 Windows 上运行 32 位可执行文件时出现问题

    如果允许的话 我会添加 500 个我自己的代表作为赏金 我在用着wkhtml转pdf http wkhtmltopdf org 将 HTML 网页转换为 PDF 这在我的 32 位开发服务器上完美运行 不幸的是 我无法运送我的机器 p 但是

随机推荐

  • 更改端点地址后如何修复“无法识别的消息版本”

    我正在尝试使用 NET Core 3 0 中的新端点来使用 WCF 服务 我添加了服务参考并成功拨打了电话 将我的 WCF 端点地址更改为我最初使用的相同地址后 我收到 无法识别的消息版本 错误 我怎样才能克服这个错误 我已经尝试过使用自定
  • 将 Google Cloud Platform 项目从一个帐户移至另一个帐户

    我可以将项目从一个 GCP 帐户迁移到另一个帐户吗 账户 1 有项目 1 账户 2 有项目 2 账户 1 和账户 2 具有不同大小的计算引擎 想要将项目 1 添加到账户 2 以获得统一计算引擎的优势 谢谢 拉维 如果 帐户 指的是 计费帐户
  • Python计时器“NoneType”对象不可调用错误

    我想制作一个程序 每 10 秒检查一次给定的 url def listener url print Status Listening response urllib request urlopen url data response rea
  • SQL:间隙和岛屿、分组日期

    我正在尝试将 3 天内的日期分组 并根据 30 天内的重新入院分配分数 MRN 每次重新入院将获得 3 分 任何有关修改下面我的查询的帮助都会很棒 Example CREATE TABLE z ID INT IDENTITY 1 1 Org
  • Android RecyclerView,回收不能正常工作

    我有一个RecyclerView我正在使用的 我用过RecyclerView以前但从未遇到过这个问题 当我上下滚动时 一些项目会消失 而一些消失的项目会再次出现在底部 Code ViewHolder public class ViewHol
  • 为什么 scanf 函数会自动获取之前的 '\n' 值以及如何逃脱此事件?

    我对编写代码并不陌生 但我刚刚学习C语言 我无法理解这个话题 也许这不是问题 但现在对我来说是一个问题 请您解释一下好吗 这是代码 我遇到过这个 include
  • String valueOf 与空字符串连接

    我从事Java代码优化工作 我不清楚之间的区别String valueOf or the sign int intVar 1 String strVar intVar String strVar String valueOf intVar
  • react-native-pdf-view - 如何使用 base64 或 blob 填充 pdfView

    我正在使用反应本机 pdf view库 我在用 pdf 填充 PDFView 时遇到问题 我的项目的工作原理是 我从服务器接收一个 base64 pdf 然后使用该库将其保存到 android 文件系统反应本机FS像这样 这很好用 save
  • 将 nodejs 程序的输出重定向到文件时编码错误(Windows 10 powershell 可能存在问题)

    我有一个简单的 javascript 文件 我们称之为 index js 其中包含以下内容 console log p rola 我在 Windows 10 上使用 VSCode 当我使用以下命令执行文件时 它使用 powershell 作
  • 将关联对象与 back_populates 一起使用时,SQLAlchemy 抛出 KeyError – 文档中的示例不起作用

    SQLAlchemy 很好的文档如何使用关联对象back populates 但是 当从该文档复制并粘贴示例时 将子项添加到父项会引发KeyError如下面的代码所示 模型类 100 从文档中复制 from sqlalchemy impor
  • 获取所选列的索引(DataTables + ColVis)

    我正在使用 jQuery 插件 DataTables ColVis 来显示表格 我必须得到一个数组用户选择显示的列的索引 此信息将用于创建可自定义的导出表 例如 用户选择仅显示表中的浏览器和平台here 我需要获得 1 2 有任何想法吗 编
  • 算法复杂度 时间

    我目前无法识别和理解以下算法的复杂时间 背景 有一个文件列表 每个文件包含一个候选 ID 列表 文件的数量和其中的候选人数量都是不固定的 您如何计算负责以下任务的算法的时间复杂度 读取每个文件并将所有唯一的候选 ID 添加到哈希集中 Tha
  • 如何检查iOS版本是否可用字体?

    我目前正在开发一个使用 ChalkboardSE Regular 字体的应用程序 我的部署目标是 4 0 该字体在 4 1 中不可用 但在 4 3 中受支持 检查字体是否存在的最佳方法是什么 如果不存在 请在 提前致谢 T UIFont f
  • Spring Data Rest:如何从存储库公开 json 模式 (2.0.0.M1)

    我在源代码中看到 Spring DATA Rest 可以通过以下 URL 为存储库公开 Json 架构 repository schema 有谁知道如何配置这个吗 有 RepositorySchemaController org sprin
  • Codeigniter 2.1.2 和 Facebook-PHP-SDK 3.1.1

    我正在通过 Codeigniter 2 1 2 和 Facebook PHP SDK 3 1 1 开发一个简单的身份验证 但我不知道为什么它现在可以工作 我已将 src 文件夹 https github com facebook faceb
  • 什么时候结构体太大? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的结构与类 抱歉 如果这是一个开放式问题 但我只想知道我的结构是否太大 我想使用结构体的原因是因为我知道它们比类更快 我认为我真的需要这种速度 我发现如果你的结构太大 它实际上会减慢你的程序 所
  • 我的网页忽略 CSS 文件中的更改

    无论我在 css 文件中进行什么更改 页面都保持不变 而且 无论是更改链接标记以使其指向另一个 css 文件还是完全删除它都没有什么区别 应用 html 代码中的其他更改 网页的源代码显示了应有的一切 当我将链接标签从前一个文件重定向到我现
  • Azure 函数无法正常工作“无法在脚本代码中声明命名空间”

    我是一名 Java 微服务人员 对 NET 不太感兴趣 在 StackOverflow 社区的帮助下 我能够为我的问题获得工作代码 该代码在本地完美运行 但是当我尝试将其作为函数移动到 Azure 时 我收到错误 请指导 Code 本地工作
  • 在 R 中按降序排列带有“null”的条形图的条形

    我想创建一个带有降序条形的条形图 在下面的图中 由于 NA 出现在 a1 向量的第二个位置 所以在创建图时它被推到最后 但是 我希望 NA 条仅出现在第二个位置 请在此帮助我 因为我想在不修改数据的情况下实现此目的 library ggpl
  • 由于 PIC,无法从程序集中的 x86-64 对象链接共享库

    我正在将共享库从 32 位移植到 64 位 它由一些导出多个过程的程序集 为 NASM 编写 和一些高级 C 粘合代码组成 我正在使用 NASM 2 10 01 和 GNU ld 2 22 的 64 位 Debian 机器上进行构建 解决了