gpt4 book ai didi

c++ - 不正确的操作数类型 MSVC

转载 作者:行者123 更新时间:2023-11-28 01:28:19 27 4
gpt4 key购买 nike

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

#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(generate_instruction) 替换为 #define JUNK JUNK_INSTRUCTION(NOP) 时,程序运行正常。我不确定为什么当它们都返回相同的值时它不起作用。

最佳答案

不确定您要做什么。

JUNK 扩展为 JUNK_INSTRUCTION(generate_instruction),它将扩展为:

__asm _emit PUSH
__asm _emit generate_instruction
__asm _emit POP

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

根据 the docs ,您需要提供一个常量字节值,就像您对其他两个所做的那样。

我认为您对运行时调用、编译时计算和宏的概念真的很困惑。

关于c++ - 不正确的操作数类型 MSVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806676/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com