如何编写与此程序集代码相等的c/c++代码

how do write c/c++ code that equal this assembly code?

本文关键字:代码 c++ 程序集 何编写      更新时间:2023-10-16

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

喜欢memcpy(p,"11111 2244551",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。。。

-

-

附加(来自IDA(:

mov     dword ptr [eax+10h], 41424344h
mov     dword ptr [eax+14h], 45464748h
mov     word ptr [eax+18h], 65h

我想要c/c++代码。

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

通常情况下,您不能

C++11(或C11(的语义,如它们各自的标准(n3337表示C++11,n1570表示C11(所定义的,比x86-64机器代码(或汇编程序(的语义具有更高的级别。您可以要求C++(或C(代码的可观察行为与您的汇编代码类似(但这是另一个问题(。

注意可能的编译器优化、序列点、未定义的行为、反编译器(它们解决了一个棘手或不可确定的问题,可证明相当于停止问题(、代码混淆和好像规则。还可以阅读有关静态源代码分析、恶意软件分析和Rice定理的内容。

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

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

(所以你很困惑,严格意义上你的问题没有意义,所以不清楚(。

请注意,您的汇编程序代码可能是用您认为已使用的编译器生成的。例如,后处理器可能在链接器之前"转换"汇编程序代码(并且仍然保留原始的C或C++语义(。