Сейчас на форуме: (+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 файлами |