Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么样的C++;代码将生成此x86汇编指令?_C++_Assembly_X86_Reverse Engineering - Fatal编程技术网

C++ 什么样的C++;代码将生成此x86汇编指令?

C++ 什么样的C++;代码将生成此x86汇编指令?,c++,assembly,x86,reverse-engineering,C++,Assembly,X86,Reverse Engineering,我一直在“反向工程”我自己的一些库,以了解更多关于编译器优化。我已经看到我的一个最简单的类构造函数(一个4-D向量)被编译为以下内容: fldz ; push +0.0 to FPU stack mov eax, ecx ; set eax to this (ecx) mov dword

我一直在“反向工程”我自己的一些库,以了解更多关于编译器优化。我已经看到我的一个最简单的类构造函数(一个4-D向量)被编译为以下内容:

fldz                                                        ; push +0.0 to FPU stack
mov     eax, ecx                                            ; set eax to this (ecx)
mov     dword ptr [eax], offset data_??_7vector_t@data@@6B@ ; what is this doing?
fst     dword ptr [eax+4]                                   ; assign this->first
fst     dword ptr [eax+8]                                   ; assign this->second
fst     dword ptr [eax+0Ch]                                 ; assign this->third
fstp    dword ptr [eax+10h]                                 ; assign this->fourth, pop FPU stack
retn                                                        ; return this (eax)
在第三行,我不知道这是怎么回事。我最初认为这可能是某种优化,它引用了一些固定数据的硬编码块


为了确定它可能是什么,我将DLL加载到一个容器进程中,然后附加一个调试器,并在
data???的位置查看数据_t@data@@6B@
,但它只是
db偏移量未知的向量_t@data2@@6B@
。我遵循第二个标签,有一个数据区域与我在项目中识别的任何内容都不对应,即使在将前8个字节转换为双字节后也是如此

我使用的编译器是MSVC++with Visual Studio 2013,完全优化,没有任何高级指令集(SSE等已关闭)


C++代码将生成什么样的指令?< /P> < P>该行正在给正在构建的对象分配一个VTABLE指针。


该步骤将在其第一个插槽中插入一个vtable指针,并将应用程序使用的4d向量归零。

不确定
数据前缀来自何处,但
是修饰(损坏)名称的标准标记,您可以使用
undname
工具对其进行破译:

>undname ??_7vector_t@data@@6B@
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.

Undecoration of :- "??_7vector_t@data@@6B@"
is :- "const data::vector_t::`vftable'"

是的,它只是初始化vtable指针。

最好在上问这个问题,它只处理这类问题。
数据???\u 7vector_t@data@@6B@
我认为这是一个错误的名称。@Sashaalm没有意识到有一个SE站点用于此。谢谢。啊,我不知道微软有这样的工具。我在另一个程序中使用了这个函数,它只对导出的函数名进行解纠缠。谢谢你多给我一点!