如何编写与此汇编代码相等的c/c++代码?

如何编写与此汇编代码相等的c/c++代码?,c++,c,assembly,C++,C,Assembly,MSVC,在c++11、/O1或/O2之前 像 memcpyp,111112244551,n 但11111 2244551是立即值,不在“rdata”部分 汇编代码: eax指向堆内存区域,而不是堆栈内存区域 mov [eax+10h], 30303030h mov [eax+14h], 31323334h mov [eax+18h], 35353535h mov [eax+1ch], 3334h 如何编写c/c++代码?请 不要: p[0]=xx;p[1]=x

MSVC,在c++11、/O1或/O2之前

像 memcpyp,111112244551,n

但11111 2244551是立即值,不在“rdata”部分

汇编代码: eax指向堆内存区域,而不是堆栈内存区域

    mov [eax+10h], 30303030h
    mov [eax+14h], 31323334h
    mov [eax+18h], 35353535h
    mov [eax+1ch], 3334h
如何编写c/c++代码?请

不要:

p[0]=xx;p[1]=xx;p[n]=xx

-

-

国际开发协会的补充:

    mov     dword ptr [eax+10h], 41424344h
    mov     dword ptr [eax+14h], 45464748h
    mov     word ptr [eax+18h], 65h
我想要c/c++代码

如何编写与此机器代码相等的c/c++代码

一般来说,你不能

根据C++11各自标准的定义,C++11或C11对C11的使用级别高于x86-64机器代码或汇编程序的使用级别。您可以要求C++或C代码,其可观察的行为类似于汇编代码中的一个,但这是一个不同的问题。 意识到他们可能解决一个或一个问题,可证明等同于该问题,的和。还可以阅读关于,和

您可能会问,但这是一个非常不同的问题,即如何使某些特定的编译器版本和优化细节变得重要,当然,大量的编译器会生成特定的代码段。一般来说,除了ASM指令之外,没有答案,其解释和语义不是由标准定义的,而是由特定的编译器或C或C++实现。

请注意,编程语言是规范,而不是软件

所以你很困惑,严格来说你的问题毫无意义,所以不清楚


请注意,您的汇编代码可能是由您认为使用过的编译器生成的。例如,后置处理器可以在链接器之前转换汇编代码,并且仍然保留原来的C或C++语义。没有c/c++这样的东西。不清楚你在问什么。这是汇编代码,不是机器代码。前者是可能的,后者不是那么多。你说的p[0]=xx是什么意思;p[1]=xx;p[n]=xx。。。?这就是用C编写它的方式,但后缀是0x30303030,而不是h。一些编译器会将memcpy优化为立即存储而不是实际副本,特别是在对齐未知或SSE被禁用的情况下。你是在问如何编写C语言来编译这个asm吗?这完全取决于您的编译器。作为一种语言,C不区分即时数据和rdata,因此从抽象语言的角度来看,这个问题毫无意义。常量数据中的memcpy实际上可能会变成预期的机器代码,我猜。。。p[0]=xx有什么不对;,这可能是该代码最直接的asm-to-C翻译,它最有可能被编译回类似的机器代码。彼得·科尔德斯(Peter Cordes)的《忍无可忍》(Ninjaed),他更准确、更准确地说出了我的想法: