Здравствуйте. Разбирался с PE-структурой, и возник такой вопрос: чтобы узнать абсолютный адрес точки входа надо сложить EntryPoint и ImageBase, и примеры приводят, в которых всё так и получается. А я попытался, у меня EntryPoint=1040h, ImageBase=400000h а размер EXE-шника 16384 байт. Как правильно определить? (Значения брал из ProcDump32)
Ну, сложить то ... А вот как поменять точку входа? По идеи: АдресНовой - ImageBase Допустим я хочу установить EP на последний байт. 4000h - 400000h = FFC04000h, не катит токая шняга 0_о
_kostik_ 4000h это уже адрес относительно ImageBase, из него не нужно ничего вычитать. Перечитай пособие еще разок. А если на последний байт, то 3FFFh. Если же я понял не правильно, и абсолютный адрес это смещение в файле, то тут сложнее. Сначала нужно определить, к какой секции принадлежит код, на который ссылается сумма (ImageBase+RVA(EntryPoint)). Потом из этой суммы вычесть RVA этой секции. Полученная разность будет смещением относительно начала той самой секции, которой принадлежат данные, на которые ссылается (ImageBase+RVA(EntryPoint)). Все это делается с помощью функции RtlImageRvaToVa.
Реальный адрес посмотри запустив ее в отладчике - он то не соврёт... Бывают такие приколы, что секцыя начинается дальше, за пределами файла.