20145209 《信息安全系统设计基础》第13周学习总结

家庭作业

4.47题:

leave指令等价于如下代码序列:

rrmovl %ebp,%esp

popl %ebp

也就是说它要执行的动作是,将帧指针ebp的内容赋给栈指针esp,然后弹出ebp,栈指针+4,结果是消灭这个栈。

参照pop指令的格式,可以得出如下的过程:

取指阶段 icode:ifun<--M1[PC] = D:0

valP <= PC + 1  ;下一条指令地址

译码阶段 valB <= R[%ebp] ;得到ebp的值,这个值就是新的栈指针esp的值

执行阶段 valE <= valB + 4 ;栈指针的值+4

访存阶段 valM <= M4[valB] ;读ebp中的值

写回阶段 R[%esp] <= valE ;把更新后的指针赋值给esp
R[%ebp] <= valM ;弹出的ebp的值

家庭作业7.11

题目

解答:

3、4行是数据段,开始于存储器地址0x08049448的位置,总的存储器大小是0x194字节,从文件偏移的0x448处开始的0xe8个字节初始化。

在加载之前,未初始化的全局变量不会在目标文件中分配存储空间,但是在加载之后,像.bss中的符号等数据需要占用空间,所以剩下的字节对应运行时将被初始化为0的.bss数据。

9.13

A.虚拟地址:0x0040

13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0 0 0 0 0 1 0 0 0 0 0 0

B.地址翻译

参数 值

VPN 0x01

TLB索引 0x01

TLB标记 0x00

TLB命中 No

缺页 Yes

PPN -

11.7

拓展TINY,使它可以提供MPG视频文件。用一个真正的浏览器来检验你的工作。

答:在get_filetype函数里面添加:

else if(strstr(filename, ".mpg") || strstr(filename, ".mp4"))

strcpy(filetype, "video/mpg");

源代码:

include<csapp.h>

void doit(int fd);

void read_requesthdrs(rio_t *rp);

int parse_uri(char uri, char filename, char *cgiargs);

void serve_static(int fd, char *filename, int filesize);

void get_filetype(char filename, char filetype);

void serve_dynamic(int fd, char filename, char cgiargs);

void clienterror(int fd, char cause, char errnum,char shorting,char longmsg);

int main(int argc,char *argv[])

{
int listenfd,connfd,port,clientlen;

struct sockaddr_in clientaddr;

if(argc != 2)

{

fprintf(stderr,"usage: %s \n",argv[0]);

exit(0);

}

port = atoi(argv[1]);

listenfd = Open_listenfd(port);

while(1)

{

clientlen = sizeof(clientaddr);

connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen);

doit(connfd);

Close(connfd);

}
}

void doit(int fd)

{

int is_static;

struct stat sbuf;

char buf[MAXLINE], method[MAXLINE],uri[MAXLINE],version[MAXLINE];

char filename[MAXLINE],cgiargs[MAXLINE];

rio_t rio;

/read request line and headers/

Rio_readinitb(&rio, fd);

Rio_readlineb(&rio, buf, MAXLINE);

sscanf(buf, "%s %s %s", method, uri, version);

if(strcasecmp(method,"GET"))

{

clienterror(fd, method, "501","Not Implemented",
"Tiny does not implement this method");

return;

}

read_requesthdrs(&rio);

/prase URI from GET request/

is_static = parse_uri(uri, filename, cgiargs);

if(stat(filename, &sbuf) < 0)

{

clienterror(fd, filename, "404","Not Found",
"Tiny couldn't find this file");

return;

}

if(is_static)//server static content
{if(!(S_ISREG(sbuf.st_mode) || !(S_IRUSR & sbuf.st_mode))){clienterror(fd, filename, "403","Forbidden","Tiny couldn't read the file");return;}serve_static(fd, filename, sbuf.st_size);
}
else//server dynamic content
{if(!(S_ISREG(sbuf.st_mode) || !(S_IXUSR & sbuf.st_mode))){clienterror(fd, filename, "403","Forbidden","Tiny couldn't run the CGI program");return;}serve_dynamic(fd, filename, cgiargs);
}

}

