ved*_*ved 5 c++ portable-executable
我无法强制 msvc10 将 const 对象放入 .rdata 部分。它总是以 .data 结尾,完美初始化(意味着没有动态初始化/运行时构造函数执行)。(使用“发布”构建的标准项目设置进行编译)。我不明白为什么以下代码不能将 'obj1' 放入 .rdata PE 部分:
typedef struct _Struct1 {
int m1;
_Struct1(int p1): m1(p1) {};
_Struct1() {};
} Struct1;
class Class1 {
public:
Class1() {};
Class1(int p1, int p2): m1(p1), m2_struct(p2) {};
int m1;
Struct1 m2_struct;
};
const Class1 obj1(1, 2);
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么 obj1 不转到 rdata(在 IDA 中检查)以及在当前情况下如何强制它?Tnx。
小智 3
这些对象具有重要的构造函数,因此必须动态而不是静态地初始化它们。因此,它们位于该.data部分(所有动态初始化的对象都位于该部分,因为它们的内存需要在初始化期间发生变化),即使编译器能够在这种情况下优化构造函数调用。
实际上,没有什么可以阻止编译器在这种情况下使用.rdata。只是它的开发者没有实现这一点。
| 归档时间: |
|
| 查看次数: |
1168 次 |
| 最近记录: |