Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых) |
![]() |
eXeL@B —› Программирование —› Откуда вЫзвали API? |
Посл.ответ | Сообщение |
|
Создано: 22 января 2007 13:38 · Поправил: cooper · Личное сообщение · #1 Сплайсингом перехватываю некоторые API, возможно же узнать из какого участка кода произошол их вызов? Впринципе, сразу после входа в функцию esp указывает на адрес возврата. Пишу на С++ в VS2003. Пробывал всавлять в начало ф-ции чтота типа: __asm mov addr, esp *addr - в лучшем случае адрес перехватываемой функции, или вообще чушь. Думал что из за стандартного пролога типа: pash ebp перед __asm но: __asm addr, dword ptr [esp+0x04] - непонимает, а: __asm pop dw __asm mov addr, esp __asm pash dw - тоже чушь. Вообщем, прошу совета... ![]() |
|
Создано: 22 января 2007 14:10 · Личное сообщение · #2 |
|
Создано: 22 января 2007 21:43 · Личное сообщение · #3 |
|
Создано: 22 января 2007 22:05 · Личное сообщение · #4 |
|
Создано: 22 января 2007 22:14 · Личное сообщение · #5 даа... если уж чел просто ошибся с написанием асм комманд то можно предложить другое решение его проблемы: ты используешь mov r32, [esp+04], но если в этой фукнции определены какие нибудь переменные, то esp сдвинется еще хрен знает куда, ... если в начале функции присутствует что то типа push ebp mov ebp, esp то для получения необходимого адреса лучше использовать регистр ebp, т.е. mov r32, [ebp+04] ![]() |
|
Создано: 22 января 2007 22:34 · Личное сообщение · #6 |
|
Создано: 22 января 2007 22:54 · Личное сообщение · #7 |
|
Создано: 22 января 2007 23:01 · Личное сообщение · #8 doctor Ice: возможно вытащить из стека адрес возврата. - Адрес возврата обычно, следующий адрес после сall. Ну собственно его и ищу( токма как? )... Насчет ebx+.... MSDN пишет: Within an __asm block, you can specify integer constants with either C notation or assembler radix notation (0x100 and 100h are equivalent, for example). This allows you to define (using #define) a constant in C and then use it in both C or C++ and assembly portions of the program. You can also specify constants in octal by preceding them with a 0. For example, 0777 specifies an octal constant. Поэтому правы все, вероятно. Пробывал по разному, непонимает видимо dword ptr ( improper operand type ) - незнаю... Возможно еще после __asm addr, esp чтото типа *(++addr) - но тоже на выходе чушь. ![]() |
|
Создано: 22 января 2007 23:15 · Личное сообщение · #9 |
|
Создано: 23 января 2007 12:08 · Личное сообщение · #10 |
|
Создано: 23 января 2007 21:00 · Личное сообщение · #11 |
![]() |
eXeL@B —› Программирование —› Откуда вЫзвали API? |