В своей функции я использую
__asm
{
mov ecx,dword ptr [0x28F1431]
mov ecx,ds:[0x28F14131]
}
который должен производить следующие байты: 0x8B0D
(mov ecx, dword ptr []
). Однако первая инструкция выдает 0xB9
(mov ecx,0x28F14131
) и второй 0x3E
: 8B0D
Итак, мой вопрос, какую инструкцию я должен использовать, чтобы получить желаемый результат внутри C ++ __asm
?
Если вы на 100% знаете, какой должна быть ваша последовательность байтов для встроенной сборки, вы всегда можете явно использовать эти байты. Точный синтаксис ускользает от меня, но если вы используете GCC, вы можете попробовать ….
__asm {
.byte 0x##
.byte 0x##
...
}
Этот подход работает, только если вы знаете со 100% уверенностью, каковы последовательности байтов для всей инструкции. И если вы собираетесь это сделать, обязательно прокомментируйте соответственно.
(Для чего бы это ни стоило, мне приходилось использовать этот подход в прошлом, чтобы обойти ошибку компилятора, где бы он ни использовал неправильную последовательность байтов для одной из инструкций.)
Других решений пока нет …