编辑 ELF 文件中的变量值
Edit variable values in ELF file?
我需要在编译的ELF文件中更改几个变量。为了清楚地解释这一点,我将使用一个简单的 C 结构作为示例。
单个源文件从 MyFile.c 编译并链接到 (@ 0x1000) 到 MyFile.elf 中:
typedef struct {
uint32_t SerialNumber; /* Increments for every time it's programmed */
uint32_t PartNumber; /* Always the same */
char ProdDateTime[32]; /* "YYYY-MM-DD HH:MM:SS" date/time when programmed */
uint32_t CalcCrc32; /* Checksum of the above data */
} MyData_T;
const MyData_T MyData = {
/* SerialNumber */ 0x11111111,
/* PartNumber */ 0x12345678,
/* ProdDateTime[32] */ "2013-11-10 12:49:30",
/* CalcCrc32 */ 0xC0CAC01A
};
现在我需要一个"控制台工具"(无需编译):
- 将新的序列号写入0x1000
- 将新字符串写入0x1008
- 在0x1028处更新校验和。
我无法找到甚至执行第一 (1) 项任务的工具(objcopy 等)。似乎这应该是一个相当常见的场景?我现在已经编写了自己的工具,但更喜欢开源工具或类似工具。
任何建议/想法/评论/批评都受到高度赞赏:D谢谢!!
"gdb --write/your/application/binary"应该能够更改初始化数据的值并将其写回可执行文件。
添加"-batch"和"-x command_file",你应该能够让它做你想做的事情。
QNX 有一个名为"spatch"的内置工具,可以做到这一点。使用 gdb
或十六进制编辑器的其他建议同样有效。
虽然修补二进制代码是完全可能的,但听起来你做错了:-)。也许这些值更适合存储在与二进制文件一起分发的某个数据文件中,并在某种构造函数期间读入?除非你有一些令人信服的理由要求它在二进制文件中,否则我会认真研究设计,看看你是否真的需要这样做。
如果你给出的答案是"是的,我真的需要这样做",那就太好了。您建议了几种非常有效的方法来完成此操作。祝你好运。
相关文章:
- 使用变量值作为 PlaySound 中的路径
- 通过指针偏移量访问结构变量值
- 变量值在 C++ 中的 glutIdleFunc() 中未递增
- 更新 #ifdef 中的现有变量值?
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 通过 Rcpp 和 bit64 R 包将最大的int64_t变量值从 C++ 传递到 R
- 如何使用 IRBuilder 更新 LLVM IR 中的全局变量值?
- 更改已在运行的程序的变量值
- 在 Xcode 中使用后对外部变量值进行初始化
- C++整数变量值
- 变量值,在三元运算符之后
- 如何获得对不同类的引用,以便从所述类内部获得变量值
- Java应用程序的JNI-c++变量值
- 如何固定从传感器获得的变量值
- 字符串和输入文件,从包含字符串的 txt 文件中分配多个变量值
- ROS启动文件以设置变量值
- 编辑 ELF 文件中的变量值
- 如何在Visual Studio 2015 c++项目调试期间将变量值更改记录到CSV文件中
- c++更改不同文件中的全局变量值
- C++使用config类从txt文件中设置变量值