Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 [ 99 ] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140

FIXUP SELFRE L

elf-relative? - disallows the kernel to convert operands in the first pass- this fixup is used during output This type of fixups is not used anymore. Anyway you can use it for commenting purpose in the loader modules

FIXUP EXTDEF 0x20 target is a location (otherwise - segment)

FIXUP UNUSED

0x40

fixup is ignored by IDA disallows the kernel to convert

operands- this fixup is not used during output

FIXUP CREATE D

0x80

fixup was not present in the input file

Пример:

seg000:032D seg000:0332

Message("0x%X \n",

GetFixupTgtType(

GetNextFixupEA(0)

cmp word ptr [bp+8], seg segOOO

jnz loc 0 33A

Операнд

Пояснения

Линейный адрес

Return

Завершение

Пояснения

!=BADADDR

Тип перемещаемого элемента

==BADADDR

Ошибка

long GetFixupTgtSel(long ea);

Функция возвращает селектор перемещаемого элемента, заданного линейным адресом.

Пример использования:

C0000000 ; Segment type: Pure code

C0000000 LCOD segment para public CODE use32

C0000000 assume cs:LCOD

C0000000 ;org 0C0000000h

C0000000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing

C0000000 Service Table 0 dd offset unkserv 0 ; DATA XREF: LCOD:C0000040n

Message("0x%X, 0x%X \n", GetNextFixupEA(0),

GetFixupTgtSel(GetNextFixupEA(0)

0xC0000000, 0x2



Операнд

Пояснения

Линейный адрес

Return

Завершение

Пояснения

!=BADADDR

Селектор перемещаемого элемента

==BADADDR

Ошибка

long GetFixupTgtOff(long ea);

Функция возвращает смещение перемещаемого элемента, заданного линейным адресом.

Пример использования:

C0000000 ; Segment type: Pure code

C0000000 LCOD segment para public CODE use32

C0000000 assume cs:LCOD

C0000000 ;org 0C0000000h

C0000000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing

C0000000 Service Table 0 dd offset unkserv 0 ; DATA XREF: LCOD:C0000040n

Message("0x%X, 0x%X \n",

GetNextFixupEA(0),

GetFixupTgtOff(GetNextFixupEA(0)

0xC0000000, 0xC0003514

Операнд

Пояснения

Линейный адрес

Return

Завершение

Пояснения

!=BADADDR

Смещение перемещаемого элемента

==BADADDR

Ошибка

long GetFixupTgtDispl(long ea);

Функция возвращает displacement перемещаемого элемента, заданного линейным адресом. В настоящее время на платформе Intel практически не используется и подробнее описана в факультативном приложении к книге «Использование IDA на не-Intel платформах»

Операнд

Пояснения

Линейный адрес

Return

Завершение

Пояснения

!=BADADDR

Displacement перемещаемого элемента

==BADADDR

Ошибка

void SetFixup(long ea,long type,long targetsel,long targetoff,long displ);



Функция позволяет управлять перемещаемым элементом. Практически никогда не используется, так как IDA сама разбирается в большинстве существующих форматов файлов и правильно задает значение перемещаемых элементов.

Однако, может быть полена при написании своего загрузчика файла. Тогда необходимо для каждого перемещаемого элемента вызвать эту функцию, указав его линейный адрес. Обратите внимание, не адрес начала манипулирующей с ним инструкции.

Тип перемещаемого элемента может принимать одно из следующих значений:

FIXUP MASK

FIXUP BYTE

FIXUP OFF8

Восьми битное смещение

FIXUP OFF8

FIXUP OFF16

16-битное смещение

FIXUP SEG16

16-битный сегмент (селектор)

FIXUP PTR32

32-битный длинный указатель (16-бит база; 16-бит селектор)

FIXUP OFF32

32-битное смещение

FIXUP PTR4 8

48-битный указатель (16-бит база; 32-бит смещение).

FIXUP HI8

Старшие 8 бит 16-битного смещения

FIXUP HI16

Старшие 16 бит 32-битного смещения

FIXUP LOW8

Младшие 8 бит 16-битного смещения

FIXUP LOW16

Младшие 16бит 32-битного смещения

FIXUP REL

0x10

fixup is relative to the linear address specified in

the 3d parameter to set fixup()

FIXUP SELFRE L

elf-relative? - disallows the kernel to convert operands in the first pass- this fixup is used during output This type of fixups is not used anymore. Anyway you can use it for commenting purpose in the loader modules

FIXUP EXTDEF 0x20 target is a location (otherwise - segment)

FIXUP UNUSED

0x40

fixup is ignored by IDA disallows the kernel to convert

operands- this fixup is not used during output

FIXUP CREATE D

0x80

fixup was not present in the input file

Следующие два аргумента задают селектор (сегмент) и смещение объекта, на который ссылается перемещаемый элемент. Например:

seg000:0000 start

seg000:0000

seg000:0003

seg000:0005

seg000:0005

seg000:0007

seg000:000A

STRING

seg000:000A

string terminated by "$"

seg000:000C seg000:000F seg000:0011

proc near

mov ax, seg dseg

mov ds, ax

assume ds:dseg mov ah, 9

mov dx, 0Ch

int 21h

mov ax, seg dseg

mov ds, ax

mov ah, 9

; DOS - PRINT

; DS:DX ->



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 [ 99 ] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140