问题标签 [elf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 分析 MIPS 二进制文件:是否有用于解析二进制数据的 Python 库?
我正在开发一个实用程序,该实用程序需要将十六进制地址解析为二进制文件中的符号函数名称和源代码行号。该实用程序将在 x86 上的 Linux 上运行,尽管它分析的二进制文件将用于基于 MIPS 的嵌入式系统。MIPS 二进制文件是 ELF 格式,使用 DWARF 作为符号调试信息。
我目前正计划 fork objdump,传入一个十六进制地址列表并解析输出以获取函数名称和源代码行号。我已经编译了一个支持 MIPS 二进制文件的 objdump,它正在工作。
我希望有一个包允许我从 Python 代码中本地查找内容,而无需分叉另一个进程。我在 python.org 上找不到任何提及 libdwarf、libelf 或 libbfd,在 dwarfstd.org 上也找不到任何提及 python。
某处是否有合适的模块可用?
encoding - ELF 中的 NEEDED 条目是否有标准编码?
我正在尝试使我的一些代码对非纯 ascii 系统更加友好,并且想知道是否有特定的字符编码用于 ELF 二进制文件中的 NEEDED 条目,或者它是否相当不标准并且基于创建系统的文件系统编码(甚至直接传递给创建二进制文件的字节)(如果是这样,二进制文件中是否有任何地方指定编码?假设我认为当前的系统编码对我的使用效果不佳) ,非ascii名称几乎被禁止还是其他什么?
linux - 将正在运行的 Linux 进程中的内存地址范围转换为目标文件中的符号?
这是文件/proc/self/smaps的片段:
它表明该进程(自身)链接到/lib/ld-2.8.so和两个(许多)字节范围映射到内存中。
第一个 88kb 范围(22 个 4kb 页面)是shared和clean,也就是说它没有被写入。这可能是代码。
第二个 4kb 范围(单页)没有被共享并且它是脏的——进程已经写入它,因为它是从磁盘上的文件映射的内存。这大概就是数据了。
但那段记忆里到底是什么?
如何将内存范围00b14000-00b15000转换为有用的信息,例如声明大型静态结构的文件的行号?
该技术需要考虑预链接和地址空间随机化,例如来自execshield,以及单独的调试符号。
(其动机是识别那些也会产生脏内存并修复它们的流行库,例如通过声明结构 const)。
linux - GCC/ELF - 我的符号从何而来?
有一个可执行文件动态链接到共享对象的数量。我如何确定某个符号(导入可执行文件)属于其中的哪一个?
如果有不止一种可能性,我可以模拟 ld 并查看它是从哪里拍摄的吗?
object - ELF 和 PE 的基本链接过程如何工作
我一直对链接器的工作方式感到困惑,而且这是一个很难搜索的主题。
为了演示我的问题并为答案提供框架,我将写下到目前为止我所知道的(或认为我知道的)。我可能是非常错误的。:)
首先,每个 .cpp 文件都被构建到一个中间文件中(我相信 .o 代表 Posix/ELF 和 .obj 代表 Win/PE)。该中间文件包含由它构建的 .cpp 定义的所有符号,并说明了需要正确解析哪些外部链接。作为对此的扩展,Posix 系统允许您将 .o 文件合并到 .a 文件中(这似乎除了合并之外没有任何作用?这是什么命令?)。.lib 是 Posix .a 文件的 Win/PE 等价物吗?
接下来,将中间文件链接在一起,解决外部依赖关系,并获得可执行文件。我错过了任何步骤吗?
谢谢!
assembly - ELF 格式的可重定位符号(汇编语言)
我们正在为客户端架构开发 GNU 汇编程序的一个端口。现在面临的问题是:
如果一条指令的立即操作数是一个涉及多个可重定位符号的表达式,它在输出文件中如何处理elf格式。这种情况下会产生什么搬迁信息?
例如:
其中 label1 和 label2 定义在可重定位节中,它们可能是相同的节,也可能是不同的可重定位节。
linux - 代码注入 - Solaris & Linux
我有一个由第三方创建的可执行模块。我想将我的代码(一种在单独线程中运行的看门狗)“注入”到这个进程中。
到目前为止,有两种可能的方法 - 一种是将我的代码作为可执行文件运行并在其之上动态加载一个过程(似乎非常困难和棘手)或使我的代码成为共享对象,通过 LD_PRELOAD 加载它并从一些静态变量构造函数。
有没有更方便的方法来做到这一点?我的操作系统是 Linux x86 和 Solaris-SPARC。
更新:如果可能的话,我不想修补这个过程,而是动态加载我的代码。
linux - 将共享库打包到精灵中
是否有一个实用程序可以将精灵需要的所有SO 转换为静态然后将精灵转换为免费的 SO?
linux - 写保护的虚拟页面,catch write
是否存在一种方法可以捕获写入受写保护的页面?
我计划做一个类似自我的对象系统,您可以在其中复制对象以实例化它。(因为与其他的相比,这听起来简单而紧凑)显然,为此目的创建的对象应该以某种方式进行写保护。我已经看到有一种方法可以在 ELF 中的程序头中标记写保护的内容。(RE、RWE、RW 标志)
这是否提供写保护?我记得它应该引发一个段错误,这是真的吗?如何将写入捕获到写保护页面。这是实现我想要的东西的好方法吗?还有更好的方法吗?
c++ - C ++ ctor问题(linux)
环境:linux,通过g++从几个C++文件创建的用户空间应用程序(结果是一个ELF)
遍历构造函数列表时出现问题(SIGSEGV)
(注意:通过此列表调用的代码是每个类的一种系统初始化, 而不是我编写的构造函数代码)
- 当我正确理解每个编译单元(从 .cpp 创建的每个 .o)都会在
当我通过程序通过 GDB 时,问题(SIGSEGV)不存在
为了调试这个我正在寻找一种在调用之前添加自己的代码代码的方法
有什么提示吗?
谢谢,
乌韦