gpt4 book ai didi

c++ - 是标准的C++吗

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:19:34 25 4
gpt4 key购买 nike

此代码是用 C 编写的:

int main(){
char Demoshellcode[] ="\xEB\x5D\x5F\x8B\xF7\x80\x3F";
void* addr=0;
addr=&Demoshellcode[0];
__asm call addr
return 0;
}

我们是否也可以将其视为标准C++ 代码?如果不是,需要进行哪些修改才能使其成为标准C++代码?

最佳答案

我将使用“标准”来排除扩展,但不排除实现定义的行为(无论如何都几乎不可能避免)或有条件支持的功能。

不,这个例子不是标准的,因为 __asm 是一个扩展。您必须使用标准的 asm(...)(具有实现定义的行为),但 VC++ 不支持 asm()

您还可以将指针转换为函数指针(在 C++11 中有条件地支持,具有实现定义的行为)并调用它。

int main() {
char Demoshellcode[] ="\xEB\x5D\x5F\x8B\xF7\x80\x3F";
void (*func_ptr)(void) = reinterpret_cast<void (*)(void)>(&Demoshellcode);
func_ptr();
}

我实际上并不知道上面的行为在任何实现中是否符合预期。在现代系统上,您必须处理 NX 位(它允许标记内存,以便无法执行存储在该内存中的指令)。

(将对象指针转换为函数指针是对 C++03 的扩展,但 C++11 将其添加为有条件支持的功能。)

关于c++ - 是标准的C++吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12097407/

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