程序可以读取自己的 elf 部分吗?

2024-02-29

我想使用 ld 的 --build-id 选项来将构建信息添加到我的二进制文件中。但是,我不确定如何在程序中提供此信息。假设我想编写一个程序,每次发生异常时都会写入回溯,以及一个解析此信息的脚本。该脚本读取程序的符号表并搜索回溯中打印的地址(我被迫使用这样的脚本,因为程序是静态链接的并且 backtrace_symbols 不起作用)。为了使脚本正常工作,我需要将程序的构建版本与创建回溯的程序的构建版本相匹配。如何从程序本身打印程序的构建版本(位于 .note.gnu.build-id elf 部分)?


如何从程序本身打印程序的构建版本(位于 .note.gnu.build-id elf 部分)?

  1. 您需要阅读ElfW(Ehdr)(在文件的开头)在二进制文件中查找程序头(.e_phoff and .e_phnum会告诉您程序头在哪里,以及要读取多少个)。

  2. 然后你阅读程序头,直到找到PT_NOTE你的程序的一部分。该段将告诉您二进制文件中所有注释的开头的偏移量。

  3. 然后您需要阅读ElfW(Nhdr)并跳过注释的其余部分(注释的总大小为sizeof(Nhdr) + .n_namesz + .n_descsz,正确对齐),直到找到带有.n_type == NT_GNU_BUILD_ID.

  4. 一旦你发现NT_GNU_BUILD_ID注意,跳过它的.n_namesz,并阅读.n_descsz用于读取实际 build-id 的字节。

您可以通过将读取的内容与输出进行比较来验证您正在读取正确的数据readelf -n a.out.

P.S.

如果您要像上面那样麻烦地解码 build-id,并且if您的可执行文件没有被删除,您最好解码并打印symbol名称代替(即复制什么backtrace_symbols确实)——实际上比解码 ELF 音符更容易,因为符号表包含固定大小的条目。

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

程序可以读取自己的 elf 部分吗? 的相关文章

  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp

