замените _asm nop в 64-битной, VS2008, C ++ - PullRequest
2 голосов
/ 23 февраля 2010

Как заменить _asm nop инструкции на 64-битные. компилируется и работает в 32-битном режиме.

Ответы [ 2 ]

6 голосов
/ 23 февраля 2010

Я считаю, что вы можете использовать встроенную функцию __nop. Это должно скомпилироваться в соответствующую машинную инструкцию для процессора, который вы собираете.

http://msdn.microsoft.com/en-us/library/aa983381(VS.80).aspx

UPDATE:

Вот пример, который я только что создал с VS2008. Он компилируется для конфигураций Win32 и x64:

#include "stdafx.h"
#include <intrin.h>

int _tmain(int argc, _TCHAR* argv[])
{
    // The intrinsic function below will compile to a NOP machine instruction.
    // This is the same as _asm nop in the 32-bit compiler.
    __nop();
    return 0;
}

В случае, если вам интересно, я разобрал приведенный выше пример и вывод x64 был:

wmain    proc near
         db    66h
         nop
         nop
         xor   eax, eax
         retn
wmain    endp

Выход Win32 был:

_main    proc near
        nop
        xor    eax, eax
        retn
_main   endp
1 голос
/ 23 февраля 2010

Вы не можете использовать _asm в 64-битной программе. Замена является встроенной, список инструкций доступен здесь . NOP не один из них, вам придется использовать MASM64 , доступный как vc \ bin \ x86_amd64 \ ml64.exe, когда у вас установлены 64-битные компиляторы.

...