Форум: "Система";
Текущий архив: 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.033 c