| Сейчас на форуме: (+8 невидимых) |
| eXeL@B —› Крэки, обсуждения —› Работа с memory mapping файлами |
| Посл.ответ | Сообщение |
|
|
Создано: 05 января 2005 22:06 · Личное сообщение · #1 Кто еще помнит я собрался писать PE Editor совй на C++ Builder, вот начальный код, правильно у меня все, на мой взгяд да, что можно в нем оптимизировать? Может как-то конструкции переделать и т.д. И еще не очень пойму как теперь байты из памяти считывать какой командой ( Распечатал кучу туторов, буду седня читать в метро, надеюсь более менее разбирусь.
void __fastcall TPEMain::Select1Click(TObject *) // File|Select...
{
AnsiString ShortPEName; // короткое имя файла без указания пути
AnsiString AttFile; // строка статуса атрибута read-only
long AttPEFile; // атрибуты файла
int YesNo; // идентификатор кнопки, на которую нажал в MessageBox
bool RO; // установлен или сброшен атрибут read-only
char *strNameFile; // указатель на адрес строки, в которой хранится имя файла
HANDLE hFile; // хэндл открытого файла
HANDLE hMap; // хэндл файлового отображения
void *BaseAddress; // базовый адрес памяти
if (PEFileOpen->Execute()) // Если файл выбран, то
{
FilePEName=PEFileOpen->FileName;
ShortPEName=ExtractFileName(FilePEName);
PEMain->Caption="PE Editor [ private version 0.01 ]";
strNameFile=FilePEName.c_str();
AttPEFile=GetFileAttributes(strNameFile);
// проверка атрибута read-only
if (AttPEFile&FILE_ATTRIBUTE_READONLY)
{
YesNo=MessageBox(PEMain->Handle,"This file has attribute 'Read-Only'.\n Do you want remove it?", "PE Editor - Question",MB_YESNO);
if (YesNo==IDNO)
{
AttFile=" - [Read-Only]";
RO=True;
}
else
{
AttPEFile=AttPEFile&(~FILE_ATTRIBUTE_READONLY);
SetFileAttributes(strNameFile,AttPEFile);
AttFile="";
RO=False;
}
}
PEMain->Caption=PEMain->Caption+" - ["+ShortPEName+"]"+AttFile; // вывод имени файла в заголовке окна
staInfo->SimpleText=FilePEName+AttFile; // вывод пути файла в строке состояния
if (RO==True)
{
// открытие файла, если он имеет атрибут read-only
hFile=CreateFile(strNameFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EX ISTING,0,0);
if (hFile==INVALID_HANDLE_VALUE)
{
MessageBox(PEMain->Handle,"File cannot be open", "PE Editor Error",MB_OK);
CloseHandle(hFile);
}
else
{
hMap=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
if (hMap==NULL)
{
MessageBox(PEMain->Handle,"Mapping file cannot be create", "PE Editor Error",MB_OK);
CloseHandle(hMap);
CloseHandle(hFile);
}
else
{
BaseAddress=MapViewOfFileEx(hMap,FILE_MAP_READ,0,0,0,0);
if (BaseAddress==NULL)
{
MessageBox(PEMain->Handle,"Mapping file cannot be create", "PE Editor Error",MB_OK);
CloseHandle(hMap);
CloseHandle(hFile);
}
}
}
}
}
}
![]() |
|
|
Создано: 05 января 2005 22:16 · Личное сообщение · #2 млин нафига ваще заморачиваться с этими Map'ами, прочто создал бы буфер длиной с длину файла, прочитал бы в этот буфер весь файла, дальше полчаешь указатель на выделенную память и работаешь с ней ... Насчет твоего кода, та вроде все нормально, стандартный вызов АПИ, че там оптимизировать я бы убрал все эти проверки, вот те и оптимизация =)
----- Пиво, сиськи, транс ![]() |
|
|
Создано: 06 января 2005 00:53 · Поправил: gloom · Личное сообщение · #3 |
|
|
Создано: 06 января 2005 04:26 · Личное сообщение · #4 |
|
|
Создано: 06 января 2005 06:59 · Личное сообщение · #5 |
| eXeL@B —› Крэки, обсуждения —› Работа с memory mapping файлами |


( Распечатал кучу туторов, буду седня читать в метро, надеюсь более менее разбирусь.


нафига ваще заморачиваться с этими Map'ами, прочто создал бы буфер длиной с длину файла, прочитал бы в этот буфер весь файла, дальше полчаешь указатель на выделенную память и работаешь с ней ... Насчет твоего кода, та вроде все нормально, стандартный вызов АПИ, че там оптимизировать 

Для печати