吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 808|回复: 1
收起左侧

[新手问题] 有关指针反汇编中内存分配的问题

[复制链接]
叫我莫言 发表于 2023-4-3 19:04
指针反汇编剖析1.png




指针反汇编剖析2.png

如题两个程序的反汇编,在指针内存存储方面  如果有多个指针,嵌套叠加


第一层指针存储的地址反而最高


而 P7 需要多层解引用才能找到 p的值的指针反而距离p变量更近呢?

到底是为什么呢?

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
PEKING1 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

DEATHTOUCH 发表于 2023-4-3 21:21
我来回答一下为什么p7和p的内存近,一个很重要的原因是取决于你的变量声明顺序,由于 int p = 10; 之后就紧接着 int *******p7; 了,所以它俩最近。
关于每个指针之间内存地址的差,这个可能和你的编译器有关,我用32位mingw的gcc 8.5跑出来的结果反汇编是这样的:
[Asm] 纯文本查看 复制代码
   0x000615a6 <+6>:     mov    DWORD PTR [ebp-0x8],0xa ; p
   0x000615ad <+13>:    lea    eax,[ebp-0x8]
   0x000615b0 <+16>:    mov    DWORD PTR [ebp-0x20],eax ; p1
   0x000615b3 <+19>:    lea    eax,[ebp-0x20]
   0x000615b6 <+22>:    mov    DWORD PTR [ebp-0x1c],eax ; p2
   0x000615b9 <+25>:    lea    eax,[ebp-0x1c]
   0x000615bc <+28>:    mov    DWORD PTR [ebp-0x18],eax ; p3
   0x000615bf <+31>:    lea    eax,[ebp-0x18]
   0x000615c2 <+34>:    mov    DWORD PTR [ebp-0x14],eax ; p4
   0x000615c5 <+37>:    lea    eax,[ebp-0x14]
   0x000615c8 <+40>:    mov    DWORD PTR [ebp-0x10],eax ; p5
   0x000615cb <+43>:    lea    eax,[ebp-0x10]
   0x000615ce <+46>:    mov    DWORD PTR [ebp-0xc],eax ; p6
   0x000615d1 <+49>:    lea    eax,[ebp-0xc]
   0x000615d4 <+52>:    mov    DWORD PTR [ebp-0x4],eax ; p7

可以看到每个指针都是挨着的。
而且细心观察可以发现内存排列的方式还有点不一样(p7在ebp-0x4而p在ebp-0x8)。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 12:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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