void clienterror(int fd, char cause, char errnum,
char shortmsg, char longmsg)
{
char buf[MAXLINE], body[MAXBUF];

/*Build the HTTP response body*/
sprintf(body, "<html><title>Tiny Error</title>");
sprintf(body, "%s<body bgcolor=""ffffff"">\r\n",body);
sprintf(body, "%s%s: %s\r\n",body,errnum,shortmsg);
sprintf(body, "%s<p>%s: %s\r\n", body, longmsg, cause);
sprintf(body, "%s<hr><em>The Tiny Web Server</em><>\r\n",body);/*Print the HTTP response*/
sprintf(buf, "HTTP/1.0 %s %s\r\n",errnum, shortmsg);
Rio_writen(fd, buf, strlen(buf));
sprintf(buf, "Content-type: text/html\r\n");
Rio_writen(fd, buf, strlen(buf));
sprintf(buf, "Content-length: %d\r\n\r\n",(int)strlen(body));
Rio_writen(fd, buf, strlen(buf));
Rio_writen(fd, body, strlen(body));

}
//read_requesthdrs()来跳过请求报头的信息,直到遇见表示报头结束的空文本行。

void read_requesthdrs(rio_t *rp)
{
char buf[MAXLINE];

Rio_readlineb(rp, buf, MAXLINE);
while(strcmp(buf, "\r\n"))
{Rio_readlineb(rp, buf, MAXLINE);printf("%s", buf);
}
return;

}

int parse_uri(char uri, char filename, char cgiargs)
{
char
ptr;

if(!strstr(uri, "cgi-bin"))//static content
{strcpy(cgiargs, "");strcpy(filename, ".");strcat(filename, uri);if(uri[strlen(uri)-1] == '/')strcat(uri, "home.html");return 1;
}
else
{ptr = index(uri, '?');if(ptr){strcpy(cgiargs, ptr+1);*ptr = '\0';}elsestrcpy(cgiargs, "");strcpy(filename, ".");strcat(filename, uri);return 0;
}

}

void serve_static(int fd, char filename, int filesize)
{
int srcfd;
char
srcp, filetype[MAXLINE], buf[MAXBUF];

/*Send response headers to client*/
get_filetype(filename,filetype);
sprintf(buf, "HTTP/1.0 200 OK\r\n");
sprintf(buf, "%sServer: Tiny Web Server\r\n", buf);
sprintf(buf, "%sContent-lenght: %d\r\n", buf, filesize);
sprintf(buf, "%sContent-type: %s\r\n\r\n", buf, filetype);
Rio_writen(fd, buf, strlen(buf));
/*Send response body to client*/
srcfd = Open(filename, O_RDONLY, 0);
srcp = Mmap(0, filesize, PROT_READ, MAP_PRIVATE,srcfd,0);
close(srcfd);
Rio_writen(fd, srcp, filesize);
Munmap(srcp, filesize);

}

void get_filetype(char filename, char filetype)
{
if(strstr(filename, ".html"))
strcpy(filetype, "text/html");
else if(strstr(filename, ".gif"))
strcpy(filetype, "image/gif");
else if(strstr(filename, ".jpg"))
strcpy(filetype, "image/jpeg");
else
strcpy(filetype, "text/plain");
}

void serve_dynamic(int fd, char filename, char cgiargs)
{
char buf[MAXLINE], *emptylist[]={NULL};

/*Return first part of HTTP response*/
sprintf(buf, "HTTP/1.0 200 OK\r\n");
Rio_writen(fd, buf,strlen(buf));
sprintf(buf, "Server: Tiny Web Server\r\n");
Rio_writen(fd, buf,strlen(buf));if(Fork()==0)
{setenv("QUERY_STRING", cgiargs, 1);Dup2(fd, STDOUT_FILENO);Execve(filename, emptylist,environ);
}
Wait(NULL);

}

