首页
社区
课程
招聘
关于PE格式中变量的问题
发表于: 2012-12-5 16:41 3865

关于PE格式中变量的问题

2012-12-5 16:41
3865
源代码中的变量生成pe文件时是怎么存储在pe文件中的?已初始化的全局变量和静态局部变量一般存在.DATA节中,未初始化的全局变量保存在.bss 段中,局部变量保存在堆栈中这些我都知道。我想知道的是源代码中的不管是局部变量还是全局变量被编译成pe文件时二进制或者是汇编级是什么样子的?我的理解是把源代码中的变量分类放在.data~.bss段中,然后源代码中的局部变量在汇编级是push xxx 这种进栈代替,而.data段中全局和静态变量运行的时候载入内存,然后再源代码使用该变量的地方用.data相应的内存地址代替,这个问题困扰我很久了,不知道我理解的是否正确,还请高手指正。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 55
活跃值: (531)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
很抱歉楼主我没搞清楚你的问题。
PE中已初始化全局量和静态量存放在.data段。
未初始化变量存在.bss段。
程序载入时整个PE文件载入内存。
对全局量的访问就是mov Reg,[addr]
对局部变量的初始化编译后就是sub esp,0xXX ,mov [ebp-XX],value。
2012-12-5 17:12
0
雪    币: 524
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=hrpirip;1123395]很抱歉楼主我没搞清楚你的问题。
PE中已初始化全局量和静态量存放在.data段。
未初始化变量存在.bss段。
程序载入时整个PE文件载入内存。
对全局量的访问就是mov Reg,[addr]
对局部变量的初始化编译后就是sub esp,0xXX ,mov [ebp-XX],valu...[/QUOTE]

对全局量的访问就是mov Reg,[addr] 这个addr地址是怎么来的?是.data载入内存中的地址?
2012-12-5 17:21
0
雪    币: 281
活跃值: (237)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那个ADDR是编译器生成的地址,是RVA,LOAD时加上基址。
我想LZ其实是不太懂加载PE文件运行的原理而已,去搜一下。
2012-12-6 14:23
0
雪    币: 524
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个地址当然是编译器生成的,这个地址是不是在.data段中然后运行的时候载入内存,以后使用的时候就调用这个地址?
2012-12-6 16:57
0
雪    币: 4
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
.bss段对应汇编是伪指令(声明变量占用多少字节内存),在PE文件中不占地方,载入内存时占用内存。
局部变量和已初始化静态、全局变量LZ理解应该没问题。
2012-12-6 19:58
0
游客
登录 | 注册 方可回帖
返回
//