《Windows内核编程》---基本汇编指令.pdf
《《Windows内核编程》---基本汇编指令.pdf》由会员分享,可在线阅读,更多相关《《Windows内核编程》---基本汇编指令.pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Windows内核编程-基本汇编指令学习各种高级外挂制作技术,马上去百度搜索魔鬼作坊,点击第一个站进入,快速成为做挂达人。1)用 VS2010新建 Win32 Console Application,工程名为 ACECore,工程建立完成后得到打开文件 ACECore.cpp,代码如下:#include stdafx.hint _tmain(int argc,_TCHAR*argv)return 0;2)用 VS2010查看汇编代码的方法:1.VC 必须处于 debug 状态才能看到汇编指令窗口。因此在上面代码 return 0一句上设置断点。2.按下 F5键调试程序,当程序停在断点处时,打开
2、菜单“Debug”下的“Windows”子菜单,选择“Disassembly”。这样就出现反汇编窗口,显示汇编代码:-g:/acecore/acecore/acecore.cpp-/ACECore.cpp:Defines the entry point for the console application./#include stdafx.hint _tmain(int argc,_TCHAR*argv)00411350pushebp00411351movebp,esp00411353subesp,0C0h00411359pushebx0041135Apushesi0041135Bpushe
3、di0041135Cleaedi,ebp-0C0h00411362movecx,30h00411367moveax,0CCCCCCCCh0041136Crep stosdword ptr es:edireturn 0;0041136Exoreax,eax3)相关汇编指令:push:把一个32位的操作数压入堆栈中,这个操作导致 esp 被减4。esp 被称为栈顶,压入堆栈的数据越多,这个堆栈也就越堆越高,esp 地址就越来越小。在32位平台上,esp 每次减少4(字节)。pop:esp 被加4,一个数据出栈。pop 的参数一般是一个寄存器,栈顶数据被弹出到这个寄存器中。某些指令会“自动”地操作堆
4、栈:call 指令会把它的下一条指令的地址压入堆栈中,然后跳转到它调用的函数的开头处;而单纯的 jmp 是不会这样做的。同时,ret 会自动弹出返回地址。call 的本质相当于 push+jmp,ret 的本质相当于 pop+jmp。不但 push、pop、call 和 ret 会操作堆栈,sub 和 add 也可以用于操作堆栈。如果要一次在堆栈中分配4个4字节长整型的空间,那么没有必要4次调用 push,很简单地把 esp 减去4*4=16即可。当然,也可以同样地用 add 指令来恢复它。lea:取得地址(第二个参数)后放入到前面的寄存器(第一个参数)中。实际上,有时候 lea用来做和 mo
5、v 同样的事情,比如赋值:lea edi,ebp 0cch其中,方括弧表示存储器,也就是 ebp-0cch 这个地址所指的存储器内容。但是 lea 语法要求取ebp-0cch的地址,这个地址就是 ebp-0cch,把这个地址放到 edi 中,也就是说,这等同于:mov edi,ebp-0cch但以上的 mov 指令时错误的,因为 mov 不支持后一个操作数写成寄存器减去数字。而 lea支持,因此可以用 lea 来代替它。Stos 指令:mov ecx,30hmov eax,0CCCCCCCChrep stos dword ptr es:edistos 是串存储指令,它的功能是将 eax 中的数
6、据放入 edi 所指的地址中,同时,edi 会增加4(字节数)。rep 时指令重复执行 ecx 中填写的次数。方括弧表示存储器,这个地址实际上就是 edi 的内容所指向的地址。这里的 stos 其实对应的是 stosd,其他还有 stosb、stosw,分别对应于处理4、1、2个字节。上面代码中对堆栈30h*4(=0c0h)个字节初始化为0CCh(也就是 int3指令的机器码),这样发生意外时执行堆栈里面的内容会引发调试中断。=lost 的分割线=C 函数的参数传递过程:1)C 语言程序通过堆栈把参数从函数外部传入到函数内部,同时,在堆栈中划分区域来容纳函数的内部变量。对于 C 语言默认的调用
7、方式,函数调用方把参数反序(从右到左)地压入堆栈中,被调用方把堆栈复原。这些参数对齐到机器字长,16位、32位、64位 CPU 下分别对齐到2、4、8个字节。2)函数调用规则指的是调用者和被调用者函数间传递参数及返回参数的方法,在 Windows 上,常用的有 Pascal 方式、WINAPI 方式(_stdcall)、C 方式(_cdecl)。_cdecl 调用规则:(1)参数从右到左进入堆栈;(2)在函数返回后,调用者要负责清除堆栈,所以这个调用常会生成较大的可执行文件。_stdcall 又称为 WINAPI,其调用规则:(1)参数从右到左入栈;(2)被调用的函数在返回前自行清理堆栈,所以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows内核编程 Windows 内核 编程 基本 汇编 指令
限制150内