Здраствуйте,знающие люди помогите плиз разобраться. Читаю Джефри Рихтера,"Создание ефективных win32 приложений...",в главе про основы dll он пишет.что в dll размещаеться раздел експорта(.edata) в котором находиться RVA и имя експортируемого идентификатора.Ну и далее он расписывает подробно как в раздел импорта заноситься виртуальный адрес импортируемого идентификатора полученого сложением RVA и базового адреса спроецируемой dll. Так вот все что написал Рихтер мне понятно,даже очень. Но открываю dll через Pe Explorer и вижу что RVA наодиться не в разделе експорта,а в разделе импорта. Прлучаеться Рихтер Расказал неправду? Или Pe Explorer неправильно показывает содержимое разделов?
ОМГ... То ли импорт, то ли экспорт... Рихтер и PE explorer говорят правду, правда, сейчас уже нет отдельной секции импорта/экспорта, все можно свалить в одну кучу. А вот автор темы явно ничего не понимает в вопросе. RVA чего? Что за раздел импорта, раздел экспорта?
Поясните, что такое RVA, если вам так всё понятно? А потом перечитайте свой вопрос и подумайте, понятен ли людям его смысл. Но сначала - RVA.
А теперь скажите, что, по-вашему, RVA-адресация используется только в таблице экспорта? А в таблице импорта тогда какая, RAW или VA? Эх, я все равно не понял вопрос ТС'а, оставляю его для людей, умеющих понимать полуукраинские бредни.
Вот что пишет Рихтер про експорт А вот что он пишет про импорт И вот мой вопрос,В примере Рихтера RVA есть только в разделе експорта.А если открыть файл через PE Explorer,то получаеться все наоборот,RVA находиться в разделе импорта,а не в разделе експорта. Теперь мой вопрос более понятен?
А ты пиши по-русски тогда, умник. На такой вопрос могу лишь посоветовать изучить структуру таблицы импорта с подчиненными таблицами (image address table, image lookup table), таблицу экспорта с подчиненными ей. Читай уроки: http://wasm.ru/article.php?article=1002006 http://wasm.ru/article.php?article=1002007 либо http://www.insidepro.com/kk/019/019r.shtml А потом уже задавай глупые не имеющие ответа вопросы. RVA-адресация используется практически во всех таблицах PE-формата, в том числе в таблицах импорта и экспорта (в таблице отложенного импорта немного по-другому, есть еще таблица группового импорта).
RVA+базовый адрес спроецированой dll и получиться адрес,который запишеться в таблицу импорта.Все ссылки на функции в ехе будут ссылаться на етот адрес который находиться в таблице импорта.
RVA - это да. относительный виртуальный адрес. Если дело на то пошло то в DLL обсолютно всё реализовано через эту систему или ей подобную. DLL может быть загружена в любое место оперативной памяти, которое удовлетворяет определенным требованиям ОС. А в таблице импорта и экспорта и релоков и ресурсов, почти везде юзается адресация относительно именно этого адерса загрузки. и для этого юзается RVA. Насчет секций - это сугубо личное для каждого кодера. Название секциям ты можеш сам давать. Также и склеивать ты можешь их в одну секцию. Кстати, в таблице секций тоже юзается RVA для описания где находится секция в оперативе
Кнопочку для просмотра свойств экспортируемых функций, как на картинке, не пробовал в PE Explorer нажимать? http://www.heaventools.ru/pe-explorer-export-viewer.htm Пойнтеры и есть искомые Relative Virtual Addresses в разделе экпорта.
А почему тогда в PE Explorer,в разделе експорта ето поинтеры,а в разделе импорта ето RVA? Почему бы не написать RVA и там и там. Темболее раз вы говорите что ето одно и тоже
Nein. По-русски оно причастие от глагола bind, то бишь прикрученный, прикомпонованный, с заранее присвоенными, предвычисленными значениями адресов функций. Как бы все понимают, что это, а одним словом фиг скажешь. Но всяк не диапазонный.
RVA - это всёго лишь способ адресации (базовый адрес + смещение), а указателей на массивы данных в таблицах экспорта и импорта много разных. Просто писать RVA вне контекста - это всё равно что писать км на дорожных указателях, но не писать, до куда эти км.