| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Запись параметров в exe |
| Автор: ecspertiza 23.6.2010, 12:17 |
| Есть задача, сохранять некоторые параметры, точнее даже один параметр, но сохранять его нужно непосредственно в самом исполняемом файле, как это можно реализовать или где об этом можно почитать? использую компилятор MinGW. |
| Автор: EvilsInterrupt 23.6.2010, 12:34 |
| ecspertiza, А куда тебе в него нужно писать? Может в оверлей? |
| Автор: ecspertiza 23.6.2010, 12:38 |
| Если честно я в этом вопросе не особо осведомлен, знаю что можно хранить небольшие значения, непосредственно в самом исполняемом файле, которое при загрузке можно вытащить и при желании изменить. Если бы меня в этом вопросе хоть как то просветили был бы признателен, ибо у меня что то ничего путевого найти не получается. |
| Автор: EvilsInterrupt 23.6.2010, 12:45 |
| ecspertiza, Просто задачи бывают разными! Бывает поменять логику работы ПО,т.е. поменять бинарный код и тут уже совсем другое! А бывает просто сохранить конфигурацию, т.к. не хочется таскать файл-базуданных и тут уже лучше всего оверлей программы. Оверлеем принято считать все что не попадает в виртуальное пространство запущенного приложения. На начальном этапе можете упростить себе понимание оверлея до следующего: OverlayRaw = RvaToRaw( ALLIGN_UP ( PE->OptionalHeader.SizeOfImage, PE->OptionalHeader.SectionAllignemnt ) ); OverlayLen = FileLength - OverlayRaw; где: PE - это объект IMAGE_NT_HEADERS32 RvaToRaw - это функция конвертирования смещения используемого для адресации в виртуальном адресном пространстве в смещение используемое для адресации в файлвом пространстве Рекомендуется сходить на rsdn.ru, wasm.ru на предмет устройства PE-формата |
| Автор: Abyx 23.6.2010, 12:53 |
| EvilsInterrupt, ты бы лучше начал с того, что сделать это во время выполнения этого .exe - весьма сложно |
| Автор: EvilsInterrupt 23.6.2010, 13:04 |
| ecspertiza, Те функции что привел, поясняют чего тебе надо сделать, их можно написать и самому! Более того, каждый работающий с PE программно пишет каждый свою реализацию! И правильно! Потому что надо понимать что делаешь, это не простой формат |
| Автор: Abyx 23.6.2010, 13:19 |
| если надо писать при инсталляции - то проще писать в заголовок, например в стаб, по смещениям в файле (и в памяти) в интервале [0x4; 0x3C) |
| Автор: Alexeis 23.6.2010, 13:22 |
| Это делать плохо по нескольким причинам. 1) Теряется поддержка различных пользователей. 2) Виста+ запрещает записывать, что-то в папку Program Files 3) Антивирус может принять за вирусоподобное действие. |
| Автор: Abyx 23.6.2010, 14:11 | ||
1) если сохраняемые параметры одинаковы для всех юзеров - все ОК 2) в скрипте установки - не запрещает Добавлено через 42 секунды хотя при установке проще писать в реестр %) |
| Автор: ecspertiza 23.6.2010, 14:27 |
| Раз так все непросто, может подскажете как лучше поступить, нужно разрешить пользователю использовать программу только 10 дней, я думал записать в исполняемый файл дату при инсталляции , потом при запуске сверять, и если что запрещать запускать, но раз все не так просто может есть лучший вариант, в реестр писать не хочется, ибо значение слишком просто поправить. |
| Автор: borisbn 23.6.2010, 14:32 |
Интересно, а функции http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx#_win32_Updating_Resources тоже запрещены ? Не "сырой" PE-формат а именно FindResource, UpdateResource и т.п. |
| Автор: Abyx 23.6.2010, 14:48 |
| borisbn, на запись - запрещены |
| Автор: GremlinProg 23.6.2010, 14:50 |
http://msdn.microsoft.com/ru-ru/library/9sh96ycy(VS.90).aspx думаю, еще лучше не придумать |
| Автор: W4FhLF 23.6.2010, 15:01 |
| GremlinProg, что-то там везде .NET. К обычным то файлам можно применить? |
| Автор: GremlinProg 23.6.2010, 15:12 |
| да можно, конечно, подпись - часть PE только вот я не уверен на счет того, кодируется ли непосредственно содержимое образа этим ключом или кодируется только информация о поставщике с полным кодированием было бы очень удобно Добавлено через 55 секунд подписал на 10 дней и забыл ) |
| Автор: xvr 23.6.2010, 16:16 | ||||
Пользователь пользуется программой 10 дней, потом сносит ее и ставит заново - еще 10 дней. И т.д.
Самый правильный способ будет сохранить привязку при установке где то на компьютере, желательно прямо в его потрохах Или хотя бы через CryptoAPI в приватном хранилище ключей. Снять привязку можно будет только переустановкой ОС |
| Автор: EvilsInterrupt 23.6.2010, 17:31 |
| >>Пользователь пользуется программой 10 дней, потом сносит ее и ставит заново - еще 10 дней. И т.д. Зачем сносить? Один лодырь с перехватом и возвратом "правильной" таймстамп ;) |