为什么静态链接的可执行文件中有全局偏移表和过程链接表?

2024-03-21

我已经阅读了大量有关动态链接器重定位和位置无关代码的内容,包括过程链接表和全局偏移表。我不明白为什么静态链接的可执行文件需要 PLT 和 GOT。我在 ubuntu x86_64 机器上编译了一个 hello world 程序,当我转储节标题时readelf -S它显示 PLT 和 GOT 部分。

我还创建了一个带有简单增量函数的共享库,我用它进行了编译gcc -shared没有-fpic我还看到 PLT 和 GOT 部分。我也没想到这一点。


我不明白为什么静态链接的可执行文件需要 PLT 和 GOT。

事实并非如此。

我在 ubuntu x86_64 机器上编译了一个 hello world 程序,当我使用 readelf -S 转储节标题时,它显示 PLT 和 GOT 节。

这是执行过程中的一个意外。这些部分来自crt1.o,并且没有单独的crt1s.o对于完全静态链接,所以你最终会得到.plt and .got来自那里的条目。

您可以删除这些部分,二进制文件仍然可以工作:

objcopy -R.got -R.plt a.out a.out2

注意:请勿剥离.rela.plt,因为该部分仍需要实施IFUNCs.

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

为什么静态链接的可执行文件中有全局偏移表和过程链接表? 的相关文章

随机推荐

  • 如何从我的 URL 中隐藏“cgi-bin”、“.py”等?

    全新的网页设计 使用 python 让 Apache 启动并运行 测试 python 脚本在 cgi bin 目录中工作 当我显式输入 URL 时获得有效结果 cgi bin showenv py 但我不希望 URL 看起来那样 例如 在
  • #pragma mark 未列出第一个组名称

    我在用着 pragma mark将我的方法分组到某些类别下 但问题在于Xcode 4我的第一个类别没有显示 我的代码如下所示 interface MyClass NSObject pragma mark pragma mark Catego
  • 使用 Proguard 处理 Jackson 库后混淆时出错

    在使用 Proguard 搜索了与混淆问题相关的各种查询之后 我觉得我可能是only一个有这个特殊问题的人 因此 该帖子 我有一个相当标准的 Android 应用程序 它使用基于 JSON 的 REST 调用来交换数据 我利用Jackson
  • 在有关 Android 工具链的“flutter doctor”中显示错误

    显示有关 android 工具链的错误 Android toolchain develop for Android devices Android SDK version 29 0 3 Android license status unkn
  • 什么是 Ruby <=>(宇宙飞船)运算符?

    什么是红宝石 lt gt 宇宙飞船 操作员 该运算符是否由其他语言实现 The 宇宙飞船操作员 https ruby doc org core 3 0 0 Comparable html将返回1 0 or 1取决于左参数相对于右参数的值 a
  • Qt 且没有 moc_*.cpp 文件

    我正在开发一个简单的 Qt 4 应用程序并制作自己的对话框 我子类化了QDialog 插入Q OBJECT类声明块中的宏 并且 我明白了 链接器错误 未定义对 MyDialog vtable 的引用 并且没有 moc MyDialog cp
  • django-mssql 无法在 Apache 中使用 mod_wsgi 工作,但在开发服务器中工作正常

    我有一个 Django 应用程序 使用 django mssql 与 SQL Server 进行通信 这在开发服务器 runserver 中工作得很好 但在 Apache mod wsgi 下 我在尝试查找确实存在的 dll 时遇到了与它相
  • 在 UWP 中创建文件和文件夹

    我查看了很多 stackoverflow 帖子和文章 但仍然无法在 UWP 中创建文件 在 WPF 中这确实很容易 但 UWP 的工作方式有所不同 我在清单文件中添加了以下内容
  • 数据库独立的行级安全解决方案

    有人知道 Java C 数据库独立授权库吗 该库应支持跨公司组织结构的读 写 删除 插入操作 像这样的东西 用户可以查看所有文档 用户可以输入分配给他的单位的新文档 用户可以更改分配给他的单位和所有下属单位的所有文档 用户可以删除分配给他的
  • 计算存储过程的结果

    我有一个返回 ID 名称 描述的存储过程 并且不接受任何输入参数 但是 我对得到多少结果感兴趣 我期待这样的工作 SELECT COUNT FROM EXEC MyStoredProcedure 但我在 Sql Server Managem
  • LVDiff 在 Git 中不起作用

    我正在尝试从元差异套件中获取 lvdiff 以与 Git 一起使用 我的 gitconfig 看起来像这样 gui recentrepo C Users Tanner Desktop FIRST 2010 Beta Java LoganRo
  • GPS定位无服务

    我是一名新开发人员 有一个简单的问题 我已经四处搜索 但尚未找到明确的答案 简而言之 我正在开发一个需要能够使用 GPS 的应用程序 然而 诀窍是我想使用 GPS 来获取手机的位置 即使它们没有运营商服务 话虽如此 我有两个问题 是否可以通
  • 未经授权暴露hangfire

    有没有办法在 IIS 中公开 Hangfire 而无需配置授权 在这种特定情况下 仪表板应该打开 但在访问它时 不是在调试中 它会返回 401 代码 我认为你应该能够编写一个自定义实现IDashboardAuthorizationFilte
  • 如何动态插入Vue组件?

    许多面板 产品 以多行和多列的形式显示在一个页面中 我使用的是 Vue 2 面板是组件 现在 单击一个面板时 我想在该面板的行下方显示该面板的详细信息 这与谷歌图像搜索类似 例如 在上图中 如果我单击 s1 s2 或 s3 中的任何一个 大
  • 如何使用多个$条件对查询进行分组?

    我想像下面这样查询 但这只包含一个 cond 如何查询两个 cond collection aggregate match id in ids group id someField count sum cond eq otherField
  • 产生随机波函数

    我需要在 matplotlib 中生成一条随机曲线 例如 我的 x 值是从 1 到 1000 我不想生成分散的随机 y 值 我需要一条平滑的曲线 就像某种非常扭曲的正弦曲线 具有不同的幅度和波长 是否已经存在一些东西可以让我轻松地做到这一点
  • 如何从 gWidget 和处理程序返回值?

    我正在尝试为 R 包开发 GUI 使用 gWidgets 我的计划是构建一个保存数据的主窗口 并使用按钮为每个函数调用小型 gui 包装器 不幸的是 我陷入了一个基本 问题 我不知道如何传输数据 问题 如何在不同的窗口之间正确发送数据 如何
  • 让聊天机器人 (wit.ai) 回复它没有正确的答案

    我在用Wit ai对于我的聊天机器人 问题是我的机器人总是试图回答一些问题 只有当我的机器人真正理解所问的内容时 我才会做出回答 我知道这是可能的 但如果我有一个回复很少的机器人 它似乎总是选择其中一个回复 即使它被问到完全不同的问题 我想
  • 连接到 docker-compose mysql 容器拒绝访问,但运行相同映像的 docker 不会

    我在连接到使用 docker compose 启动的 mysql docker 容器时遇到一些问题 这是一篇很长的文章 抱歉 这是我的 docker compose yml 文件 db image mysql 5 7 ports 3306
  • 为什么静态链接的可执行文件中有全局偏移表和过程链接表?

    我已经阅读了大量有关动态链接器重定位和位置无关代码的内容 包括过程链接表和全局偏移表 我不明白为什么静态链接的可执行文件需要 PLT 和 GOT 我在 ubuntu x86 64 机器上编译了一个 hello world 程序 当我转储节标