Ассемблерная вставка C++ Builder
Помогите найти ошибку.
Есть ассемблерная вставки, которая работает
//---------------------------------------------------------------------------
void __stdcall Jump(void)
{
__asm
{
pushad
MOV EBX,Jump_CALL
CALL EBX
popad
}
}
//---------------------------------------------------------------------------
Но только если вот так (рабочий вариант)
#define Jump_ECX0x2BCCC6B0
//---------------------------------------------------------------------------
а если вот так то уже не получается
DWORD MMM = 0x00000001
#define Jump_ECX0x2BCCC6B1-MMM
//---------------------------------------------------------------------------
Кто может подсказать в чем проблема, или нужна какая то хитрость
При том что в обоих случаях define выдает правильный адррес (проверка через ShowMessage() )
Происходит вылет клиента игры ( собственно это функция эмуляции прыжка как видно из названия) , а Jump_ECX это просто опечатка ( в коде все правильно, это тут я ошибся, в место Jump_ECX должно быть Jump_CALL в дефайнах)
-----------------------------------------------------------------------------
DWORD MMM = 0x00000001;
Причем вот еще заметил:
#define Jump_CALL0x01360000+0x00208570 \\ РАБОТАЕТ
#define Jump_CALL0x01568570 \\ РАБОТАЕТ
#define Jump_CALL0x01568571-MMM \\ HE РАБОТАЕТ
-----------------------------------------------------------------------------
(хотя везде одно и тоже DWORD число - 0x01568570)