gpt4 book ai didi

reverse-engineering - ELF搬迁逆向工程

转载 作者:行者123 更新时间:2023-12-04 16:06:42 24 4
gpt4 key购买 nike

我希望你们能帮助我理解重定位条目和ELF部分数据之间的关系,以及它们是如何处理和生成的。

我有一个古老的不受支持的工具,该工具需要一个ELF文件和一个相关的PLF文件(部分链接的文件,在构建过程的早期生成),并从中构建自定义的可重定位文件,该文件可在具有严格内存限制的平台(PPC)上使用。除包含大约一小段我们要在启动后卸载的初始化代码外,此方法工作正常。因此,我们将所有init代码放入自定义节中以进行卸载,但不幸的是,该工具无法正确处理自定义节,并且rel文件无效。因此,我的任务是制作一个新工具,以正确生成其中包含定制部分的可重定位文件。

我对这个工具和生成rel文件已经走得很远了,但目前陷入了试图找出如何处理节数据和建立重定位条目的困境。等等。我是高级程序员元素,因此所有这些逆向工程业务对我来说都是新的(感谢互联网!)。

我找到了Elf Sharp并将其用作起点。它允许我同时加载ELF和PLF文件并与其内容进行交互。从那里开始,我大部分时候对重定位文件的标头和内容进行了反向工程,但这远非准确。当我比较旧工具的文件版本时,我发现一些节数据已得到修复,而我的文件使用的节数据直接来自PLF文件,并且很普通。我的意思是我复制的截面数据包含大量的“ 48 00 00 01”,但是这些都是通过旧工具以某种方式修复的。这些字节的意义是什么?对它们做了什么?我还必须生成重定位条目,但不确定如何继续。

我发现了一些在线处理小精灵重定位的示例,并且在我的工具中也有类似的东西正在运行,但是我仍然不清楚我到底应该做什么。对于所有重定位类型及其公式(第4.12.5章here),我都有很好的资源,但是我仍然不确定我应该使用哪些偏移量,节信息等。

TL; DR


您能否帮助我直观地了解这些重定位条目的实际情况,如何生成和处理这些重定位条目以及在执行程序时如何使用它们?
对节数据中的所有“ 48 00 00 01”字都做了什么?我假设已经使用适当的符号解决了这些问题,但是这是怎么做的呢?使用.rela信息?
另外,我不确定何时应该使用PLF内容以及何时应该使用ELF内容。我认为我只需要ELF即可获取加载地址和分段信息。
当我生成重定位修正程序(在PPC上)时,如何准确地评估重定位类型方程式?在这一点上,我在网上提到的示例并不直观。我对偏移量感到困惑-您从Elf32_Rela获得了一个偏移量,但是您修改了那个偏移量吗?用来记录修正结果的偏移量是多少?加数到底是什么?我还没有在网上找到任何能启发人的东西。
一些(实际上是大多数)重定位修复程序指向几个.debug_ *节或.bss之一。我应该跳过.debug修复程序还是重要的? .bss是NoBits部分,那么我该如何处理?当涉及到实际生成重定位条目时,我了解它们的构造方式,但是创建条目的真正原因是谁?我的意思是,我已经准备好构建它,但是我不知道从哪里开始-我是否在某个地方或某些地方迭代某些数据?
还有其他我想问但还没有意识到的问题吗? ;)


感谢您阅读我的冗长的问题!

最佳答案

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

关于reverse-engineering - ELF搬迁逆向工程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16577473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com