首页
社区
课程
招聘
未解决 [求助]winnt.h和PE是什么关系,为什么exe的PE结构会根据winnt.h改变?
发表于: 2020-5-9 16:33 2855

未解决 [求助]winnt.h和PE是什么关系,为什么exe的PE结构会根据winnt.h改变?

2020-5-9 16:33
2855

exe格式的文件,在编译时,会用到winnt.h吗?为什么和里面的结构是对应的?


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 1783
活跃值: (1263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
PE是Windows可执行程序的数据结构,winnt.h 是Visual Studio 提供的头文件,二者没有任何关系。
winnt.h 只是提供解析 PE 文件的结构体,方便开发者用代码解析 PE 文件
编译时一般不会用到 winnt.h,包含 windows.h 时才有可能用到,比如这句代码:
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)pFileAddress;
2020-5-9 16:50
1
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Barrientos PE是Windows可执行程序的数据结构,winnt.h 是Visual Studio 提供的头文件,二者没有任何关系。 winnt.h 只是提供解析 PE 文件的结构体,方便开发者用代码解析 PE ...
+5 谢谢大佬,“winnt.h 只是提供解析 PE 文件的结构体,方便开发者用代码解析 PE 文件“,这句有些听不懂,这个头文件是有实际作用,还是只用来看的?如果有实际作用,它主要用来做什么呢?
2020-5-9 16:56
0
雪    币: 1783
活跃值: (1263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Windows.h是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是:
Windef.h 基本数据类型定义。
Winnt.h 支持Unicode的类型定义。
Winbase.h Kernel(内核)函数。
Winuser.h 用户界面函数。
Wingdi.h 图形设备接口函数。
以上来自百度百科---------------------------------
以解析PE为例,你可以不调用 winnt.h ,但是你得自己定义 PE 的数据结构,winnt.h 只是帮你打包好了 PE 的数据结构,自己直接调用就行了
winnt.h 在代码中有什么作用,取决于你在代码中调用 wint.h 中的哪部分的数据结构
2020-5-10 13:09
1
雪    币: 5514
活跃值: (2254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Barrientos Windows.h是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是: Windef.h 基本数据类型定义。 Winnt. ...
winnt.h本身与编译exe无关,但要读取和操作pe需要按一定的结构去读取,winnt.h已经都定义好结构了,我们就可以利用他们定义好的结构,在此基础之上去搞,这样减轻工作量,我理解的对吗?
2020-5-10 14:59
0
雪    币: 1783
活跃值: (1263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
敏而好学 winnt.h本身与编译exe无关,但要读取和操作pe需要按一定的结构去读取,winnt.h已经都定义好结构了,我们就可以利用他们定义好的结构,在此基础之上去搞,这样减轻工作量,我理解的对吗?
对的,可以这么理解。可以参考知乎这个答案
C语言为什么只需要include<stdio.h>就能使用里面声明的函数? - 醉卧沙场的回答 - 知乎
945K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2*7K9r3W2Z5N6g2)9J5k6h3y4G2L8g2)9J5c8Y4q4#2k6i4y4@1K9h3!0F1i4K6u0r3x3K6R3&6x3e0t1$3z5e0b7@1i4K6u0r3j5h3&6K6N6$3g2J5i4K6u0r3x3e0p5$3z5e0M7H3z5e0V1$3y4l9`.`.
答案里面用的是Linux下的 stdio 文件举例,Windows下的 winnt.h 也是一样的道理,设计思路是一样的。 
2020-5-10 18:51
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
敏而好学 winnt.h本身与编译exe无关,但要读取和操作pe需要按一定的结构去读取,winnt.h已经都定义好结构了,我们就可以利用他们定义好的结构,在此基础之上去搞,这样减轻工作量,我理解的对吗?
你的vs是2015版的吗?
2020-5-12 12:02
0
游客
登录 | 注册 方可回帖
返回