不正确的操作数类型 MSVC

Improper operand type MSVC

本文关键字:MSVC 类型 操作数 不正确      更新时间:2023-10-16

当前尝试从方法发出随机指令,但不断收到错误"不正确的操作数类型"。

#include <iostream>
#include <time.h>
#define PUSH    0x50
#define POP     0x58
#define NOP     0x90
auto generate_instruction() -> int {
int instruction_list[] = { NOP };
return instruction_list[rand() % (sizeof(instruction_list) / sizeof(*instruction_list))];
}
#define JUNK_INSTRUCTION(x)     
__asm _emit PUSH                
__asm _emit x                   
__asm _emit POP                 
#define JUNK JUNK_INSTRUCTION(generate_instruction)
int main() {
srand(static_cast<int>(time(NULL)));
JUNK;
std::cout << "Hello World!" << std::endl;
}

但是当我用#define JUNK JUNK_INSTRUCTION(NOP)替换#define JUNK JUNK_INSTRUCTION(generate_instruction)时,程序运行良好。我不确定为什么当它们都返回相同的值时它不起作用。

不确定你想做什么。

JUNK扩展到JUNK_INSTRUCTION(generate_instruction),这将扩展到:

__asm _emit PUSH
__asm _emit generate_instruction
__asm _emit POP

generate_instruction只是函数的名称。编译器不会仅仅因为您命名它而运行该函数并替换它。

根据文档,您需要提供一个常量字节值,就像处理其他两个一样。

我认为您对运行时调用、编译时计算和宏的概念感到非常困惑。