02 2012 档案

摘要:问题来源: stdcall类型函数调用,参数倒序入栈,第一个参数最后入栈,函数内部访问第一个参数时经常看到用[ebp + $08]表示,ebp通常来自esp,即函数首部经常看到的push ebp, mov ebp, esp,为什么栈顶偏移$08才是第一个参数呢?按道理说第一个参数最后入栈,栈顶不应该就是第一个参数么?事实并非如此...问题探索与解答: 函数1:1 function add:Integer;stdcall;2 begin3 Result :=10;4 end;调用该函数,观察汇编代码:(注意EIP寄存器变化)0044D944 E8F3FFFFFF call a... 阅读全文
posted @ 2012-02-20 10:46 书中翱翔 阅读(1713) 评论(0) 推荐(0)
摘要:中断描述符表(Interrupt Descriptor Table,IDT)将每个异常或中断向量分别与它们的处理过程联系起来。与GDT和LDT表类似,IDT也是由8字节长描述符组成的一个数组。与GDT不同的是,表中第1项可以包含描述符。为了构成IDT表中的一个索引值,处理器把异常或中断的向量号乘以8。因为最多只有256个中断或异常向量,所以IDT无需包含多于256个描述符。IDT中可以含有少于256个描述符,因为只有可能发生的异常或中断才需要描述符。不过IDT中所有空描述符项应该设置其存在位(标志)为0。IDT表可以驻留在线性地址空间的任何地方,处理器使用IDTR寄存器来定位IDT表的位置。. 阅读全文
posted @ 2012-02-14 13:11 书中翱翔 阅读(875) 评论(0) 推荐(0)