Вот простой asm-код, который я вставил в проект VC ++. addr_curr_ebp - текущий адрес указателя EBP. Он указывает на старое значение EBP внутри стекового фрейма. Через 4 байта после этого указывается адрес возврата внутри функции приложения. Я извлекаю один байт из раздела кода. Я запускаю свой код вместе с другими приложениями, такими как gtalk, vlc и т. Д. Приложение всегда падает, когда я включаю ProbStat 1 и 2 в мой код. Когда я удаляю эти заявления, все работает нормально. Как вы думаете, это?
__asm{
push eax
push ebx
push cx
mov ebx, addr_curr_ebp
mov eax, [ebx + 4]
mov cl, BYTE PTR [eax - 5] //ProbStat 1
mov ret_5, cl // ProbStat 2
pop cx
pop ebx
pop eax
}