【暗黑游戏源码在哪】【翻滚窗口源码】【liunx源码分析】pe加载器源码_加载pe程序什么意思

时间:2024-11-15 06:03:23 来源:vc 加壳 源码 编辑:睡眠追踪app源码

1.pe������Դ��
2.pe文件基本概念
3.dlopen和System.loadLibrary的区别
4.win8运行在U盘上,还能装win pe吗
5.操作系统的加载ELF,COFF,PE文件格式有什么区别
6.怎样为PE添加自己的脚本

pe加载器源码_加载pe程序什么意思

pe������Դ��

       答案:当PE文件通过Windows加载器载入内存后,内存中的器源版本称为模块映射文件的起始内存地址称为基地址。每个程序都有自己的码加虚拟地址空间,这个虚拟空间的意思内存地址称为虚拟地址。

       虚拟地址和相对虚拟地址之间的加载转换公式:虚拟地址=基地址+相对虚拟地址

pe文件基本概念

       模块标识模块 (MODULE) 在 PE 文件设计中涉及基本概念的回顾。术语 "MODULE" 表示一个可执行文件或 DLL 中在内存中加载的器源暗黑游戏源码在哪代码 (CODE)、数据 (DATA)、码加资源 (RESOURCES)。意思除代码和数据直接由程序使用外,加载模块还包括由 Windows 用于确定代码和数据加载位置的器源支撑数据结构。在 位 Windows 中,码加这些支撑数据结构位于模块数据库 (由 HMODULE 指示的意思段) 中。在 Win 中,加载这些数据结构位于 PE 文件头中,器源这里将简要解释。码加

       关于 PE 文件最重要的两个因素是,磁盘上的翻滚窗口源码可执行文件与它被 Windows 加载到内存后非常相似。Windows 加载器无需为从磁盘加载文件而创建进程。它使用内存映射文件机制将文件中的相似块映射到虚拟空间中。构建分析模型,PE 文件类似于预制的房屋。它本质上开始于一个空间,这个空间连接到其他空间的组件(例如,将其连接到 DLL 等)。对于 Win 的 DLL 来说,这个概念同样容易应用。一旦模块加载,Windows 可以有效地将其与其他内存映射文件同等对待。

       与 位 Windows 不同的是, 位 NE 文件加载器读取文件的一部分并创建内存中的不同数据结构表示模块。当数据段或代码段需要加载时,加载器必须从全局堆中申请一个段,从可执行文件中读取新鲜数据,liunx源码分析转到该位置,读取这些数据,并进行适当的修正。此外,每个 位模块都有责任记住当前使用的所有段选择器,无论该段是否已被丢弃。

       对于 Win 来说,模块使用的代码、数据、资源、导入表和其他需要的模块数据结构都在一个连续的内存块中。在这种情况下,只需知道加载器将可执行文件映射到何处即可。通过作为映像的一部分的指针,可以很容易地找到该模块的所有不同块。相对于虚拟地址另一个需要知道的新cc源码概念是相对于虚拟地址 (RVA)。PE 文件中的许多域使用术语 RVA 来指定。RVA 是项目相对于文件映射到内存的偏移。例如,加载器将文件映射到内存块的虚拟地址 0x 开始。如果映像中的实际表首址是 0x,则它的 RVA 是 0x。

       为了将 RVA 转换为有用的指针,只需将 RVA 值加到模块的基地址上即可。基地址是内存映射 EXE 和 DLL 文件的首址,在 Win 中这是一个重要的概念。方便起见,Windows NT 和 Windows9x 使用模块的基地址作为该模块的实例句柄 (HINSTANCE)。在 Win 中,术语 "实例句柄" 可能会导致混淆,因为该术语源自 位 Windows。在 位 Windows 中,北风网源码程序的每个副本得到自己分开的数据段(以及关联的全局句柄)以将其与其他副本区分开来,形成了术语 "实例句柄"。在 Win 中,每个程序不必与其他程序区别开来,因为它们共享相同的地址空间。术语 INSTANCE 维持了 位 Windows 和 位 Windows 之间的连续性。在 Win 中重要的是,你可以调用 GetModuleHandle() 对任何 DLL 访问其组件!如果 dllname 为 NULL,则得到执行体自己的模块句柄。这是非常有用的,如通常编译器生成的启动代码将取得这个句柄并将它作为参数 hInstance 传给 WinMain!

       最后,你需要理解的 PE 文件概念是 "块 (Section)"。PE 文件中的块等同于 NE 文件中的段或资源。块可以包含代码或数据。与段不同的是,块是内存中的连续空间,没有尺寸限制。当连接器和库为你建立并包含操作系统至关重要的信息的其他数据块时,这些块包含你的程序直接声明和使用的代码或数据。在一些 PE 格式描述中,块也称为对象。由于 "对象" 一词的含义如此广泛,只能将代码和数据称为 "块"。

