Сейчас на форуме: UniSoft, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Перечисление релоков
Посл.ответ Сообщение

Ранг: 1.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 декабря 2010 07:22
· Личное сообщение · #1

Всем привет. Помогите, плз, начинающему, запутался.
Есть обычный цикл, который перечисляет дескрипторы IMAGE_BASE_RELOCATION.
while( relocBlock->VirtualAddress != NULL )
{
...
relocBlock = ( IMAGE_BASE_RELOCATION *)((ULONG)relocBlock + relocBlock->SizeOfBlock);
}
Как внутри цикла корректно перечислить непосредственно сами 2-байтные блоки данных, которые идут за полями VirtualAddress и SizeOfBlock?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 09 декабря 2010 08:20
· Личное сообщение · #2

А в чем проблема? В определении количества 2 байтовых элементов? Количество равно

(relocBlock->SizeOfBlock - 8) / 2

SizeOfBlock равен размеру всего блока, отнимаем 4 байта (VirtualAddres), 4 байта (SizeOfBlock) и делим на 2 (размер элемента цепочки). Всё теперь в цикле читаем по 2 байта.

-----
Yann Tiersen best and do not fuck




Ранг: 1.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 декабря 2010 08:58
· Личное сообщение · #3

PE_Kill
Спасибо, то что надо было




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 09 декабря 2010 10:12
· Личное сообщение · #4

Закрою тогда, раз решён вопрос.


 eXeL@B —› Программирование —› Перечисление релоков
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати