Вызов функции ASM в C ++ - PullRequest
       17

Вызов функции ASM в C ++

0 голосов
/ 14 сентября 2011

Я задал вопрос вчера, как вызвать функцию __fastcall, она отлично работала.

Теперь моя последняя функция, которую я должен вызвать, - это некоторые трудности.

Вот функция ASM.

seg000:0043671F                 push    0AA2BAD1Bh
seg000:00436724                 lea     ecx, [ebp+var_14]
seg000:00436727                 call    sub_458E90

IDA PRO помечает его как.

int __thiscall sub_458E90(void *this, int a2)

Это называется так

sub_458E90(&v9, -1439978213);

Теперь вот код, который я пробовал, и он просто дает мне исключение во время выполнения

   int addr = 0x458E90;

    __declspec(naked) void sub_458E90(int buffer, int key)
    {
        __asm{
            push key
            mov ecx, buffer
            call [addr]
             retn
        }
    }

Также пробовал

__declspec(naked) void sub_458E90_1(int buffer, int key)
{
    __asm{
        push key
        mov ecx, buffer
        jmp [addr]
    }
}

Оба дают мне

Ошибка приложения Инструкция на «0x00458e93» восстановила память на «0x00000000». Память не может быть «прочитана».

1 Ответ

1 голос
/ 14 сентября 2011

Решено ebx должен был использоваться для ключа.Все просто.

void также должно быть изменено на int, забыв об этом.(скорее всего не важно)

...