扩展资料

       PE文件被称为可移植的执行体是Portable Execute的全称,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)

dlopen和System.loadLibrary的区别

       åŠ¨æ€é“¾æŽ¥åº“在 unix 下,习惯以 .so 为文件名结尾(通常还以 lib 开头)。而 Windows 下是以 .DLL 为文件后缀。Windows 在处理 dll 上还有一些细节容易被人忽略

       å¦‚果需要运行时主动加载一个动态链接库,windows 下可以使用 LoadLibrary 这个 kernel API (在 kernel.dll 中);unix 下是用 dlopen 。Windows 下找到 dll 中导出符号的地址,可以用 GetProcAddress ,而 unix 也有对应的 api ...

       è¿™äº›ç›¸äº’对应的 api ,似乎预示着对等的功能,但事实上是有区别的。

       DLL 事实上和 EXE 文件一样,同属 PE 格式的执行文件。对于隐式的引用外部符号,需要把外部符号所在的位置写在 PE 头上。PE 加载器将从 PE 头上找到依赖的符号表,并加载依赖的其它 DLL 文件。

       ä½†æ˜¯ï¼Œunix 上并非如此,so 文件大多为 elf 执行文件格式。当它们需要的外部符号,可以不写明这些符号所在的位置。也就是说,通常 so 文件本身并不知道它依赖的那些符号在哪些 so 里面。这些符号是由调用 dlopen 的进程运行时提供的。而 unix 下的执行文件本身会暴露自己静态链接的符号,(可以是自己本身实现的,或者是从静态库 .a 文件里链入的)。dlopen 将把这些符号通报给 dlopen 加载的 .so 文件,最终完成动态链接。(事实上 dlopen 还可以指定 mode ,完成更复杂的操作)

       å› ä¸ºè¿™ä¸ªåŒºåˆ«ï¼Œunix 下的 lua 解释器可以完全静态链接所有的 lua api ;我们为 lua 扩展的库,以 so 的形式存在被运行时加载不会有任何隐患。而 Windows 下,必须生成一个 luacore 的 DLL 文件,由 lua 解释器于扩展库共享 lua api (还包括 crt 的实现) 才不会出问题。

       ä¹Ÿå› ä¸ºè¿™ä¸ªåŒºåˆ«ï¼ŒVC 下才会有让 windows 开发新手困惑不解的动态链接 CRT ,静态链接 CRT ,多线程库,单线程库,等等的选项。没点点 windows 开发功力的人,多少都要在上面栽几个跟头。

       ä»ŽåŠ¨æ€é“¾æŽ¥åº“的这个设计上来看,个人感觉Windows 弄的糟糕透顶。尤其是对开发者来说是这样。至少我们在 windows 下做一个 dll 文件给大家使用还需要携带一个 .lib 文件;而 unix 下一般只需要有相应的头文件就够了。对于编写新的 .so ,找不到的符号可以就让它在那里,直到最终执行文件来把所有需要的符号联合到一起。windows 可以存在一个 dll 对另一个 dll 的隐式依赖;而 unix 下一般不需要让 so 和 so 有隐式依赖关系。这让我们全局替换类似 CRT 的东西变的困难许多;而以我自己的编程经验来看,好处却没有多少。

       unix 下需要用 ldconfig 来管理动态库,这比 windows 下 copy DLL 到当前目录下就可以用的方式,无疑提高了系统的安全性。

