问题
I need to change a couple of variables in a compiled ELF file. Trying to explain this clearly I'll use a simple C struct as an example.
The single source file is compiled and linked (@ 0x1000) into MyFile.elf from MyFile.c:
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
};
Now I need a "console-tool" that (without compiling):
- Writes a new serial number to 0x1000
- Writes a new string to 0x1008
- Updates the checksum at 0x1028.
I have not been able to find a tool (objcopy etc?) that even does the first (1) task. Seems this should be a rather common scenario? I've written my own tool for now but would prefer a open source tool or similar.
Any suggestions / ideas / comments / criticisms are highly appreciated :D Thanks you!!
回答1:
"gdb --write /your/application/binary" should be able to change value of initialized data and write it back to the executable.
Add "-batch" and "-x command_file" and you should be able to get it to do what you want.
回答2:
QNX has a built-in tool called "spatch" that allows you to do exactly this. The other suggestions to use gdb
or a hex editor are equally valid.
While patching binary code is totally possible, it sounds like you're doing it wrong :-). Perhaps these values would be better suited to be stored in some data file distributed with the binary and read in during a constructor of some sort? Unless you have some compelling reason to require this to be in the binary, I would seriously look at the design and see if you really need to do this.
If the answer you come up with is "yes, I really need to do this," then great. You've got a couple very valid methods suggested for accomplishing this. Good luck.
来源:https://stackoverflow.com/questions/19895035/edit-variable-values-in-elf-file