eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме:
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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


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

Создано: 5 января 2005 22:06 New!
Цитата · Личное сообщение · #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 (наставник)
Статус: Участник
PPC-PROTECT author

Создано: 5 января 2005 22:16 New!
Цитата · Личное сообщение · #2

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

Ранг: 192.3 (ветеран)
Статус: Участник
stoned machine-gunner

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

=/потёр\=

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

Создано: 6 января 2005 04:26 New!
Цитата · Личное сообщение · #4

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

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


Ранг: 260.3 (наставник)
Статус: Участник
PPC-PROTECT author

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

Asterix а где ты видел скомпилированный 500 mb exe'шник :PPP
 eXeL@B —› Крэки, обсуждения —› Работа с memory mapping файлами

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS