temtriss

Инлайн Асм в MSVC++

3 сообщения в этой теме

Доброго времени суток, есть такой вопрос: 

Можно ли использовать Инлайн Асм для генерации байт кода? 

Пример:

unsigned char MEGAPATCH[] = {0x68, backStr[0], backStr[1], backStr[2], backStr[3], 0x9C, 0x60, 0x68, iDllStr[0], iDllStr[1], iDllStr[2], iDllStr[3], 0xB8, apiStr[0], apiStr[1], apiStr[2], apiStr[3], 0xFF, 0xD0, 0x61, 0x9D, 0xC3  };

А вместо этого, использовать что-то типо этого для генерации:

Скрытый текст

 

_asm

{

PUSH backStr

PUSHF

PUSHA

PUSH iDllStr

MOV EAX, apiStr

CALL EAX

POPA

POPF

RET 

}

 

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно, но указатель ты на такой кусок кода не получишь. Тебе надо объявить отдельную функцию без пролога (__declspec(naked)). И так можно делать только для х86 программ, так как MSVC++ компилятор не умеет инлайн-ассемблер в х64 приложения. Или можно подключить компилятор от Intel, он умеет.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо!... пойду покурю MSDN по этому поводу, хотя из того, что я уже прочитал, проще продолжать использовать онлайн Асемблер/Дизасемблер. 

 

1 час назад, Xipho сказал:

Можно, но указатель ты на такой кусок кода не получишь.

Ну а учитывая этот факт, то это совсем печально, в данном случае этот патч я генерирую для инъекции dll в процесс, через контекст потока.

 

Ладно, в принципе все работает. Не буду усложнять, спасибо за ответ, думаю тему можно закрыть.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.