
- 定 义
- 某种股票每股市价与每股盈利的比率
- 作 用
- 衡量股票投资价值
- 分 类
- 静态市盈率、动态市盈率
- 中文名
- 市盈率
- 外文名
- Price Earnings Ratio,简称P/E或PER [2]
- 计算方法
- 股票的价格和每股收益的比率
-
PE
2013-12-09 22:04:59Tutorial 1: Overview of PE file format PE stands for Portable Executable. It's the native file format of Win32. Its specification is derived somewhat from the Unix Coff (common object file format).Tutorial 1: Overview of PE file format
PE stands for Portable Executable. It's the native file format of Win32. Its specification is derived somewhat from the Unix Coff (common object file format). The meaning of "portable executable" is that the file format is universal across win32 platform: the PE loader of every win32 platform recognizes and uses this file format even when Windows is running on CPU platforms other than Intel. It doesn't mean your PE executables would be able to port to other CPU platforms without change. Every win32 executable (except VxDs and 16-bit Dlls) uses PE file format. Even NT's kernel mode drivers use PE file format. Thus studying the PE file format gives you valuable insights into the structure of Windows.
The above picture is the general layout of a PE file. All PE files (even 32-bit DLLs) must start with a simple DOS MZ header. We usually aren't interested in this structure much. It's provided in the case when the program is run from DOS, so DOS can recognize it as a valid executable and can thus run the DOS stub which is stored next to the MZ header. The DOS stub is actually a valid EXE that is executed in case the operating system doesn't know about PE file format. It can simply display a string like "This program requires Windows" or it can be a full-blown DOS program depending on the intent of the programmer. We are also not very interested in DOS stub: it's usually provided by the assembler/compiler. In most case, it simply uses int 21h, service 9 to print a string saying "This program cannot run in DOS mode".DOS MZ headerDOS stubPE headerSection tableSection 1Section 2Section ...Section nIf we view the PE file format as a logical disk, the PE header as the boot sector and the sections as files, we still don't have enough information to find out where the files reside on the disk, ie. we haven't discussed the directory equivalent of the PE file format. Immediately following the PE header is the section table which is an array of structures. Each structure contains the information about each section in the PE file such as its attribute, the file offset, virtual offset. If there are 5 sections in the PE file, there will be exactly 5 members in this structure array. We can then view the section table as the root directory of the logical disk. Each member of the array is equvalent to the each directory entry in the root directory.
The section table of this file looks like the following:
Section Virtual Size Virtual Offset Raw Size Raw Offset Characteristics .text 0000024C 00001000 00000400 00000400 60000020 .rdata 000001DC 00002000 00000200 00000800 40000040 .data 000000E0 00003000 00000200 00000A00 C0000040
That's all about the physical layout of the PE file format. I'll summarize the major steps in loading a PE file into memory below:
- When the PE file is run, the PE loader examines the DOS MZ header for the offset of the PE header. If found, it skips to the PE header.
- The PE loader checks if the PE header is valid. If so, it goes to the end of the PE header.
- Immediately following the PE header is the section table. The PE header reads information about the sections and maps those sections into memory using file mapping. It also gives each section the attributes as specified in the section table.
- After the PE file is mapped into memory, the PE loader concerns itself with the logical parts of the PE file, such as the import table.
xx -
Win10问题篇:使用微PE装机。(完整版教程)
2018-06-28 14:15:551.先下载微PE和系统。 微PE:http://www.wepe.com.cn/download.html Win10专业版(永久激活,关闭更新,未精简,适合专业人士和高端玩家。):https://pan.baidu.com/s/1qaDPPHwXUYZbKwikNcJ2oA (PS:系统自带的...1.先下载微PE和系统。
微PE:http://www.wepe.com.cn/download.html
Win10专业版(永久激活,关闭更新,未精简,适合专业人士和高端玩家。):https://pan.baidu.com/s/1qaDPPHwXUYZbKwikNcJ2oA
(PS:系统自带的关闭更新功能已过时,新方法在我另一篇博客https://blog.csdn.net/qq_15020543/article/details/81740237)
直接点击安装进U盘。
2.之后把下载的系统文件直接复制到U盘。
3.进入PE,不同电脑进入PE的方式各不相同。自行百度。类似于这种界面。
这时候如果没什么重要资料建议快速分区
否则就找到C盘格式化
点击确定,然后就可以去喝杯茶,看看小姐姐直播,等待就行了,建议设置成完成后重启,他会自动完成所有步骤,期间会重启数次,之后就可以享受电脑了。
欢迎大家加入我的DIY群,里面的老哥说话超好听的,781250704
-
win10系统安装教程(U盘PE+UEFI安装)
2019-10-07 19:26:03极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件, 选择安装到U盘(按照操作无需更改) 三、重启进入pe系统 1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入...一、准备工作
u盘,电脑一台,win10原版镜像(msdn官网)
二、下载wepe工具箱
极力推荐微pe(微pe官方下载)
下载64位的win10 pe,使用工具箱制作启动U盘打开软件,
选择安装到U盘(按照操作无需更改)
三、重启进入pe系统
1、关机后,将U盘插入电脑
2、按下电源后,按住F12进入启动项选择(技嘉主板是F12)
选择需要启动的设备。可以看到,同一个U盘有好几个选项,分别代表了UEFI和BIOS启动,选择UEFI启动。
进入PE系统
四、进行硬盘分区
- GPT 新型分区表类型,需对应UEFI启动,支持快速启动,支持2TB以上硬盘
- MBR 传统分区表类型,需对应Legacy启动,旧机器上比较常见
双击桌面的“分区工具DiskGeniUs”图标,打开工具
当硬盘为空闲状态时,点击“快速分区”按钮,进行硬盘分区操作,如图所示:
选择分区表类型为GUID,创建ESP分区勾上,创建MSR分区非必要,分区数目及分区大小根据自己的硬盘大小和个人习惯决定,建议系统分区大于50G,对齐分区是4K对齐,固态硬盘勾上,机械硬盘非必要。
选择好了之后确定。等待软件操作。。。。。
记得保存。接下来安装系统了五、安装系统
#####
#####
(一)右键你要安装的镜像,选择装载
(二)利用桌面上的windows安装器进行初步安装
1.打开桌面上的windows安装器,界面如下:
第一个框选择你装载那个镜像里面的install.wim,
第二个框选择引导分区所在的盘,(一般是c盘,或者100m左右的盘子)
第三个框选择你想要安装系统的盘(一般是c盘)如图:
2.记得选择你的版本(图中选了专业版)
3.三个标志都变绿说明设置成功,然后点击开始安装
按照图示选择,其他选项不用改,等待安装完成。
安装完成会重启(没有重启,自己重启), 进入真正的安装界面
(三)进入windows安装界面
然后等一会,去上个厕所的时间吧!
各种设置之后安装系统完成了,进入桌面了,win10一般不用装什么驱动。
-
PE结构解析
2020-06-16 00:35:53* PE头相对于文件的偏移,用于定位PE文件 如上图所示,DOS头一共40H个字节,即64个字节。 结尾处4个字节指向了标准PE头的位置:D8。在这中间的文字是编译器加入的一些描述信息。这些字.一. DOS头
原来为DOS系统使用,现在只需要记住如下两项。
1、DOC头: WORD e_magic * "MZ标记" 用于判断是否为可执行文件. DWORD e_lfanew; * PE头相对于文件的偏移,用于定位PE文件
如上图所示,DOS头一共40H个字节,即64个字节。
结尾处4个字节指向了标准PE头的位置:D8。在这中间的文字是编译器加入的一些描述信息。这些字节是可以修改的。
二. NT头
NT头中包括了标准PE头和可选PE头。
struct _IMAGE_NT_HEADERS { 0x00 DWORD Signature; //E8的位置,也就是DOS头中e_lfanew指向的位置。 0x04 _IMAGE_FILE_HEADER FileHeader; 0x18 _IMAGE_OPTIONAL_HEADER OptionalHeader; };
三. 标准PE头
标准PE头一共20个字节。
2、标准PE头: WORD Machine; * 程序运行的CPU型号:0x0 任何处理器/0x14C 386及后续处理器 WORD NumberOfSections; * 文件中存在的节的总数,如果要新增节或者合并节 就要修改这个值. DWORD TimeDateStamp; * 时间戳:文件的创建时间(和操作系统的创建时间无关),编译器填写的. DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; * 可选PE头的大小,32位PE文件默认E0h 64位PE文件默认为F0h 大小可以自定义. WORD Characteristics; * 每个位有不同的含义,可执行文件值为10F 即0 1 2 3 8位置1
将可以修改的位置改为F
如果Machine清零会提示版本过低,无法在此电脑上运行。
NumberOfSections:清零或者改为不正确的值仍然无法运行。
SizeOfOptionalHeader,Characteristics均不可清零。
Characteristics 每个位有不同的含义,可执行文件值为10F 即0 1 2 3 8位置1。
(此表只描述了15位的信息。不确定是否16位全部表示信息。)
用鼠标选中的部分就是标准PE头,一共20个字节。打开的这个软件的标准PE头的位置和前一个就不同了,DOS的末尾将指向了100H这个位置。
四. 可选PE头
可选PE头的大小,32位PE文件默认E0h 64位PE文件默认为F0h 大小可以自定义.
3、可选PE头: WORD Magic; * 说明文件类型:10B 32位下的PE文件 20B 64位下的PE文件 BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode;* 所有代码节的和,必须是FileAlignment的整数倍 编译器填的 没用 DWORD SizeOfInitializedData;* 已初始化数据大小的和,必须是FileAlignment的整数倍 编译器填的 没用 DWORD SizeOfUninitializedData;* 未初始化数据大小的和,必须是FileAlignment的整数倍 编译器填的 没用 DWORD AddressOfEntryPoint;* 程序入口 DWORD BaseOfCode;* 代码开始的基址,编译器填的 没用 DWORD BaseOfData;* 数据开始的基址,编译器填的 没用 DWORD ImageBase;* 内存镜像基址 DWORD SectionAlignment;* 内存对齐 DWORD FileAlignment;* 文件对齐 WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage;* 内存中整个PE文件的映射的尺寸,可以比实际的值大,但必须是SectionAlignment的整数倍 DWORD SizeOfHeaders;* 所有头+节表按照文件对齐后的大小,否则加载会出错 DWORD CheckSum;* 校验和,一些系统文件有要求.用来判断文件是否被修改. 每两个字节作为一个数,循环相加 WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve;* 初始化时保留的堆栈大小 DWORD SizeOfStackCommit;* 初始化时实际提交的大小 DWORD SizeOfHeapReserve;* 初始化时保留的堆大小 DWORD SizeOfHeapCommit;* 初始化时实践提交的大小 DWORD LoaderFlags; DWORD NumberOfRvaAndSizes;* 目录项数目 _IMAGE_DATA_DIRECTORY DataDirectory[16];
最后一项为数据目录,一共16个,第16个未定义。
将校验和的最高位改成11 22这样就没事,改为FF AA这样程序将会无法启动。
五. 节表
每个节表有28H个字节,即40个字节。在所有节表的末尾编译器还会添加40个0,标志着整个结构的结束。
#define IMAGE_SIZEOF_SHORT_NAME 8 typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAddress; DWORD VirtualSize; } Misc; DWORD VirtualAddress; DWORD SizeOfRawData; DWORD PointerToRawData; DWORD PointerToRelocations; DWORD PointerToLinenumbers; WORD NumberOfRelocations; WORD NumberOfLinenumbers; DWORD Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
1. 节表的名字, 8个字节。
2. Misc 双字 是该节在没有对齐前的真实尺寸,该值可以不准确。
3. VirtualAddress 节区在内存中的偏移地址。加上ImageBase才是在内存中的真正地址.
4. SizeOfRawData 节在文件中对齐后的尺寸.
5. PointerToRawData 节区在文件中的偏移.
6. PointerToRelocations 在obj文件中使用 对exe无意义
7. PointerToLinenumbers 行号表的位置 调试的时候使用
8. NumberOfRelocations 在obj文件中使用 对exe无意义
9. NumberOfLinenumbers 行号表中行号的数量 调试的时候使用
10、Characteristics 节的属性
六. 导出表
typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; // 未使用 DWORD TimeDateStamp; // 时间戳 WORD MajorVersion; // 未使用 WORD MinorVersion; // 未使用 DWORD Name; // 指向该导出表文件名字符串 DWORD Base; // 导出函数起始序号 DWORD NumberOfFunctions; // 所有导出函数的个数 DWORD NumberOfNames; // 以函数名字导出的函数个数 DWORD AddressOfFunctions; // 导出函数地址表RVA DWORD AddressOfNames; // 导出函数名称表RVA DWORD AddressOfNameOrdinals; // 导出函数序号表RVA } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
NumberOfFunctions:大于等于导出函数的个数。因为这个值 = .def末尾序号 - 首个序号,如果自定义的序号不是连续的,那么这个值自然会大于导出函数的个数。
末尾三个值都是RVA地址,可以写一个RVA ---> FOA的转换函数。AddressOfNames表里的地址也是RVA的,同样需要转换。
Base:为导出函数的其实序号,即给出的序号中第一个、最小那一个。
找(导出)函数的两种方式:
1. 通过名字导出 AddressOfNames表中获得序号,找对应位置的AddressOfOrdinals位置的值,这个值就指向了AddressOfFunctions表的下标,这个位置存储的就是名字对应的函数地址。
2. 通过序号导出 这里所说的序号也是就.def文件中定义的序号。序号 - 第一个序号 = AddressOfFunctions表的下标。
注意:所有的地址都是RVA都需要转换为FOA。
导入表
typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstThunk; //RVA 指向IMAGE_THUNK_DATA结构数组 }; DWORD TimeDateStamp; //时间戳 DWORD ForwarderChain; DWORD Name; //RVA,指向dll名字,该名字已0结尾 DWORD FirstThunk; //RVA,指向IMAGE_THUNK_DATA结构数组 } IMAGE_IMPORT_DESCRIPTOR; typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
加载前:
加载后:
加载前后不同,要用INT表查IAT表。
typedef struct _IMAGE_THUNK_DATA32 { union { PBYTE ForwarderString; PDWORD Function; DWORD Ordinal; PIMAGE_IMPORT_BY_NAME AddressOfData; } u1; } IMAGE_THUNK_DATA32; typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32; typedef struct _IMAGE_IMPORT_BY_NAME { WORD Hint; 函数地址表索引,不是导出序号 BYTE Name[1]; } IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
重定位表
1、通过IMAGE_DATA_DIRECTORY结构的VirtualAddress
属性 找到第一个IMAGE_BASE_RELOCATION
2、判断一共有几块数据:
最后一个结构的VirtualAddress与SizeOfBlock都为0
3、具体项 宽度:2字节
也就是这个数据
内存中的页大小是1000H 也就是说2的12次方 就可以表示
一个页内所有的偏移地址 具体项的宽度是16字节 高四位
代表类型:值为3 代表的是需要修改的数据 值为0代表的是
用于数据对齐的数据,可以不用修改.也就是说 我们只关注
高4位的值为3的就可以了.
4、VirtualAddress 宽度:4字节
当前这一个块的数据,每一个低12位的值+VirtualAddress 才是
真正需要修复的数据的RVA
真正的RVA = VirtualAddress + 具体项的低12位
5、SizeOfBlock 宽度:4字节
当前块的总大小
具体项的数量 = (SizeOfBlock - 8)/2
绑定导入表
就是提前写好导入表,不用加载dll的时候现修改。用绑定导入表验证是否有绑定。
typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR { DWORD TimeDateStamp; WORD OffsetModuleName; WORD NumberOfModuleForwarderRefs; // Array of zero or more IMAGE_BOUND_FORWARDER_REF follows } IMAGE_BOUND_IMPORT_DESCRIPTOR, *PIMAGE_BOUND_IMPORT_DESCRIPTOR;
OffsetModuleName地址不是RVA,而是第一个DESCRIPTOR的值+OffsetModuleName。这么设计也许是为了每个结构节省2字节的内存吧。
之后看情况/心情更新
-
PE文件格式
2017-12-31 00:23:40Windows PE文件格式的图片: 请下载或者放大后查看。 上图中对部分字段的解释使用“未知”等字样,需要了解每个字段的详细意义,可以参考《Windows PE权威指南》 上图中定义的PE格式都可以从winnt.h文件... -
[网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
2020-03-25 21:11:33本系列虽然叫“网络安全自学篇”,但由于系统安全...本文将详细介绍PE文件格式,熟悉各种PE编辑查看工具,针对目标EXE程序新增对话框等,这也为后续PE病毒和恶意代码的攻防打下扎实基础。希望这篇基础文章对您有所帮助~ -
pefile解析PE格式
2019-07-03 00:29:37import os,sys ...import pefile import pydasm import struct #print sys.argv def show_section(pe): print "[sections layout:]" print "#"*45 print "%10s %10s %10s %10s" % ("section"... -
PE复写:模仿PE加载过程
2020-06-02 22:41:03FileBuffer->...这个过程还是单纯的只是PE文件的读取,详情见上一章,这里只截取部分代码 2.FileBuffer到ImageBuffer 这是个文件拉伸的过程,如果PE文件的内存对齐和硬盘对齐不一样,那么这个文 ... -
PE注册表编辑器PE注册表编辑器
2011-06-07 22:27:45PE注册表编辑器 PE注册表编辑器 PE注册表编辑器 PE注册表编辑器 PE注册表编辑器 PE注册表编辑器 -
史上最好用的pe ,微pe, 最初版本 珍藏版
2018-11-05 17:49:52微pe 最良心 最纯洁的pe工具箱 这是最初版本 珍藏版 -
消除Pe177,pe150警告
2019-09-03 17:04:03IAR写代码是,定义了函数/变量没调用会出现Pe177和Pe150警告。当很多时就比较烦人,都看不到其他原因的警告了,所以想屏蔽它。 1、百度结果如下: 加语句: #pragma diag_suppress=Pe177 // never referenced ... -
PE1-什么是pe
2018-09-29 10:06:41PE是什么? PE即 Portable Executable(可移植的执行体)。它是 Win32环境自身所带的执行体文件格式。它的一些特性继承自 Unix的 Coff 文件格式。“portable executable”(可移植的执行体)意味着此文件格式是跨win... -
PE结构
2019-05-26 14:15:48pe结构.pdf 下载:...重温PE结构: 1、DOS头 struct _IMAGE_DOS_HEADER { 0x00 WORD e_magic;//"MZ标记" 用于判断是否为可执行文件. 0x02 WORD e_cblp; 0x04 WORD e_cp; 0x06 WORD ... -
PE知识复习之PE新增节
2018-10-02 19:35:53PE知识复习之PE新增节 PE知识复习之PE新增节 一丶为什么新增节.以及新增节的步骤 例如前几讲.我们的PE文件在空白区可以添加代码.但是这样是由一个弊端的.因为你的空白区节属性可能是只读的不能执行.如果你... -
PE文件
2016-07-30 17:49:12PE文件初识 PE(Portable Execute)文件是Windows下可执行文件的总称,wiki百科[12]将PE文件描述为“可移植的可执行文件”,是一种主要使用在32位和64位Windows操作系统上的文件格式。常见的PE文件格式主要用于DLL文件... -
微PE制作U盘启动盘教程
2019-06-12 21:53:23一、微PE简介 微PE是目前最受欢迎的PE工具,工具纯净无广告,功能强大,极致精巧。微PE可以安装到当前系统下,开机通过启动菜单可以进入;也可以将PE安装到U盘、移动硬盘,当Windows系统无法进入时,可以通过U盘或... -
PE格式
2016-08-16 15:17:21PE格式 要想学脱壳,第一步就得掌握PE格式,PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows平台上的主流可执行文件格式。 Microsoft Visual C++提供的WINNT.H里有PE... -
PE总结16--PE结构图和PE结构
2015-12-28 11:27:39下载链接 http://download.csdn.net/detail/obuyiseng/9380071 里面含有两个文件: PE结构图:是由看雪论坛得到的,不知道作者是谁 PE结构:这里存放的是PE结构 -
微PE工具箱制作PE系统
2018-03-09 22:45:36使用微PE工具箱制作PE系统的过程 工具: * 移动硬盘1T 或者格式化好的U盘 * Windows 系统 * WinPE安装包 1、下载WinPE工具箱 下载地址:http://www.wepe.com.cn/ 以Win10PE,移动硬盘作为启动盘为例: ... -
黑莓开源逆向工程 PE 工具——PE Tree
2020-08-05 10:51:19近日,在 Black Hat USA 2020 安全大会上,黑莓公司开源了其逆向工程 PE 文件的工具 PE Tree。这是一款基于 Python 的应用程序,适用于 Linux、Mac、Windows 系统,可用于逆向工程和分析 Portable Executable(PE)... -
使用pefile解析PE文件格式
2016-07-06 17:04:21pefile用于解析PE文件格式,github提供下载使用,并给出了使用范例。 https://github.com/erocarrera/pefile import pefile pe = pefile.PE('notepad.exe') AddressOfEntryPoint = hex(pe.OPTIONAL_HEADER.... -
PE操作类--判断PE文件
2019-06-10 20:34:09判断一个文件是否为合法PE文件通常只需判断“MZ”头和“PE”头 //判断是否为PE结构 BOOL CPe32 ::IsPeFile(TCHAR* pFileName) { if (pFileName == NULL) { return FALSE ; } ... -
WINDOWSPE权威指南
2012-08-15 18:49:24WINDOWSPE权威指南PDF清晰带书签,赞啊~ -
WindowsPE.iso
2012-10-23 15:50:20PE安装程序 -
PE文件简介
2019-05-01 21:59:52PE文件 PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是...64位的可执行文件称为PE+或PE32+,是PE(PE32)的一种扩展形式(请注意不是PE64)。 结构 (用个网上的图) ...
-
Keka_1.1.19_xclient.info.dmg
-
KS104-V100_CNNEW.pdf
-
设计模式之策略模式
-
豆瓣电影前250电影名,评分,推荐语,播放链接相关信息
-
最受欢迎的FIL币怎么做才能使矿工们收益最大化呢?
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
比特币的挖矿原理
-
vuex的使用场景
-
svn更新出现乱码,请执行清理
-
大数据技术之Shell.docx
-
【Python-随到随学】FLask第二周
-
知识图谱从新手到入门
-
采用Remi纯Python写前端页面,范例8
-
MySQL 查询与高级查询(多表、嵌套和正则表达式)
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
单片机听课笔记1-8课-(金沙滩2014年更新).doc
-
vue前端页面使用el-upload组件加载tiff格式图片
-
mysql-connector-odbc-5.3.4-win32.7z
-
雅诗兰黛-源码
-
用Go语言来写区块链(一)