其他(感悟、思考等,可选)

xxx
xxx

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90

参考资料

  • 《深入理解计算机系统V2》学习指导
  • ...

转载于:https://www.cnblogs.com/liuyiyang/p/6160392.html

20145209 《信息安全系统设计基础》第13周学习总结相关推荐

  1. 20135219洪韶武——信息安全系统设计基础第五周学习总结

    信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时  一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...

  2. # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结

    2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...

  3. 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结

    - 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...

  4. 20135203齐岳 信息安全系统设计基础第十三周学习总结

    20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...

  5. # 20155337 2017-2018-1 《信息安全系统设计基础》第一周学习总结

    20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...

  6. 20145227《信息安全系统设计基础》第一周学习总结

    20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...

  7. 2018-2019 20165203 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165203 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 编译:gcc [选项] [文件名] 选项参数表 参数 对应功能 -E 仅执行编译预处理 ...

  8. 2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165221 <信息安全系统设计基础>第一周学习总结 教材学习总结 有关vim 打开方式:vim [文件名] 按i会进入insert模式,可以对代码进行编辑 按 ...

  9. 2017-2018-1 20155209 《信息安全系统设计基础》第一周学习总结

    2017-2018-1 20155209 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 计算机系统就是由可以看到的硬件和系统内的软件组成的,然后用来运行应用程序. 我们平时使用 ...

  10. 20145307《信息安全系统设计基础》第二周学习总结

    20145307<信息安全系统设计基础>第二周学习总结 教材学习内容总结 vim编辑器 Vim的6种基本模式:Vim具有6种基本模式和5种派生模式普通模式(Normal mode) Vim ...

最新文章

  1. 电脑粉碎文件 c语言,文件操作(二):文件粉碎机
  2. 简介——云计算,大数据,人工智能
  3. 【51nod - 1065】 最小正子段和( 前缀和排序 )
  4. 关于卸载vmwave虚拟机后键盘不能输入的问题
  5. zabbix4.2中163邮箱25端口无法发送邮件
  6. No module named ‘win32gui‘ 的解决方法(踩坑之旅)
  7. 服务器电源的电源管理芯片,TI推出新款IC PMBus 管理及保护服务器电源
  8. log4j配置文件详解------自学
  9. 智能优化算法:分类、特点和未来
  10. LCEDA仿真- 3V3与5V电压变换和PWMf转电压和电压电流变换
  11. Leetcode笔记 每日一题 824. 山羊拉丁文 (22.04.21)
  12. 关于数据库可变长字符串类型长度设计问题:慷慨是不明智的
  13. 淘宝api接口系列,获取sku详细信息
  14. java校验集装箱柜号是否正确
  15. week6 day4 并发编程之多线程 理论
  16. 行人重识别的挑战 与 最新进展 (35页PPT整理)
  17. js实现上下左右移动小方块
  18. sublime text3安装python插件和flake8_Sublime Text环境配置(Python、Latex、Markdown)及常见问题汇总...
  19. 用python简易编写创建窗口
  20. DJI的核心竞争力是什么?

热门文章

  1. Docker这些none:none的镜像,难道就不配拥有名字吗
  2. 如何发布百度爱采购的优质商品去运营推广@运营猫工具箱
  3. 陈欧的共享充电宝生意咋样了?这个新动向必须get!
  4. O’Reilly动物书系列
  5. 台式计算机反应慢,惠普台式电脑慢怎么办(电脑反应迟钝怎么处理)
  6. setInterval的停止方法
  7. ubuntu安装和切换搜狗输入法
  8. 唯有全程联网可拯救国产单机
  9. ios开发和安卓开发java_细说ios开发和Android开发有什么区别?谁更有优势?
  10. tp-link无线路由器如何限制别人网速