C++ __asm ​​Генерация разных байтов

В своей функции я использую

__asm
{
  mov     ecx,dword ptr [0x28F1431]
  mov     ecx,ds:[0x28F14131]
}

который должен производить следующие байты: 0x8B0D (mov ecx, dword ptr []). Однако первая инструкция выдает 0xB9 (mov ecx,0x28F14131) и второй 0x3E:8B0D

Итак, мой вопрос, какую инструкцию я должен использовать, чтобы получить желаемый результат внутри C++ __asm?

1 ответ

Если вы на 100% знаете, какой должна быть ваша последовательность байтов для встроенной сборки, вы всегда можете явно использовать эти байты. Точный синтаксис ускользает от меня, но если вы используете GCC, вы можете попробовать....

__asm {
    .byte 0x##
    .byte 0x##
    ...
}

Этот подход работает, только если вы знаете со 100% уверенностью, каковы последовательности байтов для всей инструкции. И если вы собираетесь это сделать, обязательно прокомментируйте соответственно.

(Для чего бы это ни стоило, мне приходилось использовать этот подход в прошлом, чтобы обойти ошибку компилятора, где независимо от того, что в противном случае он использовал бы неправильную последовательность байтов для одной из инструкций.)

Другие вопросы по тегам