Мне нужно изменить пару переменных в скомпилированном файле ELF. Попытка объяснить это ясно, я буду использовать простую C-структуру в качестве примера.Изменить значения переменных в файле ELF?
Исходный файл одного скомпилирован и связан (@ 0x1000) в MyFile.elf из 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
};
Теперь мне нужна "консольное-инструмент", который (без компиляции):
- Записывает новый серийный номер 0x1000
- Пишет новую строку 0x1008
- Обновляет контрольной суммы в 0x1028.
Я не смог найти инструмент (objcopy и т. Д.?), Который даже выполняет первую задачу (1). Кажется, это должен быть довольно распространенный сценарий? На данный момент я написал свой собственный инструмент, но предпочел бы использовать инструмент с открытым исходным кодом или аналогичный.
Любые предложения/идеи/комментарии/критические замечания приветствуются: D Спасибо вам!
У вас есть 'adb' (отладчик языка ассемблера, а не мотив android)? В тот же день мы сделали бы что-то вроде «echo» 0x1000? W 0x11111111 »| adb -w MyFile.elf' –
Я не пробовал/не слышал о adb. Я не думаю, что у меня есть доступ к нему для моего проекта, но я буду смотреть на него независимо. Благодаря! – barnie82
Необходимость корректировать скомпилированную двоичную систему не так распространена, как вы думаете. Как бы «универсальный» инструмент знал, где найти значения для изменения? В этом случае, если вам нужно сделать это на регулярной основе (1), писать пользовательскую утилиту - именно то, что я сделал бы. (1) Для одноразовых я просто использовал шестнадцатеричный редактор. – usr2564301