Раздел експорта

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ShkiperLol, 31 Aug 2010.

  1. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Здраствуйте,знающие люди помогите плиз разобраться.
    Читаю Джефри Рихтера,"Создание ефективных win32 приложений...",в главе про основы dll он пишет.что в dll размещаеться раздел експорта(.edata)
    в котором находиться RVA и имя експортируемого идентификатора.Ну и далее он расписывает подробно как в раздел импорта заноситься виртуальный адрес импортируемого идентификатора полученого сложением RVA и базового адреса спроецируемой dll.

    Так вот все что написал Рихтер мне понятно,даже очень.

    Но открываю dll через Pe Explorer и вижу что RVA наодиться не в разделе експорта,а в разделе импорта.

    Прлучаеться Рихтер Расказал неправду?
    Или Pe Explorer неправильно показывает содержимое разделов?
     
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    ОМГ... То ли импорт, то ли экспорт... Рихтер и PE explorer говорят правду, правда, сейчас уже нет отдельной секции импорта/экспорта, все можно свалить в одну кучу. А вот автор темы явно ничего не понимает в вопросе.

    RVA чего? Что за раздел импорта, раздел экспорта?
     
  3. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Рихтер пишет что RVA есть только в разделе експорта

    В вопросе мне все понятно.
     
    #3 ShkiperLol, 31 Aug 2010
    Last edited by a moderator: 1 Sep 2010
  4. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    [​IMG]

    Поясните, что такое RVA, если вам так всё понятно?
    А потом перечитайте свой вопрос и подумайте, понятен ли людям его смысл. Но сначала - RVA.
     
  5. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    RVA-относительный виртуальный адрес.Ето разница между виртуальным и базовым адресом.
     
  6. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А теперь скажите, что, по-вашему, RVA-адресация используется только в таблице экспорта? А в таблице импорта тогда какая, RAW или VA? Эх, я все равно не понял вопрос ТС'а, оставляю его для людей, умеющих понимать полуукраинские бредни.
     
  7. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Вот что пишет Рихтер про експорт

    А вот что он пишет про импорт

    И вот мой вопрос,В примере Рихтера RVA есть только в разделе експорта.А если открыть файл через PE Explorer,то получаеться все наоборот,RVA находиться в разделе импорта,а не в разделе експорта.

    Теперь мой вопрос более понятен?
     
  8. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А ты пиши по-русски тогда, умник.

    На такой вопрос могу лишь посоветовать изучить структуру таблицы импорта с подчиненными таблицами (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-формата, в том числе в таблицах импорта и экспорта (в таблице отложенного импорта немного по-другому, есть еще таблица группового импорта).
     
  9. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    ТС для чего по твоему RVA существует?
     
    1 person likes this.
  10. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    RVA+базовый адрес спроецированой dll и получиться адрес,который запишеться в таблицу импорта.Все ссылки на функции в ехе будут ссылаться на етот адрес который находиться в таблице импорта.
     
  11. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    RVA - это да. относительный виртуальный адрес. Если дело на то пошло то в DLL обсолютно всё реализовано через эту систему или ей подобную.
    DLL может быть загружена в любое место оперативной памяти, которое удовлетворяет определенным требованиям ОС. А в таблице импорта и экспорта и релоков и ресурсов, почти везде юзается адресация относительно именно этого адерса загрузки. и для этого юзается RVA.

    Насчет секций - это сугубо личное для каждого кодера. Название секциям ты можеш сам давать. Также и склеивать ты можешь их в одну секцию.
    Кстати, в таблице секций тоже юзается RVA для описания где находится секция в оперативе
     
  12. Artt

    Artt New Member

    Joined:
    1 Sep 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Кнопочку для просмотра свойств экспортируемых функций, как на картинке, не пробовал в PE Explorer нажимать?
    http://www.heaventools.ru/pe-explorer-export-viewer.htm

    Пойнтеры и есть искомые Relative Virtual Addresses в разделе экпорта.
     
  13. Artt

    Artt New Member

    Joined:
    1 Sep 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Что за таблица группового импорта? В спецификации PE формата такой вроде нет.
     
  14. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Bound import. Я перевел неточно наверное, "диапазонный импорт" она вроде по-русски.
     
  15. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    А почему тогда в PE Explorer,в разделе експорта ето поинтеры,а в разделе импорта ето RVA? Почему бы не написать RVA и там и там.
    Темболее раз вы говорите что ето одно и тоже
     
  16. Artt

    Artt New Member

    Joined:
    1 Sep 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Nein. По-русски оно причастие от глагола bind, то бишь прикрученный, прикомпонованный, с заранее присвоенными, предвычисленными значениями адресов функций. Как бы все понимают, что это, а одним словом фиг скажешь. Но всяк не диапазонный.
     
  17. Artt

    Artt New Member

    Joined:
    1 Sep 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    RVA - это всёго лишь способ адресации (базовый адрес + смещение), а указателей на массивы данных в таблицах экспорта и импорта много разных.

    Просто писать RVA вне контекста - это всё равно что писать км на дорожных указателях, но не писать, до куда эти км.
     
  18. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    "Диапазонный" - термин взят из статьи Криса Касперски)
     
  19. Artt

    Artt New Member

    Joined:
    1 Sep 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Остаётся только гадать, что он этим хотел сказать.