Анимация
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

seg000:002D seg000:0030 seg000:0033 seg000:0036 seg000:0036 seg000:0036 seg000:0037 seg000:0037

sub 0 2A

call

call

retn endp

sub 0 DD si, 2BAh sub 0 DD

R O U T I N E

Операнд

Пояснения

Start

Линейный адрес начала функции. Функция не может начинаться с середины инструкции

==end Пояснения

!=-1

Линейный адрес конца функции. Может приходиться на середину инструкции. IDA его округлит до адреса конца предыдущей инструкции.

==-1

IDA автоматически вычисляет адрес конца функции и при необходимости преобразует undefined в инструкции

Return

Завершение

Пояснения

Вызов завершился не успешно. Функция не была создана

Вызов завершился Успешно

success DelFunction(long ea);

Вызов DelFunction позволяет удалять функцию, указав любой, принадлежащий ей адрес. Вместе с функцией уничтожаются все локальные переменные, и аргументы, если они есть. Все остальное (инструкции, перекрестные ссылки, метки) остается нетронутым.

Например:

,text:00400FFF

S U B R O U T I N E

.text .text .text .text XREF:

.text

00400FFF 00400FFF 00400FFF 00400FFF

; Attributes: library function

amsg exit

setenvp+4Ep

00400FFF

setenvp+7Dp

.text:00400FFF

.text:00400FFF arg 0

.text:00400FFF

.text:00400FFF

.text:00401006

.text:00401008

.text:0040100D

.text:0040100D loc 10 40100D:

XREF: amsg exit+7j

.text:0040100D

proc near

= dword ptr 4

; CODE

call

push

dword 0 408758, 2 short loc 10 40100D FF MSGBANNER

; CODE

[esp+arg 0]



.text:00401011

call

NMSG WRITE

.text:00401016

push

0FFh

.text:0040101B

call

off 0 408050

.text:00401021

.text:00401022

.text:00401023

retn

.text:00401023 amsg exit

endp

DelFuncton(0x400FFF);

.text:00400FFF amsg exit:

XREF: setenvp+4Ep

.text:00400FFF

setenvp+7Dp ...

.text:00400FFF

dword 0 4 08758, 2

.text:00401006

short loc 10 4010

.text:00401008

call

FF MSGBANNER

.text:0040100D

.text:0040100D loc 10 40100D:

XREF: .text:00401006j

.text:0040100D

push

dword ptr [esp+4]

.text:00401011

call

NMSG WRITE

.text:00401016

push

0FFh

.text:0040101B

call

off 0 408050

.text:00401021

.text:00401022

.text:00401023

retn

; CODE

; CODE

Операнд

Пояснения

Любой линейный адрес, принадлежащий функции

Завершение

Пояснения

Return

Вызов завершился не успешно. Функция не была создана

Вызов завершился Успешно

success SetFunctionEnd(long ea,long end);

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

Например:

seg000

22C0 start

proc

near

seg000

22C0

call

sub 0 22DD

seg000

22C3

call

sub 0 2325

seg000

22C6

call

sub 0 235B

seg000

22C9

call

sub 0 2374

seg000

22CC

call

sub 0 23B6

seg000

22CF

call

sub 0 23F8

seg000

22D2

loc 0 22DA

seg000

22D4

seg000

22D5



seg000:22D6 seg000:22D7 seg000:22DA seg000:22DA seg000:22DA seg000:22DA

loc 0 22DA:

start

call

call

endp

sub 0 2412 sub 0 2305

SetFunctionEnd(0x122C3,0x122СF);

seg000:22C0 start seg000:22C0 seg000:22C3 seg000:22C6 seg000:22C9 seg000:22CC seg000:22CF seg000:22CF start seg000:22D2 seg000:22D4 seg000:22D5 seg000:22D6 seg000:22D7 seg000:22DA

seg000:22DA loc 0 22DA: seg000:22DA

Однако при этом не удаляется перекрестная ссылка на следующую команду, что может иметь неприятные последствия, например, при попытке пометить функцию как undefined, что и видно на следующем примере:

proc

near

call

sub 0 22DD

call

sub 0 2325

call

sub 0 235B

call

sub 0 2374

call

sub 0 23B6

call

sub 0 23F8 ;

источник

endp

loc 0 22DA ;

приемник

call

sub 0 2412

call

sub 0 2305

MakeUnkn(0x122C0,1);

seg000

22C0 start

0E8h

seg000

22C1

seg000

22C2

seg000

22C3

0E8h

seg000

22C4

seg000

22C5

seg000

22C6

0E8h

seg000

22C7

seg000

22C8

seg000

22C9

0E8h

seg000

22CA

0A8h

seg000

22CB

seg000

22CC

0E8h

seg000

22CD

0E7h

seg000

22CE

seg000

22CF

0E8h

seg000

22D0

&

seg000

22D1

seg000

22D2

seg000

22D3

seg000

22D4

seg000

22D5

seg000

22D6



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