информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Сенкс всем! Пейте пиво пенное, и будет вам Эврика! 8-) 13.11.03 07:47  Число просмотров: 1277
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Короче, пока доехал до дому, прихлебывая пиво (40 мин. на электричке), осознал, что неправильно ставлю задачу.

Во-первых: База должна только храниться в виде одного файла, но никто не запрещает ей при работе создавать сколько угодно временных.

Во-вторых: Это даже желательно, поскольку исходный ЕХЕ-шник должен сохраняться до конца работы, как резервная копия, на случай некорректного завершения.

В-третьих: Нет нужды писать на ходу именно в запущенный ЕХЕ-шник.

Итак, с учетом вышесказанного, база должна представлять собой самораспаковывающийся - самоупаковывающийся архив.

Наиболее простая организация, не использующая никаких недокументированных возможностей и переносимая на любую платформу выглядит так:
Архив раскручивается в набор файлов в числе которых два исполняемых - собственно прога и "мусорщик - архиватор". По окончании работы прога запускает "мусорщик" и завершается, а тот сворачивает все файлы и обновляет архив, после чего стирает все, кроме себя и архива.

Если прога завершается аварийно, "мусор", естественно, остается, но остается и работоспособный архив. Обнаружив "мусор" архив не затирает его, а пытается сначала подключиться к имеющимся файлам данных и, только в случае, если это не удается, его можно специальной опцией заставить их переписать.
<programming>
[Win32] Писать в запущенный EXE-шник? 12.11.03 14:02  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Есть давняя мечта - сотворить СУБД-ху (в виде библиотеки С++), которая хранила бы все данные прямо в исполняемом файле, не требуя никакихдополнительных файлов данных и ДЛЛ-ок. Типа, переписал ЕХЕ-шник на диск и вот тебе вся база с данными - ничего не потеряется и не перепутается.

Тут уже раз этот вопрос подымали и пришли к выводу, что без специального драйвера в ядре - не выйдет. Но может быть все же придумаем какой-нить путь, чтобы без доп. файлов и инсталляхи?
[Win32] Сенкс всем! Пейте пиво пенное, и будет вам Эврика! 8-) 13.11.03 07:47  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Короче, пока доехал до дому, прихлебывая пиво (40 мин. на электричке), осознал, что неправильно ставлю задачу.

Во-первых: База должна только храниться в виде одного файла, но никто не запрещает ей при работе создавать сколько угодно временных.

Во-вторых: Это даже желательно, поскольку исходный ЕХЕ-шник должен сохраняться до конца работы, как резервная копия, на случай некорректного завершения.

В-третьих: Нет нужды писать на ходу именно в запущенный ЕХЕ-шник.

Итак, с учетом вышесказанного, база должна представлять собой самораспаковывающийся - самоупаковывающийся архив.

Наиболее простая организация, не использующая никаких недокументированных возможностей и переносимая на любую платформу выглядит так:
Архив раскручивается в набор файлов в числе которых два исполняемых - собственно прога и "мусорщик - архиватор". По окончании работы прога запускает "мусорщик" и завершается, а тот сворачивает все файлы и обновляет архив, после чего стирает все, кроме себя и архива.

Если прога завершается аварийно, "мусор", естественно, остается, но остается и работоспособный архив. Обнаружив "мусор" архив не затирает его, а пытается сначала подключиться к имеющимся файлам данных и, только в случае, если это не удается, его можно специальной опцией заставить их переписать.
[Win32] В запущенный никак 12.11.03 15:03  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Тут уже раз этот вопрос подымали и пришли к выводу, что без
> специального драйвера в ядре - не выйдет. Но может быть
> все же придумаем какой-нить путь, чтобы без доп. файлов и
> инсталляхи?
Но можно уйти в другой процесс, завершить этот и писать в нужный экзешник. Только уходить надо при помощи CreateRemoteThread в nt или dll-injection (или любым другим способом в 9x), чтоб не быть родителем вновь созданного процесса и не умереть при убийстве оного
[Win32] Писать в запущенный EXE-шник? 12.11.03 14:59  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
В общем, все не так уж удобно, но в качестве затравки может и пойдет...

Запускаем ехешник. Первым движением он копирует себя (может быть, не целиком) в отдельный файл и открывает его на запись. Это БД. По окончании работы эта новая копия получает управление, старый файл удаляется. Все. На диске опять один файл.

Еще раз предупреждаю, это только затравка, наверняка можно сделать лучше.
[Win32] Не лучше все таки освободить этот 12.11.03 15:10  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Еще раз предупреждаю, это только затравка, наверняка можно
> сделать лучше.
И только потом писать. У меня в принципе где-то валяются наработки по внедрению кода в тот же explorer. Но думаю мне их будет откопать труднее, чем поискать в нете :-)))
[C++] [Win32] Писать в запущенный EXE-шник? 12.11.03 14:45  
Автор: Tamas Статус: Member
<"чистая" ссылка>
как я понимаю самы простой способ это
использовать как минимум два фаила
один исполняемый exe a другой другой сама база

> Есть давняя мечта - сотворить СУБД-ху (в виде библиотеки
> С++), которая хранила бы все данные прямо в исполняемом
> файле, не требуя никакихдополнительных файлов данных и
> ДЛЛ-ок. Типа, переписал ЕХЕ-шник на диск и вот тебе вся
> база с данными - ничего не потеряется и не перепутается.
>
> Тут уже раз этот вопрос подымали и пришли к выводу, что без
> специального драйвера в ядре - не выйдет. Но может быть
> все же придумаем какой-нить путь, чтобы без доп. файлов и
> инсталляхи?
[C++] Так не интересно. 12.11.03 14:55  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> как я понимаю самы простой способ это
> использовать как минимум два фаила
> один исполняемый exe a другой другой сама база
Таких СУБД уже есть и много. Тот же Embedded MySQL или SQLite. А вот что можно сделать вопросу корневого поста... Насколько я понимаю, основная проблема в том, что исполняемый файл остается залочен. Или нет?
Хм, в принципе у меня появилась идейка... Отдельным постом напишу. Но она предполагает удвоение занимаемого места во время работы.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach