![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
подскажите люди добрые, у меня такой вопрос:
есть файл 'c:/programm.exe' размер 120 kb (не суть важно) 84-й байт в этом файле имеет значение 'R' (допустим) я не сомневаюсь, что это возможно, подскажите как изменить значение этого байта на 'd' ? причем это надо сделать на низком уровне, путем редактирования самого харда... ![]() а не через reset(file); (программирую на delphi) как написать вставку ассемблера в код на делфи? я не очень то шарю по ассемблеру, подскажите? и еще такой вопрос: я надеюсь ассемблеру насрать, на то что 'c:/programm.exe' используется? дело в том что вставка на ассемблере и будет вставлена в эту программу, а 84-й байт будет принадлежать куску ресурса, зашитого в прогу, но который никак не используется, т.е. его изменение не повлияет на ход программы (я ведь прав?) т.е. программа будет изменять сама себя, на низком уровне =) примерно представляя принцип работы харда и файловой системы, думаю это будет выглядеть так: программа как-то обращается к MFT и узнает как записан 'c:/programm.exe' на хард. далее, зная порядковый номер нужного байта программа вычисляет ячейку харда, в которой записан этот байт и изменяет значение ячейки на нужное. вот только не знаю как это на практике реализовать... Последний раз редактировалось xrob; 20.01.2011 в 22:23. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]()
Ну всего то навсего надо написать свой модуль для работы с NTFS, FAT32, ну и на всякий случай для FAT16 (а вдруг с флешки запустят?)
![]()
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,828
|
![]()
+драйвер ядра, а то мозгам от системы получите
+... |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 18.10.2010
Сообщений: 419
|
![]()
создал консольное приложение с кодом
writeln('bugoga'); открыл файл с прогой в WinHex, нашел 'bugoga' изменил! =) сохранил, запускаю прогу - работает! и 'bugoga' изменился! =) но! =( при запущеной проге WinHex не смог сохранить изменения! =( видать не очень то это низкоуровневое программирование?... у меня вопрос. как послать винду н***й? а то жить мешает... хотя с другой сороны, может это WinHex шибко самостоятельный? проверяет используется файл или нет? Последний раз редактировалось xrob; 20.01.2011 в 23:16. |
![]() |
![]() |
![]() |
#5 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Цитата:
Цитата:
и вообще запущенное приложение нет смысла менять, ибо оно в оперативке находится, так что до перезапуска изменений не заметите. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|||
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]()
Драйвер имхо не обязательно. Винда позволяет читать/писать сектора прямо на диск. Единственное в семере неплохо иметь админские права (хотя 99,9% и так сидит под админом, поэтому проблем возникнуть не должно, бггг). И так же в семере для прямой записи секторов применять известный трюк с затиркой MBR нулями и последующим пере-открытием диска. Все просто, бггг.
Афтору не советую писать все процедуры для работы с NTFS на асме, ибо можно запросто поломать мозг при формировании бинарного дерева в MFT. Лучше на чем нить более высоком. FAT32/FAT16 - можно и на асме, хотя никакой выгоды в данном случае нет. Но если прет на асме - то можно, бггг.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
![]()
3 метода работы с занятыми файлами, сайт васм, метод третий-считывание файла напрямую с секторов диска. Используются апи-функции предназначенные для дефрагментации, которые разумеется есть во всех версиях этих ваших винд. С помощью оных функций получают таблицу размещения файла по секторам. Далее с помощью КреатФайл открывается диск на запись, с помощью СетПойнтер перемещается указатель на нужные сектора, смещения, вычисляете нужный сектор, смещение и напрямую туда и делаете ВрайтФайл. Можно сделать хоть на бейсике, да, я гарантирую это
![]()
Нет, ну правда..
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 09.02.2011
Сообщений: 12
|
![]()
Как я понял автор пытается накодить самомодифицирующийся код?? это делается иначе. при выполнении программа находится в памяти, и если в своем сегменте то модифицировать ее не составляет труда.
...месяц в небе, год в книге, а день такой у нас, какой и у вас, и за сим...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание и редактирование текстового файла | sasha0123 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 04.12.2010 00:00 |
Редактирование файла ресурсов | Alex2009 | Общие вопросы Delphi | 4 | 02.07.2009 01:10 |
Редактирование файла | Лубышев | Помощь студентам | 4 | 04.03.2009 12:18 |
Редактирование файла в цикле | Var17 | Общие вопросы Delphi | 1 | 13.12.2007 14:51 |
редактирование бмп файла | kyuzo | Мультимедиа в Delphi | 7 | 01.08.2007 14:32 |