Reloc Table в PE64

Тема в разделе "WASM.RESEARCH", создана пользователем slesh, 21 мар 2011.

  1. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Столкнулся с интересной вещью - Взял 3 DLL скомпилировал их под x32 - везде есть таблица релоков. Те же DLL компилирую под x64 (на выходе получаю PE64 файл) и там уже релоков нет, но при этом всё работает нормально.
    Вот и возникает вопрос: каким образом система настраивает адреса для DLL? И каким образом тогда можно грузить вручную dll?
    Если для PE32 я выделял память в нужном регионе через VirtualAlloc, затем после обработки секций, если адрес не совпадал с ImageBase из PE то обрабатывал таблицу релоков. А как быть тогда в PE64?

    Или же там не важно куда будет загружена DLL, главное чтобы младшие 32 бита адреса совпали?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
  3. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Спасибо. т.е. выходит что если файл PE64 то скорее всего релоков там не будет, а если и будут то игнорить их?
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Думаю, совсем игнорировать нельзя, т.к. возможность абсолютной адресации осталась. Не знаю только, используют ее компляторы или нет.
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    var a;
    var *pa = &a;
    Так?
     
  6. hewr

    hewr New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2009
    Сообщения:
    19
    >Не знаю только, используют ее компляторы или нет.
    В ряде случаев обойтись без неё просто невозможно, поэтому не могут не использовать релоки. Настраивается по аналогии с х86 достаточно просто.
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    hewr
    А можно пример, когда без них не обойтись?
     
  8. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    наверно когда надо обратится к абсолютному адресу. а программу перенесли)
    ведь по умолчанию все относительно rip. перенес rip и абсолютный адрес уже другой... если конечно явно не прописать что надо компилировать в абсолютной адресации.
     
  9. hewr

    hewr New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2009
    Сообщения:
    19
    >А можно пример, когда без них не обойтись?

    псевдокод: