数组组装

逆向工程 拆卸 视窗 二元分析 C 静态分析
2021-06-22 10:54:17

我正在反转我的 C 数组的程序,我将数字存储在这样的数组中......

int marks[5];
marks[0] = 1;
marks[1] = 3;
marks[2] = 2;
marks[3] = 7;
marks[4] = 9;

所以编译器向我展示了反汇编......

在此处输入图片说明

实际上,我的问题是为什么它会这样存储?imul使用再存储 1 然后再存储 7,然后shl用于存储 3、2 和 9。任何人都可以帮忙吗?随意编辑它*

1个回答

那些是指针算术标记是 <<<;ADDRESS;>>>>> 假设 0x10000000
它指向一个整数,其大小在 32 位机器中为 4 所以下一个整数将在 0x10000004 ,下一个将在 0x10000008 和很快

&marks[0] = 0x10000000
&marks[1] = 0x10000004
&marks[2] = 0x10000008,c,10,14,18,.....nn

反汇编中的 4 个中的每一个都是 sizeof(int) == 4
它们乘以 0 、 2^0 、 2^1,3 和 2^2 得到 0,1,2,3,4 作为索引