看流星社区

 找回密码
 注册账号
查看: 1956|回复: 0

取数组地址引发的血案(int*)(&a+1);(int*)((int)a+1);

[复制链接]

该用户从未签到

发表于 2017-6-1 12:56:36 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>
  2. int main(int argc, char* argv[])
  3. {
  4.         int a[4] = {1,2,3,4};
  5.         int *ptr1 = (int*)(&a+1);//4
  6.         int *ptr2 = (int*)((int)a+1);//20000000 把a强制变为整数+1
  7.         /*
  8.         00401000  /$  83EC 10       sub esp,0x10
  9.         00401003  |.  C74424 00 010>mov dword ptr ss:[esp],0x1
  10.         0040100B  |.  C74424 04 020>mov dword ptr ss:[esp+0x4],0x2
  11.         00401013  |.  8B4424 01     mov eax,dword ptr ss:[esp+0x1]
  12.         00401017  |.  6A 02         push 0x2
  13.         00401019  |.  50            push eax
  14.         0040101A  |.  6A 04         push 0x4
  15.         0040101C  |.  68 30704000   push xueAn.00407030                      ;  ASCII "%x--%x--%x
  16.         "
  17.         00401021  |.  E8 0A000000   call xueAn.00401030
  18.         00401026  |.  33C0          xor eax,eax
  19.         00401028  |.  83C4 20       add esp,0x20
  20.         0040102B  \.  C3            retn
  21.         dd esp
  22.         0018FF38  00000800
  23.         0018FF3C  00000001
  24.         0018FF40  00000002
  25.         0018FF44  00401B9C  返回到 xueAn.00401B9C 来自 xueAn.00401C5B
  26.         0018FF48  00407000  xueAn.00407000
  27.         dd esp+1
  28.         0018FF35  0000401A
  29.         0018FF39  01000008
  30.         0018FF3D  02000000
  31.         0018FF41  9C000000
  32.         0018FF45  0000401B
  33.         */
  34.         int  *ptr3 =  (int*)(a+1);//2
  35.         /*x86下 4---20000000---2 原因在于小端存储 ptr2指向了数组第二项“末尾”这个“末尾”不是真的末尾是真正意义上第二项开始地址,但由于是小端存储,先把2塞到了真正意义上的开始地址(想象下OD数据窗口)
  36.         于是就变成了02000000然后就会输出2000000
  37.         /*
  38.         内存分布如下
  39.         0x0001 --------0x0002---------0x0003-----------0x0004
  40.         01000000     02000000      03000000         04000000
  41.         */
  42.         printf("%x--%x--%x\n",ptr1[-1],*ptr2,*ptr3 );
  43.         return 0;
  44. }
复制代码
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-25 00:28

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表