WIN32汇编第6课.docx
《WIN32汇编第6课.docx》由会员分享,可在线阅读,更多相关《WIN32汇编第6课.docx(11页珍藏版)》请在冰点文库上搜索。
![WIN32汇编第6课.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/da523349-27c9-4f60-8328-dd6fb2d52801/da523349-27c9-4f60-8328-dd6fb2d528011.gif)
WIN32汇编第6课
WIN32汇编-第6课
2012年12月17日星期一
15:
29
1.识别程序所使用的变成语言.
汇编语言:
程序入口处代码毫无章法.
如图1:
图1
C语言:
入口代码比较有规律
如图2:
图2
2.编译器的保存寄存器环境命令uses寄存器名称列表
如图3:
图3
如图4
图4
编译器帮助我们保存了寄存器环境.
3.C语言与汇编语言混合编程
①C语言调用汇编
步骤1:
.inc文件中声明函数原型,注意是C约定,如图5
图5
2.源文件中实现该函数,如图6
图6
3.然后用命令行ml/c/coffMsg.asm编译成obj
4.把这个obj导入到vc的编译文件列表,如图7
图7
5.在要使用的地方加上声明,然后调用函数即可,如图8
图8
②汇编语言调用C
步骤1:
头文件中声明函数,并使用extern"C"不让符号粉碎
extern"C"voidmsgbox(char*szText,char*szTitle);
源文件中实现上面的函数
2.单独编译,注意要在release方式下,debug下有调试信息,如图9
图9
3.汇编中添加函数声明,并指明C调用约定
MsgboxPROTOC:
DWORD,:
DWORD
如图10
图10
4.调用函数即可,如图11
图11
效果如图12
图12
③汇编中调用C库函数
C库函数的实现在msvcrt.dll中(全称:
microsoftstdiovisualc++runtime)
1.静态库方式
包含静态库即可
includeliblibc.lib
这个静态库在VC目录下D:
\ProgramFiles\MicrosoftVisualStudio\VC98\Lib下,如图13
图13
声明C库函数,然后调用即可,如图14
图14
效果如图15:
图15
证明strcpy拷贝字符串成功了.
2.动态库方式
包含头文件和导入库
includemsvcrt.inc
includelibmsvcrt.lib
名称前面通常加上crt_或者crt__即可.
如图16
图16
效果如图17
图17
4.远程线程注入之重定位
①静态重定位(以后介绍)
②动态重定位
会发现在同一台机器上的不同程序里面的MessageBox的地址是一样的.
如图18
俄罗斯方块版
扫雷版
PPT版
图18
那么就可以在我们的程序里面首先获取到需要调用的函数的地址,将这个地址赋值给要注入的线程函数内部定义的全局变量里面,这样即可.
如图19
图19
线程函数的写法如图20
图20
虽然pfnMsgbox里面保存的MessageBoxA的函数地址同一台机器上面是不变的,但是因为使用了offset取在编译期间就确定了pfnMsgbox这个指针变量的地址,所以远程线程函数注入到对方进程的时候就需要对pfnMsgbox的地址进行动态重定位了,做法就是前面加上ebx修正即可。
解释如图21
图21
进入计算器弹出MessageBox的效果,如图22
图22