Восстанавливаем fixup (relocs)

автор | 21 Декабрь, 2008
рубрики RCE программирование Комментарии к записи Восстанавливаем fixup (relocs) отключены

Рипнуто из ASPack.

hModule — адрес модуля,

pBase — ImageBase из заголовка,

RVA — со таблицы релоков.

Code:

procedure PE_File.ProcessFixUps (hModule, pBase, RVA: Cardinal); stdcall;
begin
  asm
                 pushad
                 mov     edx, [hModule]
                 mov     eax, [pBase]
                 sub     edx, eax
                 jz      @@EndOfFixUpProcessing
                 mov     eax, edx
                 sub     ebx, ebx
                 shr     eax, 010h
                 mov     esi, [RVA]
                 add     esi, [hModule]

   @@ProcessBlock:
                 cmp     dword ptr [esi], 0
                 jz      @@EndOfFixUpProcessing
                 mov     ecx, [esi + 04]
                 sub     ecx, 8
                 shr     ecx, 1
                 mov     edi, [esi]
                 add     edi, [hModule]
                 add     esi, 8

   @@DoOneFix:
                 mov     bx, [esi]
                 shr     ebx, 0Ch
                 cmp     ebx, 01          // IMAGE_REL_BASED_HIGH
                 jz      @@HighFix
                 cmp     ebx, 02          // IMAGE_REL_BASED_LOW
                 jz      @@LowFix
                 cmp     ebx, 03          // IMAGE_REL_BASED_HIGHLOW
                 jz      @@HighLowFix
                 jmp     @@EndOfOneFix    // IMAGE_REL_BASED_ABSOLUTE

   @@HighFix:
                 mov     bx, [esi]
                 and     ebx, 0FFFh
                 add     [edi + ebx], ax
                 jmp     @@EndOfOneFix

   @@LowFix:
                 mov     bx, [esi]
                 and     ebx, 0FFFh
                 add     [edi + ebx], dx
                 jmp     @@EndOfOneFix

   @@HighLowFix:
                 mov     bx, [esi]
                 and     ebx, 0FFFh
                 add     [edi + ebx], edx

   @@EndOfOneFix:
                 add     esi, 02
                 loop    @@DoOneFix
                 jmp     @@ProcessBlock

   @@EndOfFixUpProcessing:
                 popad
  end;
end;

 

Автор: Dr.Golova

Оценить эту тему:
1 звезда2 звезды3 звезды4 звезды5 звезд (1 голосов, средний: 5,00 из 5)
Loading...Loading...
Популярность: 2 949 просмотров
Теги:
Вы можете следить за любыми ответами на эту запись через RSS 2.0 feed. Комментарии в настоящее время закрыты.