不正确的操作数类型 MSVC
Improper operand type MSVC
当前尝试从方法发出随机指令,但不断收到错误"不正确的操作数类型"。
#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
只是函数的名称。编译器不会仅仅因为您命名它而运行该函数并替换它。
根据文档,您需要提供一个常量字节值,就像处理其他两个一样。
我认为您对运行时调用、编译时计算和宏的概念感到非常困惑。
相关文章:
- 不正确的操作数类型 MSVC
- 使用 MSVC 调试类型
- MSVC 在不知道类型的情况下评估上下文(和错误)
- MSVC 错误:4 个重载中的任何一个都无法转换所有参数类型
- 键入特征以检查类型是否可从流和 MSVC 读取
- MSVC:带函数的"error C2244: unable to match function definition to an existing declaration"是指专用模板类的类型别名
- 如果我的模板类型首先以lambda参数而发生,则MSVC会引起一个奇怪的错误
- MSVC:协变返回类型和虚拟继承
- MSVC 1 位枚举类型等于 -1,并且相等性测试失败
- 重载常量和非常量转换运算符返回数组类型时出现 MSVC 错误 C2593
- MSVC 错误,将 constexpr 数组作为模板非类型参数
- QT创建者和MSVC-忽略调试时特定的异常类型
- MSVC 19.11 / Visual C 2017:尺寸1和size_t类型的初始化列表误解
- 模板构造函数在 MSVC 中失败,因为成员函数与参数类型的名称冲突
- c++ 中带有容器迭代器的循环类型依赖关系(GCC 失败,而 MSVC 正常)
- 为什么MSVC会选择一个long long作为-2147483648的类型
- 在msvc中为uint8_t和类似类型包含或项目设置
- 从函子模板参数(特定于MSVC)中推导可变参数和返回类型
- 与msvc相比,类型擦除、委托和lambda函数
- 类型转换错误!在MSVC和GCC中都有