Сейчас на форуме: (+8 невидимых)

 eXeL@B —› Крэки, обсуждения —› Работа с memory mapping файлами
Посл.ответ Сообщение


Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 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);
                   }
                }
           }
        }
     }
}





Ранг: 260.3 (наставник), 2thx
Активность: 0.120
Статус: Участник
PPC-PROTECT author

Создано: 05 января 2005 22:16
· Личное сообщение · #2

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

-----
Пиво, сиськи, транс




Ранг: 192.3 (ветеран), 18thx
Активность: 0.120
Статус: Участник
stoned machine-gunner

Создано: 06 января 2005 00:53 · Поправил: gloom
· Личное сообщение · #3

=/потёр\=

-----
once you have tried it, you will never want anything else




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 06 января 2005 04:26
· Личное сообщение · #4

-= ALEX =-
> млин нафига ваще заморачиваться с этими Map'ами, прочто создал бы буфер длиной с длину файла

:lol:
Открой своим способом 500Mb файл.




Ранг: 260.3 (наставник), 2thx
Активность: 0.120
Статус: Участник
PPC-PROTECT author

Создано: 06 января 2005 06:59
· Личное сообщение · #5

Asterix а где ты видел скомпилированный 500 mb exe'шник :PPP

-----
Пиво, сиськи, транс



 eXeL@B —› Крэки, обсуждения —› Работа с memory mapping файлами
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати