Главная страница
    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
14-1080893286
peypivo
2004-04-02 12:08
2004.04.25
галстук


1-1081159122
Chereepovets
2004-04-05 13:58
2004.04.25
HKEY_CURRENT_USER, Что за глюк


6-1077657222
Android
2004-02-25 00:13
2004.04.25
Port


1-1081402449
fgrtuyji
2004-04-08 09:34
2004.04.25
оформление меню и toolbar


7-1078090769
Duk
2004-03-01 00:39
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский