![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Низкоуровневый доступ к файлу [D6, WinXP]
TGX © (2006-06-10 17:44:00)Здрвсте! Мне надо в файле (dll библиотека) изменить программно по адресу 0x53ea байт с 0x74 на 0xEB. Как это сделать?
TGX (2006-06-12 21:18:00) [21]мне патч надо сделать, т.е. что работала нормально прога нужно в библиотеке изменить пару байт! Ну вот хочетьсяч написать прогу! А как?
Ihor Osov'yak (2006-06-11 01:58:00) [22]эта....
действительно ли в файле, или уже в ВАП некоего процесса, который подгрузил эту длл?
и если в файле, то каково "состояние" этого файла - файл "свободен" или "залочен" по причине подгруки его в ВАП некоего процесса?
и вообще.. Зачем такое странное желание?
Loginov Dmitry (2006-06-10 18:18:00) [23]Проверь следующие варианты:
1)
with TFileStream.Create(YourFileName, fmOpenReadWrite) do
begin
Seek($53, 0);
B := $EB; // B - Byte
Write(B, SizeOf(B));
Free;
end;
2)
with TMemoryStream.Create do
begin
LoadFromFile(YourFileName);
if PByteArray(Memory)[$53] = $74 then
if PByteArray(Memory)[$53] = $EB;
SaveToFile(YourFileName);
end;
3)
begin
HFile := FileOpen(YourFileName, fmOpenReadWrite);
HMap := CreateFileMapping(HFile, nil, PAGE_READWRITE, 0, 0, nil);
Bytes := MapViewOfFile(HMap, FILE_MAP_WRITE, 0, 0, 0);
if Bytes = nil then
raise Exception.Create('Ошибка открытия файла!');
if Bytes[$53] = $74 then Bytes[$53] := $EB;
UnmapViewOfFile(Bytes);
CloseHandle(HMap);
CloseHandle(HFile);
end;
Rial (2006-06-10 18:11:00) [24]А в чем тут заключается "низкоуровневость" доступа ?
Насколько я понял из вопрос, здесь можно обойтись
обычными
FileOpen
FileSeek
FileWrite
FileClose
А реально низкоуровневый доступ в защищенном режиме не
прокактит. Не любит видна intr 21h.
Возможно, я что то не так понял.