该程序模拟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格式.
没有合适的资源?快使用搜索试试~ 我知道了~
VC中使用汇编程序模块的例子
共7个文件
dsw:1个
opt:1个
txt:1个
需积分: 50 247 下载量 191 浏览量
2006-04-10
10:52:52
上传
评论
收藏 6KB RAR 举报
温馨提示
该程序模拟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的相同.
资源推荐
资源详情
资源评论
收起资源包目录
41619761-3000.rar (7个子文件)
41619761
41619761
UnixC.dsp 3KB
UnixC.opt 48KB
说明.txt 777B
UnixC.cpp 335B
UnixC.dsw 535B
unix.asm 575B
UNIX.OBJ 208B
共 7 条
- 1
资源评论
普通网友
- 粉丝: 882
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功