Линейный адрес начала функции. Функция не может начинаться с середины инструкции
==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);
Позволяет изменить линейный адрес конца функции. Для этого достаточно лишь передать любой адрес, принадлежащий функции и новое значение конца.
Однако при этом не удаляется перекрестная ссылка на следующую команду, что может иметь неприятные последствия, например, при попытке пометить функцию как undefined, что и видно на следующем примере: