注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

编程学习

我的网上家园

 
 
 

日志

 
 

13 章习题: 修改内核与用户程序,改由用户程序自行提供栈空间  

2013-03-07 17:05:43|  分类: 《x86汇编语言: |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
题目要求:
修改内核程序和用户程序,改由用户程序自行提供栈空间。要求:栈段必须定义在用户程序头部之后。 

用户程序修改如下:
C13.ASM
第13行 原内容: stack_seg        dd 0  修改为 stack_seg dd section.stack.start     ; (stack 为自定义的栈段名称)
第14行 原内容: stack_len         dd 1  修改为 stack_len  dd stack_end                 ; (stack_end为自定义的标号,在栈段的末尾)
第52 53行之间添加对栈段的定义.
示例如下:
section stack vstart=0
times 8192 db 0
stack_end:
如上所示,定义了8192个字节的栈空间,也就是8KB大小.

内核修改如下:
c13_core.asm
注释掉 463 - 470行.
并添加以下代码:
mov eax,[edi+0x8]
add eax,edi             ;EAX中是堆栈的低端地址,注意堆栈是向下扩展的!
add eax,[edi+0xc]    ;再加上用户栈的大小才是栈的起始地址(高端地址)
mov ebx,0xffffffff      ;ESP 允许的最大值
sub ebx,[edi+0xc]    ;[edi+0xc]是用户栈大小 EBX 中是字节粒度的段界限,并不是最终的段界限
sub ebx,0xfff
shr ebx,12               ;右移12位,相当于除以0X1000
以上修改要求在定义用户栈大小时按4KB对齐.
  评论这张
 
阅读(17)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017