文件名称:asm_module
- 所属分类:
- 汇编语言
- 资源属性:
- [Windows] [Visual C] [源码]
- 上传时间:
- 2008-10-13
- 文件大小:
- 6.11kb
- 下载次数:
- 0次
- 提 供 者:
- 摩*
- 相关连接:
- 无
- 下载说明:
- 别用迅雷下载,失败请重下,重下不扣分!
介绍说明--下载内容均来自于网络,请自行研究使用
该程序模拟UNIX中save与resume函数,并介绍在VC中如何使用汇编进行机器级的操作.
主函数很简单首先引入两个外部函数,extern \"C\"表示按传统C命名习惯.函数save将程序指针保存在(*s)中并返回0,为什么有
if(save(&sp)){...}
if后的语句看起来永远都不会被执行,但是运行结果表明它被执行了.这个问题同UNIX中处理机调度函数(switch)的那个if语句(第一句)一样.
程序执行完save(&sp)后得到因为条件为假而执行else语句,却在判断之前将程序指针保存在sp中了.
else语句中的resume(&sp),该函数很狡猾将堆栈中的返回地址改变了,改到了sp所指出,即将程序指针改到了执行条件判断前.resume返回1,条件满足,执行if语句.
save函数堆栈:
eip ebp+8
s ebp+4
ebp ebp+0
resume函数堆栈与save的相同.
新建一个win32的工程,将unixc.cpp和unix.obj加入过程即可.
unix.obj是用masm6.11生成的:ml /c /coff unix.asm,生成coff格式的obj而不是omf格式.-the simulation UNIX save and resume function, and the VC on how to use the compiled class machines for the operation. main function is very simple to introduce the first two external function, extern "C" said C. named by the traditional habits. function pointer procedures will save preserved in (* s) and return 0, why are there if (save (
主函数很简单首先引入两个外部函数,extern \"C\"表示按传统C命名习惯.函数save将程序指针保存在(*s)中并返回0,为什么有
if(save(&sp)){...}
if后的语句看起来永远都不会被执行,但是运行结果表明它被执行了.这个问题同UNIX中处理机调度函数(switch)的那个if语句(第一句)一样.
程序执行完save(&sp)后得到因为条件为假而执行else语句,却在判断之前将程序指针保存在sp中了.
else语句中的resume(&sp),该函数很狡猾将堆栈中的返回地址改变了,改到了sp所指出,即将程序指针改到了执行条件判断前.resume返回1,条件满足,执行if语句.
save函数堆栈:
eip ebp+8
s ebp+4
ebp ebp+0
resume函数堆栈与save的相同.
新建一个win32的工程,将unixc.cpp和unix.obj加入过程即可.
unix.obj是用masm6.11生成的:ml /c /coff unix.asm,生成coff格式的obj而不是omf格式.-the simulation UNIX save and resume function, and the VC on how to use the compiled class machines for the operation. main function is very simple to introduce the first two external function, extern "C" said C. named by the traditional habits. function pointer procedures will save preserved in (* s) and return 0, why are there if (save (
(系统自动生成,下载前可以参看下载内容)
下载文件列表
压缩包 : 27796732asm_module.zip 列表 UnixC/ UnixC/unix.asm UnixC/UNIX.OBJ UnixC/UnixC.cpp UnixC/UnixC.dsp UnixC/UnixC.dsw UnixC/UnixC.opt UnixC/说明.txt