首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >精灵搬迁逆向工程

精灵搬迁逆向工程
EN

Stack Overflow用户
提问于 2013-05-16 01:09:39
回答 1查看 1.5K关注 0票数 3

我希望你们能帮助我理解迁移条目和ELF部分数据是如何相关的,以及它们是如何被处理和生成的。

我有一个古老的不受支持的工具,它接受一个ELF文件和一个相关的PLF文件(部分链接文件,在构建过程的早期生成),并从它构建一个自定义的可重定位文件,该文件使用在具有严格内存约束的平台(PPC)上。这很好,只是它包含了我们希望在启动后卸载的一个meg初始化代码。因此,我们将所有init代码放在一个自定义节中,以便卸载它,但不幸的是,该工具未能正确处理自定义部分,并且rel文件无效。因此,我的任务是制作一个新工具,正确地生成这个带有自定义部分的可重定位文件。

我在这个工具和生成rel文件方面已经做了相当多的工作,但是目前我正试图弄清楚如何处理节数据和构建重新定位条目等等。我是一个高级程序员,通过这个任务我是一个高级程序员,所以所有的逆向工程业务对我来说都是新的(谢天谢地互联网!)

我找到了精灵夏普,并以此为起点。它允许我加载ELF和PLF文件,并与它们的内容进行交互。从这里开始,我已经反向设计了重新定位文件的大部分头和内容,但它还远远不够准确。当我将旧工具的文件版本与我的文件进行比较时,我发现一些节数据已经被修复,而我的文件直接使用PLF文件中的节数据,并且是简单的。我的意思是,我复制的部分数据包含了一吨"48,0001“,但这些数据都是由旧工具以某种方式修复的。这些字节的意义是什么,对它们做了什么?我也必须生成重新安置条目,但我不知道如何进行。

我在网上发现了一些处理精灵迁移的例子,我的工具里也有类似的东西,但是我仍然不清楚我到底该做什么。对于所有的重新定位类型和它们的公式,我都有一个很好的资源(第4.12.5章这里),但是我仍然不确定我应该使用什么偏移量、节信息等等。

TL;DR

  • 你能帮我想象一下这些重新定位条目到底发生了什么,这些条目是如何生成和处理的,以及在程序执行时是如何使用的吗?
  • 数据部分中的“48000001”单词都做了些什么?我假设他们已经用适当的符号解决了,但这是怎么做到的呢?使用.rela信息?
  • 另外,我不确定什么时候应该使用PLF内容,什么时候应该使用ELF内容。我想我只需要ELF来获取负载地址和段信息。
  • 当我生成重新定位补丁(在PPC上)时,如何准确地评估重新定位类型方程?我在网上提到的例子在这一点上是不直观的。我对补偿感到困惑--你从Elf32_Rela那里得到了一个,但这是你修改的那个吗?用于记录修复结果的偏移量是什么?加法到底是什么?我还没有在网上发现任何有启发性的东西。
  • 一些(实际上大部分)重新定位补丁指向几个.debug_*节或.bss中的一个。我应该跳过.debug修复吗?或者那些是重要的?.bss是一个NoBits部分,那么如何处理呢?当涉及到实际生成重新定位条目时,我理解它们是如何构造的,但是谁/什么才是实际生成这些条目的幕后推手呢?我的意思是,我已经准备好构建它了,但是我不知道从哪里开始--我是在某个地方迭代某些数据还是什么??
  • 还有其他我应该问但还没有意识到的问题吗?)

谢谢你读到我冗长的问题!

EN

回答 1

Stack Overflow用户

发布于 2017-04-12 10:53:30

也许objconv工具能帮上忙。它可以将x86 ELF文件中的重新定位类型显示为转储或反汇编。http://www.agner.org/optimize/#objconv

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16577473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档