win8运行在U盘上,还能装win pe吗

       å¯ä»¥ã€‚

       åœ¨å¯åŠ¨é¡¹ä¸­å¢žåŠ WinPe的WIM文件就行了。

       åœ¨Win8中启动后,用BCDEDIT看,如下所示:

       Windows 启动加载器

       -------------------

       æ ‡è¯†ç¬¦ { bf6f5-f7-4c-a6d9-3cce}

       device ramdisk=[D:]\Disk.wim,{ 4ead--4b6b-9fe6-f8ba4b

       f}

       path \Windows\system\boot\winload.exe

       description Boot from Wim Image

       locale zh-CN

       osdevice ramdisk=[D:]\Disk.wim,{ 4ead--4b6b-9fe6-f8ba4b

       f}

       systemroot \Windows

       detecthal Yes

       winpe Yes

       ä»¥ä¸Šæ ‡è¯†ç¬¦{ bf6f5-f7-4c-a6d9-3cce}和{ 4ead--4b6b-9fe6-f8ba4bf}根据不同的机器,内容不同。

       å¦‚用BOOTICE软件来设置会非常方便。

       è¯•è¯•å§ã€‚

操作系统的ELF,COFF,PE文件格式有什么区别

       1. ELF(Executable and Linkable Format)和COFF(Common Object File Format)是两种不同的机器语言文件格式,分别针对不同的芯片平台。例如,ARM和x架构就有各自的汇编语言格式和寄存器设置。

       2. PE(Portable Executable)文件格式是在COFF指令结构基础上发展起来的,它为Windows操作系统中的可执行文件提供了一种封装形式。PE文件包含了DOS文件头、导入表、导出表、资源表等额外信息,这些信息帮助PE载入器按照特定流程加载和执行文件。

       3. 由于PE文件格式中包含了特定于操作系统的信息,如导入表和导出表,因此在不同的操作系统中,这些文件格式可能会有所不同。例如,即使是基于x架构的Linux和Windows系统,它们的可执行文件格式也是不兼容的。Linux的加载器无法识别Windows PE文件中的特定结构,因此Windows PE文件不能在Linux上执行。

       4. 尽管x平台上的COFF以及其他类似的代码格式在底层结构上可能相似,但由于操作系统的差异,这些格式在具体实现和结构上可能会有所不同。这些差异导致了不同操作系统间的文件格式不兼容,需要在加载和执行时进行适当的转换或适配。

怎样为PE添加自己的脚本

       一、使用Winpeshl.ini添加自定义脚本:

       可以使用Winpeshl.ini的文件来启动自定义的外壳应用程序。Winpeshl.exe将在启动期间处理Winpeshl.ini中的设置。使用文本编辑器(如记事本)创建具有以下文件目录结构的Winpeshl.ini文本文件。例如:

       [LaunchApp]

       AppPath = %SYSTEMDRIVE%/myshell.exe

       [LaunchApps]

       %SYSTEMDRIVE%/mydir/application1.exe, -option1 -option2

       application2.exe, -option1 -option2

       注:将AppPath项设置为外壳应用程序的路径。此路径可以是绝对路径,也可以使用环境变量(相对路径),例如%SYSTEMROOT%/System/Myshell.exe。AppPath 项不支持命令行选项。将此文件保存到WinPE系统映像的%SYSTEMROOT%/System下。

       二、使用Startnet.cmd添加自定义脚本:

       使用Startnet.cmd可以在WinPE系统中添加自定义的命令行脚本。默认情况下,WinPE系统包括Startnet.cmd脚本,此脚本位于WinPE系统映像的 %SYSTEMROOT%/System 中。当前,主要用Startnet.cmd来启动Wpeinit.exe。用于安装即插即用 (PnP) 设备、处理 Unattend.xml 设置以及加载网络资源。编辑Startnet.cmd 以包括自定义命令。

       注意:对于PnP和网络支持,请确保在自定义Startnet.cmd脚本中包含了对wpeinit的调用。

       三、使用Unattend.xml添加自定义脚本:

       运行imagex /info d:/boot.wim,查看WinPE系统映像的信息。我们要注意这一行:

       Image Count: 2

       说明此WinPE系统映像文件中其实包含了两个映像。每个映像的详细信息在后面有详细的说明。这里要特别说明的是我们需要编辑的是第二个名称为WDS的映像,因为WDS使用此映像来引导计算机。

       使用imagex命令加参数mountrw将 *.wim 加载到pemount目录中:

       imagex /mountrw c:/winpe2/pe2.wim 2 c:/pemount

       使用peimg命令将第三方驱动添加到WinPE 2.0系统中,如需添加多个设备驱动请重复该步骤。

       peimg /inf=c:/winpe2/netdrv/xxx.inf c:/pemount/windows

       使用imagex命令加参数unmount及commit将修改写入到 *.wim 中。

       imagex /unmount c:/pemount /commit

copyright © 2016 powered by 皮皮网   sitemap