c - 十六进制替换为 ELF 二进制文件中更长的字符串?

标签 c linux hex

我可以替换 ELF 二进制文件中的字符串,如果它的长度更小或相等,但用更长的字符串替换时会发生段错误。为什么会出现段错误?还必须更改哪些其他内容才能正常工作?

最佳答案

I can replace a string inside an ELF binary if it is less than or equal length

根据您谈论的是完全链接的二进制文件(ET_EXECET_DYN)还是目标文件(ET_REL),您的声明以上可能正确也可能不正确。

您不能安全地编辑完全链接二进制文件的 .dynstr 部分中的字符串,因为这样做会破坏动态符号哈希表。

but a segfault happens when replacing with a longer string.

你期待什么? ELF 二进制文件包含结构化数据。如果您破坏了该数据的结构,您应该会遇到各种问题。你很幸运你遇到了段错误。情况可能会更糟(例如,它可能会悄无声息地破坏您写入磁盘的数据)。

关于c - 十六进制替换为 ELF 二进制文件中更长的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10964795/

相关文章:

从 ImageMagick 安装 Mac 操作系统时 C 编译 fatal error 'file not found'

c - System V 共享内存的段错误

python - C 或 Python 用于创建套接字连接的性能和可伸缩性?

linux - 从python获取IP地址

python - python - 如何在Python中没有额外的 '0x'前导字符和 'L'尾随字符的情况下将整数转换为十六进制?

css - 将 8 位十六进制颜色转换为 rgba 颜色?

c++ - 为什么这个 C++ 代码可以编译?它有什么作用?

linux - 在将服务器安装到数据中心之前如何验证服务器的硬件?

java - g++: 找不到文件

css - 哪个更快 : hex color codes or color names?