The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 10.2 Модификация адресов, выполняемая загрузчиком

Распечатка 10.2 Модификация адресов, выполняемая загрузчиком

Предыдущая  Содержание  Следующая V*D*V

Распечатка 10.2

 

/* Проверяем GOT и делаем модификацию адресов в GOT */

 

if (flags & FLAT_FLAG_GOTPIC) {

  for (rp = (unsigned long *)datapos; *rp != 0xffffffff; rp++) {

    unsigned long addr;

    if (*rp) {

      addr = calc_reloc(*rp, libinfo, id, 0);

      if (addr == RELOC_FAILED)

        return -ENOEXEC;

      *rp = addr;

    }

  }

}

 

/* Пробегаем по записям данных переадресации и также их модифицируем */

 

for (i=0; i < relocs; i++) {

  unsigned long addr, relval;

 

  /* Получаем адрес указателя для перерасчёта (конечно,

   * этот адрес сначала должен быть перемещён).

   */

  relval = ntohl(reloc[i]);

  addr = flat_get_relocate_addr(relval);

  rp = (unsigned long *) calc_reloc(addr, libinfo, id, 1);

 

  …

  …

 

  /* Получаем значение указателя. */

  addr = flat_get_addr_from_rp(rp, relval, flags);

  if (addr != 0) {

    /*

     * Выполняем перерасчёт адреса. PIC уже перемещён

     * в раздел данных в нужном порядке

     */

    if ((flags & FLAT_FLAG_GOTPIC) == 0)

      addr = ntohl(addr);

 

  addr = calc_reloc(addr, libinfo, id, 0);

 

  …

  …

 

  /* Записываем перерасчитанный указатель обратно. */

  flat_put_addr_at_rp(rp, addr, relval);

}

 

Предыдущая  Содержание  Следующая