Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Откуда вЫзвали API?
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 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 - тоже чушь.
Вообщем, прошу совета...



Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

Создано: 22 января 2007 14:10
· Личное сообщение · #2

МОжет поучишь асм команды?
__asm{
mov addr,dword ptr [esp+04h]
}



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 22 января 2007 21:43
· Личное сообщение · #3

можно просто esp+04

да и к тому же нет инструкции mov mem32,mem32



Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 22 января 2007 22:05
· Личное сообщение · #4

Cigan
Это ты так асм предлагаешь учить?:
__asm{
mov addr,dword ptr [esp+04h]
}

Уж лучше чел во все его не знает чем так!

-----
My love is very cool girl.




Ранг: 88.3 (постоянный), 3thx
Активность: 0.040
Статус: Участник

Создано: 22 января 2007 22:14
· Личное сообщение · #5

даа... если уж чел просто ошибся с написанием асм комманд то можно предложить другое решение его проблемы:

ты используешь mov r32, [esp+04], но если в этой фукнции определены какие нибудь переменные, то esp сдвинется еще хрен знает куда, ... если в начале функции присутствует что то типа

push ebp
mov ebp, esp

то для получения необходимого адреса лучше использовать регистр ebp, т.е.

mov r32, [ebp+04]



Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 22 января 2007 22:34
· Личное сообщение · #6

cooper пишет:
Сплайсингом перехватываю некоторые API, возможно же узнать из какого участка кода произошол их вызов?


редкосная глупость. этого узнать невозможно. возможно вытащить из стека адрес возврата.

-----
power and the money money and the power




Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

Создано: 22 января 2007 22:54
· Личное сообщение · #7

theCollision пишет:
Cigan
Это ты так асм предлагаешь учить?:
__asm{
mov addr,dword ptr [esp+04h]
}
Уж лучше чел во все его не знает чем так!


Я си не знаю по этому может и не правильно написал. По крайне мере на чистом асме:

Call Funct


Funct proc
mov eax,[esp] -- В eax адрес возврата
ret

Fucnt endp



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 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) - но тоже на выходе чушь.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 22 января 2007 23:15
· Личное сообщение · #9

cooper пишет:
MSDN пишет:

Советую просто на отладчике(дизассемблере) посмотреть это место до правки и после правки и запастись учебником по ассемблеру. Первоисточник - это команды в памяти. Книжки и мануалы хороши, когда есть хорошее владение предметом, а так - рискуешь остаться "знатоком".



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 января 2007 12:08
· Личное сообщение · #10

Спасибо за помошь! Дошло наконец:
__asm mov eax, dword ptr [ebp+0x04]
__asm mov addr, eax




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 23 января 2007 21:00
· Личное сообщение · #11

Cigan пишет:
МОжет поучишь асм команды?
__asm{
mov addr,dword ptr [esp+04h]
}


Cigan пишет:
mov eax,[esp] -- В eax адрес возврата


Разница значительна не находишь ?

-----
have a nice day



 eXeL@B —› Программирование —› Откуда вЫзвали API?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати