c++ - 反汇编 C++ 中全局变量的 .rodata 部分(objdump -D)
问题描述
我希望更好地理解与 C++ 相关的汇编指令。我编写了一个简单的 .cc 文件来尝试对其进行逆向工程,但我无法理解发生了什么。最终,我想更深入地了解在全局变量领域中调用 main 之前执行了什么。
y1
和y2
变量是如何初始化的?大会在做什么?
这是代码:
#include <iostream>
#include <array>
struct y {int i; int j;};
const y y1{7,2}, y2{6,4};
int k = 9;
int jy = k;
int main() {}
这是生成的反汇编objdump -D
:
00000000004007e4 <_ZL2y1>:
4007e4: 07 (bad)
4007e5: 00 00 add %al,(%rax)
4007e7: 00 02 add %al,(%rdx)
4007e9: 00 00 add %al,(%rax)
...
00000000004007ec <_ZL2y2>:
4007ec: 06 (bad)
4007ed: 00 00 add %al,(%rax)
4007ef: 00 04 00 add %al,(%rax,%rax,1)
...
解决方案
变量由静态初始化初始化,这意味着在任何代码(必须)执行之前。该实现通过将内存映像存储在已编译的二进制文件中来实现这一点。
查看十六进制值:它们与您在初始化中分配的数字相匹配。这些根本不是指令。add
反汇编程序只是出于无知而打印出来的。
推荐阅读
- python - 我尝试使用从网站 uning selenium 获取的数字进行计算,但在 str 到 int 转换时卡住了
- node.js - 使编码事物不确定为什么它不起作用-NodeJS
- javascript - JS:如何在被窗口事件调用时获取“this”
- javascript - 为什么返回一个空数组?AJAX
- php - 如何将 http 客户端与 ApiResource 链接
- r - 在R中进行二项式展开
- javascript - ScrollTo 动画反应弹簧
- reactjs - 不能在 useEffect 中使用 audio.play(反应钩子)
- node.js - Express 中间件不呈现视图
- c# - 我可以在我的子类中重复使用我的超类的可选构造函数参数吗?