Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Отображение константы для PE файла   Найти похожие ветки 

 
xShadow ©   (2004-02-27 15:26) [0]

Возможно корявый сабж но суть такая:
Как по виртульному адресу типизированной константы вида
const STI: String[6] = "123321" отыскать её смещение в EXE файле.
Видел как это сделать для DOS EXE а как для PE 32.
Это вообще возможно?


 
Игорь Шевченко ©   (2004-02-27 15:33) [1]

MMF + поиск в нем


 
xShadow ©   (2004-02-27 15:37) [2]

Я где можно почитать про это дело MMF


 
Игорь Шевченко ©   (2004-02-27 15:44) [3]

CreateFileMapping, MapViewOfFile прочитать можно в F1


 
xShadow ©   (2004-03-02 14:57) [4]

MMF конечно весчь но разбираться не охото.
Реализовал через чтение заголовков EXE файла.
Кому интересно могу выложить.


 
Digitman ©   (2004-03-02 16:29) [5]


> xShadow ©   (02.03.04 14:57) [4]


любопытно, при чем здесь заголовки какие-то


 
xShadow ©   (2004-03-02 16:51) [6]

PE файл состоит из секций с указанием виртуального адреса, по нему то и можно сориентироваться.
Function GetVAtoRVA( const Dir: Dirs;
                    const NtHdr: TImageNtHeaders;
                    const VA: Cardinal ): Cardinal;
var I: Cardinal;
Begin
   //относительное виртуальное смещение
   Result := VA - NtHdr.OptionalHeader.ImageBase;

   //поиск секции к которой относиться виртуальный адрес
   for I := 1 to NtHdr.FileHeader.NumberOfSections - 1 do
   if ( Result >= Dir[I].VirtualAddress ) and
      ( Result <= Dir[I + 1].VirtualAddress ) then
      Begin //нашли
         //определение смещение в файле
         Result := Dir[I].PointerToRawData + ( Result - Dir[I].VirtualAddress );
         Break;
      end;

end;

Function GetConstDiskOffset( const D; var Off: Cardinal ): Integer;
var F    : File;
   OldFM: Integer;
   HDos : TImageDosHeader;
   NTHdr: TImageNtHeaders;
   Dir  : Dirs;
Begin
   OldFM := FileMode;
   FileMode := 0;
   AssignFile( F, ParamStr( 0 ) );
   {$I-}Reset( F, 1 );{$I+}
   Result := IOResult;
   if Result <> 0 then Exit;
   if ( GetDosHdr( F, HDos ) <> 0 ) or  //чтение DOS заголовка
      ( GetNtHdr( F, HDos, NtHdr ) <> 0 ) or //чтение PE заголовка
      ( GetDIRSections( F, NtHdr, Dir ) <> 0 ) then //чтение заголовков секций
   Begin
      CloseFile( F );
      Exit;
   end;

   //смещение константы
   Off := GetVAtoRVA( Dir, NtHdr, Cardinal( Addr( D ) ) );

   CloseFile( F );

   FileMode := OldFM;
end;

Вот код, не полный для краткости!
Но этот код валиден если Loader загрузил файл по адресу из заголовка EXE файла он же NtHdr.OptionalHeader.ImageBase


 
Digitman ©   (2004-03-02 16:55) [7]

ах вон оно что !

а в вопросе ты про ран-тайм ничего не сказал


 
xShadow ©   (2004-03-02 17:01) [8]

Сорри!



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
14-1080628902
Gorlum
2004-03-30 10:41
2004.04.25
Про отсрочку


1-1081325444
mixam
2004-04-07 12:10
2004.04.25
прога зпущена или нет


11-1064220903
RA
2003-09-22 12:55
2004.04.25
Form.CanResize:=true


7-1077525696
AlexPiv
2004-02-23 11:41
2004.04.25
Как в Delphi написать программу которая отловит процесс открытия


3-1080796265
DrAculenok
2004-04-01 09:11
2004.04.25
Не могу заInsertить данные: