Window操作系统基本知识

windows系统

kernel32.dll是Windows 系统中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。

user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。

gdi32.dll是Windows GDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字。

句柄(Handle)是是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,句柄不能是常量。

Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。在程序设计中,句柄是一种特殊的智能指针,当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。

句柄在 Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。Windows API 给一个内存块、文件、任务或动态装入模块,的资源分配确定的句柄,并将句柄返回给应用程序,然后应用程序通过句柄来操作它们。句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。

实模式、保护模式、虚拟8086方式

实模式

程序运行的实质是什么?

扫描二维码关注公众号,回复: 13120991 查看本文章

就是指令的执行。CPU如何知道指令在什么位置呢?X86如何定位内存地址呢?

段地址 + 偏移地址 = 20位物理地址

例如:

段地址(2000H)+偏移地址(20H)=物理地址(20020H)

保护模式

保护模式下程序运行的实质,仍然是CPU执行指令,操作相关数据。不同就是寻址方式的改变,起到了保护的作用。

1、不同任务间的保护

进程间虚拟地址的保护。

2、同一任务的保护

一个任务里定义了4种保护级别,0,1,2,3环表示。

其中,0、1、2环为系统级,环3是用户级。0级权限最高。

操作系统低核心层运行在Ring0级,而win32子系统如kennel32.dll 、user32.dll、gdi32.dll ,都运行在3环,以提供与子程序的接口。

保护模式下,应用程序不会直接访问物理地址,由虚拟内存管理器控制物理地址访问。进程的4G的寻址空间是用来对接CPU的。

虚拟地址

不是真正的内存,独立的4G寻址空间。

dll与exe的不同。

当一个应用程序被启动时,操作系统创建新的进程,并分配2G虚拟地址给这个进程,虚拟内存管理器将应用程序代码,映射到这个进程的虚拟地址中的位置,并把当前需要的代码读取到内存物理地址中。用dll时,dll也会被映射到进程的虚拟地址空间,在需要的时候才被读入物理内存。在物理内存和虚拟地址之间是虚拟内存管理器转换。

PE格式

PE(Portable Executable)格式,是微软Win32环境可移植可执行文件(如exe、dll、sys等)的标准文件格式。PE格式衍生于Unix上的COFF(Common Object File Format)文件格式。

不同的Windows版本和不同的CPU,PE文件的格式是一样的,CPU不一样,CPU指令的二进制编码是不一样的。只是文件中各种东西的布局是一样的。

64位的新格式是PE32+,没有任何新改变,只是简单的将32位字段扩展为64位

了解PE文件格式意义

了解PE文件格式后,方便我们去破解别的exe和dll文件。

PE文件到内存的映射

执行PE文件时,windows不是立即将整个文件读入内存,而是用windows装载器,在装载时,建立好虚拟地址和PE文件之间的映射关系。在真正执行到某个内存页中的指令或数据时,这个页才被从磁盘提交到物理内存,这种机制解决了文件过大影响装载速度的问题。在硬盘里,需要时才载入内存。

pe文件由

DOS头PE头、节表,区段表(section table)、节,区段(section)  4部分组成

 

猜你喜欢

转载自blog.csdn.net/panjunnn/article/details/112466545