Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

Отображение константы для 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.035 c
8-1073681437
Ракал
2004-01-09 23:50
2004.04.25
Как работать с Direct Sound?


3-1080405086
HeoGtan
2004-03-27 19:31
2004.04.25
Вопрос по D7+ADO+MS.ACCESS97...


7-1077815059
lmatveev
2004-02-26 20:04
2004.04.25
Блокирование CD-ROM


3-1080194959
denmin
2004-03-25 09:09
2004.04.25
Проблема с ADOTable.


14-1080588239
Kom Zu Mir
2004-03-29 23:23
2004.04.25
Передача файлов через интернет между двумя компами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский