首页
社区
课程
招聘
[旧帖] 初识win32汇编 0.00雪花
发表于: 2013-4-11 01:55 1381

[旧帖] 初识win32汇编 0.00雪花

2013-4-11 01:55
1381
一。Win32编程中几个重要的概念
1.每个应用程序都有自己的4GB空间。该空间可存放操作系统、系统DLL和用户的DLL的代码,他们之中有各种函数供应用程序调用。再除去其他的一些空间,余下的就是应用程序的代码、数据和可以分配的地址空间。
2.不用应用程序的线性地址都是隔离的。虽然它们在屋里内存中同时存在,但在某个程序所属的时间片中,其他应用程序的代码和数据没有被映射到可寻址的线性地址中,所以是不可问的。从编程的角度看,程序可以使用4GB的寻址空间,而且这个空间是“私有”的。
3.DLL程序没有自己“私有”的空间。他们总是被映射到其他应用程序的地址应用空间中,当做其他应用的一部分运行。

二、内存寻址
1.Window上操作系统为用户程序的代码段、数据段和堆栈段全部预定义好了段描述符。这些段的起始地址为0,限长为ffffffff,所以用它们可以直接寻址全部的4GB地址空间。程序开始执行的时候,CS,DS,ES和SS都已经指向了正确的描述符。所以并不是Win32汇编源代码用不到段寄存器,而是用户在使用中不必去关心段寄存器。

三、Windows的特权保护
1.DOS汇编下,不管中断、异常还是“自陷”(int n指令调用时,是程序被急需解决的事情打断,而是自己要求停止执行并转移到中断处理程序中去)都是通过中断向量表里存放的入口地址转移到服务程序,都由CPU自动在堆栈中保护断点地址,最后也都可以用iret指令返回指令被中断的地方。
2.在保护模式下的代码有优先级之分,为了使高优先级的代码能够安全地被低优先级的代码调用,保护模式下增加了“门”的概念。
3.“门”只想某个优先级高的程序所规定的入口点,所有优先级低的程序调用优先级高的程序只能通过门重定向,进入门所规定的入口点。这样可以避免低级别的程序代码从任意进入优先级高的程序问题。保护模式下的中断喝异常等服务程序也要从“门”进入,80386的门分为中断门、自陷门和任务门几种。
4.在保护模式下要表示一个中断或异常服务程序的信息需要8个字节,包括门的种类以及xxxx:yyyyyyyy格式的入口地址等。这组信息叫做“中断描述符”。
5.保护模式下把所有的中断描述符放在一起组成“中断描述符表”IDT。IDT不再放在固定的地址00000h处,而是采用可编程设置的方式,支持的中断数量也可以设置。为此80386处理器引入了一个新的48位寄存器IDTR。IDTR的高32位指定了IDT的内存中的基址(线性地址),低16位指定了IDT的长度,相当于指定了可以支持的中断数量。
6.如图所示,保护模式下发生异常或中断时,处理器先根据IDTR寄存器得到中断描述的地址,然后取出n号中断/异常的门描述符,再从描述符得到中断服务程序的地址xxxx:yyyyyyyy,经过段地址转换后得到服务程序的32位线性地址并转移后执行。

7.用户程序没有权限将中断地址指到自己的代码中来。
8.在Windows中,操作系统使用动态链接库来代替中断服务程序提供系统功能,所以Win32汇编中int指令也就失去了存在的意义。调用API的指令就相当于在DOS系统中用int指令来完成系统功能。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 889
活跃值: (4027)
能力值: ( LV5,RANK:69 )
在线值:
发帖
回帖
粉丝
2
期待下一篇
补码12345
2013-4-11 18:58
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
很精彩,学习了啊
2013-4-12 00:35
0
游客
登录 | 注册 方可回帖
返回
//