linux-0.11调试教程,task3(03),do_signale之后的用户栈
来源:互联网 发布:ubuntu安装教程分区 编辑:程序博客网 时间:2024/05/29 13:35
下面是do_signal之前和之后iret之前的内核态堆栈的变化情况,主要是原esp和原eip的变化情况。
相关代码:
void do_signal(long signr,long eax, long ebx, long ecx, long edx,
long fs, long es, long ds,
long eip, long cs, long eflags,
unsigned long * esp, long ss)
{
......
tmp_esp=esp;
put_fs_long((long) sa->sa_restorer,tmp_esp++);put_fs_long(signr,tmp_esp++);
if (!(sa->sa_flags & SA_NOMASK))
put_fs_long(current->blocked,tmp_esp++);
put_fs_long(eax,tmp_esp++);
put_fs_long(ecx,tmp_esp++);
put_fs_long(edx,tmp_esp++);
put_fs_long(eflags,tmp_esp++);
put_fs_long(old_eip,tmp_esp++);
current->blocked |= sa->sa_mask;
}
因为: int sa_flags; 0xc0000000
#define SA_NOMASK 0x40000000
所以这一句: put_fs_long(current->blocked,tmp_esp++);不会运行,
所以用户态堆栈会压入7×4个字节。
在do_signal下断点,在task3的任务数据结构所在页面的末端,可以看出用户态堆栈为0x03ffff10,
而任务3的线性地址为64M*3-64M*4既0x0c000000,所以用户态堆栈为0x0fffff10。
此时用户态堆栈最后一个字是0x0000007b
在do_signal函数的最后下断点,可以看出用户态堆栈的7×4个字节的内容,最后一个应该是0x0000011f。
- linux-0.11调试教程,task3(03),do_signale之后的用户栈
- linux-0.11调试教程,task3(01),/etc/rc文件
- linux-0.11调试教程,task3(04),sa_restore函数
- linux-0.11调试教程,task3(02)系统调用sys_alarm和sigaction结构
- linux0.11调试教程,task3概述
- linux-0.11调试教程,filetutils的版本号
- linux-0.11调试教程 tty_table
- linux-0.11调试教程,task2
- linux-0.11调试教程,task4
- linux-0.11,任务1的用户态堆栈,copy-on-write之后的堆栈!
- linux-0.11调试教程,con_init函数和右上角的EGAc
- linux-0.11调试教程,fwrite ()函数的作用
- linux-0.11调试教程,退格键的调用过程(2)
- linux-0.11调试教程,系统调用sys_write的调用过程
- linux-0.11调试教程,终端的初始化init_terminal_io ()函数分析
- linux-0.11调试教程,update_line()函数中按下退格键时对应的缓冲区
- linux-0.11调试教程 文件系统中b_uptodate字段的含义
- linux-0.11调试教程,head.s页表项
- Linux字符驱动中动态分配设备号与动态生成设备节点
- Oracle 数据导入整理
- 转:从业者亲述:你所不知道的香港互联网
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
- 莫名戳中你笑点 法海不懂爱的真相
- linux-0.11调试教程,task3(03),do_signale之后的用户栈
- python单引号、双引号和三双引号的区别
- 查找最小的k个元素
- SZNOI d011题解
- Android的NDK开发(1)-不一样的HelloWorld
- SZNOI d012题解
- 2013.01.11.SJ. ORA-SQL SCRIPT
- VS2010内置数据库的连接
- Poj 2244 Eeny Meeny Moo (约瑟夫环)