找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 76|回复: 5

[源码] 炫实现读取PE结构获取EXE图标

[复制链接]

54

主题

72

回帖

525

积分

版主

积分
525
发表于 4 天前 | 显示全部楼层 |阅读模式
转自易语言的PE提取图标例子(32位):

主要是涉及指针的操作,我对PE结构也不熟,照着例子抄过来的,由于支持指针操作,炫的代码相比易语言要少一些。


写这个例子时通过AI学到了一个重要的知识点:
假设pResDir 是一个结构体指针,pResDir + 1 和 (字节型*)pResDir + 1 的结果不一样,是因为这两者之间存在类型转换和指针算术运算的差异。

pResDir + 1:

在这个表达式中,pResDir 是一个结构体指针,它的数据类型是某个结构体类型。
当你对pResDir进行加1操作时,实际上是在执行指针算术,将指针移动到下一个结构体的大小。
也就是说,pResDir + 1 会将pResDir指向的地址加上结构体的大小,然后指向新的地址。
(字节型*)pResDir + 1:

在这个表达式中,pResDir被强制转换为字节型*类型,也就是BYTE*或char*。
当你对(字节型*)pResDir进行加1操作时,你实际上是在执行字节级别的指针算术,将指针移动一个字节。
也就是说,(字节型*)pResDir + 1 会将pResDir指向的地址加上1,然后指向新的地址。
因此,pResDir + 1 和 (字节型*)pResDir + 1 的结果不一样,因为它们进行的是不同级别的指针算术。前者是基于结构体的大小,后者是基于单个字节。

如果你想按字节移动指针,你应该使用(字节型*)pResDir + 1。如果你想按结构体的大小移动指针,你应该使用pResDir + 1。根据你的需求,选择适当的方式。


这个知识点对于指针操作相当于重要,如果理不清楚,你就会晕,到时候指针指向什么数据就是未知的了。







我本想尽量把注释写详细点,但PE结构确实比较复杂,好多地方我也没弄清楚,反正例子是能正常跑起来{:7_432:},大家自己研究研究吧!


附件:
游客,如果您要查看本帖隐藏内容请回复


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

63

主题

216

回帖

1010

积分

管理员

积分
1010
发表于 4 天前 | 显示全部楼层
感谢大佬分享

18

主题

43

回帖

254

积分

中级会员

积分
254
发表于 4 天前 | 显示全部楼层
厉害啊大佬,不过你这个对加了PE壳的可能不适用吧
PE解密的可以看看B站小甲鱼的视频,我记得没加密的PE结构是固定的
也就是说,你把你的函数完善一下以后,可以一次性把PE解析到位
再要啥取啥就行
指针的加减运算,就是按指针的数据类型加减。。。

5

主题

6

回帖

110

积分

注册会员

积分
110
发表于 4 天前 | 显示全部楼层
支持支持

9

主题

17

回帖

140

积分

注册会员

积分
140
QQ
发表于 4 天前 | 显示全部楼层
感谢分享

0

主题

70

回帖

488

积分

中级会员

积分
488
发表于 3 天前 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|炫语言 | 炫彩界面库 | 用户所需, 正是我所做! ( 鄂ICP备2023014763号-1 )

GMT+8, 2024-11-21 17:46 , Processed in 0.072907 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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