随机推荐

  • 如何将多个 HTML 文件解析为单个 PDF?

    我想使用 iText 将一系列 html 文件转换为 PDF 例如 如果有这些文件 第1页 html page2 html page3 html 现在我想创建一个 PDF 文件 其中 page1 html 是第一页 page2 html 是
  • CSS - 悬停穿过元素以激活被覆盖元素上的悬停

    我的页面布局涉及大量绝对位置和 z 索引 因此有很多元素彼此重叠 其中一个元素仅包含文本 它悬停在许多其他内容之上 在该元素下方有几个应用了 CSS 悬停伪类的元素 当鼠标经过包含文本的元素时 我希望下面的元素以某种方式响应鼠标的存在并激活
  • Symfony2 Doctrine 实体未水合

    我得到一个实体Member从实体管理器中 做了一个 var dump 除了与的 ManyToOne 关系之外 一切正常Family 所以我尝试了var dump member gt getFamily 令人惊讶的是 唯一正确的值是家庭的 I
  • Pandas:FutureWarning:将列表喜欢传递给 .loc 或 [] [重复]

    这个问题在这里已经有答案了 当我运行脚本时 Pandas 给出以下内容 未来警告 FutureWarning Passing list likes to loc or with any missing label will raise Ke
  • 如何在没有小部件工厂的情况下为 Yii2 中的 GridView 设置默认配置?

    这是 Yii2 中 gridview 的样子 我想稍微改变我的网格 所以我添加了这一行 tableOptions gt class gt table table condensed 这很好用 但是 我希望这是我所有
  • 如何抓取foursquare签到数据?

    是否可以通过贪心的方式从foursquare中爬取签到数据 即使我与所有用户没有友谊 就像抓取公开的 Twitter 消息一样 如果您有什么经验或建议 请分享 谢谢 如果您有包含 foursquare 链接的公开推文 您可以通过发出 HEA
  • 测试嵌套结构中的 nil 值

    我在 go 中有一个深度嵌套的结构 它们是由 json 解组器构造的 然而 这个结构中的相当多的字段是 omitifempty 所以我用一个在不同地方可以有空的结构来结束操作 示例 真实的嵌套更深 而且很大 400 行结构 package
  • 视图主体中的 swiftui 三元运算符

    在 swiftyui 主体内部 基于 news urlToImage 值 我需要能够加载另一个视图 LOadRemoteImageView 这只是另一个接受可选 url 字符串来加载远程图像的视图 或者显示文本字符串 没有图像网址 按照下面
  • 原始类型是否被视为 JSON?

    大多数情况下 JSON 的格式如下 color red value f00 Or color red value f00 color red value f00 我想问 string bool int 等原始类型也是 JSON 吗 我找到了
  • Swagger-Net 显示控制器名称而不是端点方法

    我一直试图找出为什么 Swagger Net 不显示控制器中的端点方法 C 项目使用基于 Net Framework 4 6 1 的 Web API 模板 当我使用 SwashBuckler 时 我得到了相同的结果 所以这不是 Swagge
  • 当 HashMap 或 HashSet 达到最大容量时会发生什么?

    就在几分钟前 我回答了一个关于 Java中HashMap的最大可能大小 正如我一直读到的那样 HashMap 是一种可增长的数据结构 它的大小仅受 JVM 内存大小的限制 因此我认为它的大小没有硬性限制并做出了相应的回答 这同样适用于 Ha
  • 检查无向图中的奇数循环

    我带着另一个类似的问题回来了 我目前正在开发一个 Java 程序 该程序将检查图是否可 2 色 即它是否不包含奇数循环 奇数长度的循环 整个算法应该在 O V E 时间内运行 V 是图中的所有顶点 E 是图中的所有边 我当前的算法执行深度优
  • 根据 mongodb 中的正则表达式值从文档中查找匹配的项目

    我必须选择匹配的casts item m credits cast 使用正则表达式值从电影集合中获取 电影模态 var mongoose require mongoose var movieSchema new mongoose Schem
  • 如何通过电子邮件发送 HTML5 画布图像

    首先 我尝试使用 Pear 的 Mail mime 来完成此操作 但我无法从共享主机提供商和 cpanel 加载该类 接下来我按照指示这个帖子 https stackoverflow com questions 6150880 email
  • 调用 WebRequest GetSystemWebProxy()

    在 PowerShell 2 0 下 我知道您可以通过执行以下操作来设置您想要使用的代理 而无需知道确切的代理设置 proxy System Net WebRequest GetSystemWebproxy proxy Credential
  • 解析 JSON 以配置 Android 应用程序

    在我的 Android 应用程序中 我必须使用服务器中的 JSON 在应用程序中进行特定调整 我试图实现的目标是读取此 json 并将所有值存储到局部变量中以在应用程序内执行操作 来自服务器的 JSON sett glHdr sm scle
  • 如何获取 .wav 文件格式的 numpy 数组输出

    我是 Python 新手 我正在尝试训练我的音频语音识别模型 我想读取 wav 文件并将该 wav 文件的输出放入 Numpy 数组中 我怎样才能做到这一点 根据 Marco 的评论 您可以查看 Scipy 库 特别是scipy io fr
  • PHP:删除unicode文本中少于3个字符的单词

    我使用这些正则表达式来删除少于 3 个字符的单词 str preg replace b w 1 3 b str and rdu b b 1 2 b str preg replace rdu str 但在 unicode 文本中返回我 有没有
  • 使用 HttpListener 检测客户端断开连接

    我有一个使用 HttpListener 的应用程序 我需要知道客户端何时断开连接 现在我将所有代码都放在 try catch 块中 这非常丑陋 而且不是一个好的做法 我如何知道客户端是否已断开连接 thanks 简短的回答 你不能 如果客户
  • 程序可以读取自己的 elf 部分吗?

    我想使用 ld 的 build id 选项来将构建信息添加到我的二进制文件中 但是 我不确定如何在程序中提供此信息 假设我想编写一个程序 每次发生异常时都会写入回溯 以及一个解析此信息的脚本 该脚本读取程序的符号表并搜索回溯中打印的地址 我