Есть код Код (Text): 1. call MyDispatcher 2. ret 3. 4. MyDispatcher proc 5. 6. MyDispatcher endp Как из моей процедуры получить адрес строки 1. ? Т.е. адрес вызова моей процедуры.
Это если в процедуре локальных нет ) А иначе у нас фрейм, тобто такой вот кодес т.е. в зависимости от наличия локальных, либо mov eax, [esp] ;при остуствии либо mov eax, [ebp+4] ;при наличии
Для перехватов часто используется не Jmp, а Call. Именно чтобы в стеке был сохранён адрес перехвата(для его контороля)..
Своего рода защиту мучу, чтоб мою процедуру не могли юзать с других мест. Что-т на подобие этого: Код (Text): start: call MyDisp ret MyDisp proc mov eax,[esp] sub eax,5 mov ecx,offset start cmp eax,ecx jne _exit ; ---- ; ---- ; ---- _exit: ret MyDisp endp
_int2e_ У автора топика перехват модификацией первой инструкции функции, если есть пролог обычно вторую его инструкцию заменяют на короткий Jmp(если рядом есть свободное место), либо весь пролог на Jmp near, тоесть Ebp есчо не перезагружается.