打开慢腾腾的MSN邮箱,本来没有抱什么希望的我突然眼前一亮,”A New Message”,不会又是垃圾邮件来浪费我的表情吧?4、5seconds之后,蜗牛般的浏览器终于给出了答案。From: Randy Bryant Randy.Bryant@cs.cmu.edu。

3、4天前在《深入理解计算机系统》上遇到的一个家庭作业问题令我揪心了很久。我分析了各种情况,得出的结论是只有一种办法可以解决这个问题。但是在我实行的时候却意外地收到一个系统给出的”Segmentation fault”。反复检查了输入的字符串,确实没有问题。用gdb调试时发现错误发生在子函数返回的ret语句上。设置断点,检查各相关寄存器的值,一切都符合预期。为什么一到ret就挂呢?猛然间我想起了几年前看过的一片介绍性的文章,讲的是“缓冲区溢出的保护措施”。我又把返回地址改为程序段任意一个地址,这次ret通过了。原来这个“先进”的操作系统从底层就禁止在数据段/程序堆栈的地方运行代码,怪不得我ret到自己预设的地址(位于程序堆栈内)时会收到错误。

这个问题看来是弄清楚了,但是怎么解决那个家庭作业呢?想了很久还是没有答案。旁边又没有一个钻研这个东西的同志。能不能问问作者啊?我想。

以前从来没有给国外的陌生人发过邮件。屈指可数的几次经历是给Konami美国分部的网站写了一封信询问某游戏、Sony的网站询问能否下载sonicstage。好在对方都有回复,现在胆子也大了点。

问就问吧,也没什么大不了的。

To: randy.bryant@cs.cmu.edu

Sent: Saturday, June 25, 2005 9:24 AM

Subject: A question about one of CS:APP's homework

Hello Prof. Bryant,

I got a problem when I was reading Chapter 3 of CS:APP. That is homework 3.38. The description is as followed(copied from the book).

Homework Problem 3.38 [Category 3]:

In this problem, you will mount a buffer overflow attack on your own program. As stated earlier, we do not condone using this or any other form of attack to gain unauthorized access to a system, but by doing this exercise, you will learn a lot about machine-level programming...

To solve this problem, I think the only way is to overwrite the return address of function getbuf(), make it point to a specified address where some executive codes is set from the input. I run the program under GDB. When I do this, I received a segmentation fault. Maybe the operation system prevents program running from the data segment or program stack. I wonder is there any other way to change the process of a program? What is the exact inputing string to make getbuf() return 559038737(0xdeadbeef) to test()?

If you're too busy to reply, just give me the answer.

Linux Kernel is version 2.6.9-1.667, gcc version 3.4.2, gdb version 6.1

Thanks a lot. Your help is very essential to my understanding of this book.

Sonny

Jun 26, 2005

国外的教授就是负责任啊。两天后我收到了一封长长的reply。

From :  Randy Bryant <Randy.Bryant@cs.cmu.edu>

Sent :  Monday, June 27, 2005 10:08 PM

Subject :  RE: A question about one of CS:APP's homework

You'll notice that this problem is rated as a difficult problem. That's partly because it's hard to determine why a particular solution doesn't work. To solve this problem, you need to have an exploit string that:

1. Overwrites the return address to be that of your exploit code

2. Write exploit code that alters the return value, corrects the return address, and re-executes the return

3. Sets the saved value of %ebp to its original value.

If you do any of these steps wrong, you'll get a segmentation fault. You can used GDB to help you step through the code, but even this is difficult.

That said, it is possible that your Linux system has mechanisms that make the assignment much more difficult. Some versions of Linux 2.6 contain a technology called "ExecShield". This does the following:

* Make it so that code on the stack is not executable

* Use randomization, so that the stack locations change with each execution.

You can test whether your version is using randomization by running a program under GDB multiple times. Set a breakpoint in main, and each time check the value of %ebp. If it changes every time, then your OS is using randomization.

You can disable Execshield at the time you boot your system.

文中提到的ExecShield就是一直困扰我的保护机制。首先它使程序堆栈内的代码不可执行;其次,每次执行的时候都会随机地改变程序堆栈的地址,这样就使攻击者无法得知每次的堆栈地址而无法算出返回地址(当然可以用调试器gdb得到,但这样就没有使用价值,仅仅适合研究)。Bryant教授提到的3个必须点也都是我想到的:1. 覆盖函数的返回地址以使之指向你自己设置的代码;2. 在自己设置的代码中改写程序的行为(此处为改变返回值),更正返回地址,重新执行ret操作;3. 恢复原先的ebp寄存器的值。

虽然由于底层系统的高安全性没能完成这个作业,但是我学到的很多东西。更清晰地了解了汇编级代码的工作过程,尤其是函数的调用与返回;对缓冲区溢出这个概念有了一些深入的体会,当今一些网络攻击程序的基本攻击原理算是初步理解(尽管经过矛与盾的较量,攻击的手段变得越来越高超,但是其本质的东西是不会变的);第一次给国外的教授写信求教并且得到了非常详尽的解答,心中还是非常开心的,呵呵呵呵。

来自卡内基梅隆计算机科学系主任的回复相关推荐

  1. 卡内基梅隆大学如何培养计算机博士

    卡内基·梅隆大学(Carnegie Mellon University)于1900 年成立于宾夕法尼亚州匹兹堡市,经过一百多年发展已经成为世界顶尖大学之一,其计算机科学学院多次被<美国新闻与世界 ...

  2. 卡内基·梅隆大学计算机科学系主任周以真的父母是中国人吗,一篇是王飞跃等人翻译的美国卡内基梅隆大学计算机科学系主任.PPT...

    一篇是王飞跃等人翻译的美国卡内基梅隆大学计算机科学系主任 * * 信息论的内涵与外延 1.狭义信息论: 又称香农信息论.主要通过数学描述与定量分析,研究通信系统从信源到信宿的全过程,包括信息的测度.信 ...

  3. 卡内基·梅隆大学计算机科学系主任周以真的父母是中国人吗,计算思维(Computational Thinking)...

    最近两天的讲座中连续两天听到两位老师不约而同的提到一个他们认为非常重要的概念"计算思维". 资料:2006年3月,美国卡内基·梅隆大学计算机科学系主任周以真(Jeannette M ...

  4. 卡内基·梅隆大学计算机科学系主任周以真的父母是中国人吗,计算机与计算思维...

    [计算机与计算思维]读后感 首先,通过阅读我了解到了计算思维的概念.2006年3月,美国卡内基·梅隆大学计算机科学系主任周以真(Jeannette M. Wing)教授在美国计算机权威期刊<Co ...

  5. 卡内基·梅隆大学计算机科学系主任周以真的父母是中国人吗,清华大学计算机科学与技术系...

    卡内基梅隆大学计算机系主任周以真教授访问我系并考察联合硕士项目 9月14日,美国卡内基-梅隆大学(CMU)计算机系主任周以真教授(Jeannette Wing)访问我系,就落实清华-CMU联合硕士学位 ...

  6. 计算机科学领导者:卡内基梅隆大学ACL2016论文汇总

    今年 8 月 7 日到 12 日,自然语言处理( NLP )和计算语言学领域的顶级会议 国际计算语言协会( ACL )年度会议 在德国柏林洪堡大学召开.作为计算机科学综合排名和人工智能领域排名均列第一 ...

  7. 加州伯克利计算机科学录取,卡内基梅隆大学CMU的计算机科学SCS今年率取率是5%【女儿去了scs】...

    为什么选择CMU的CS,其中有以下几个原因: 1.专业排名,CS美国第一. 美国大学本科计算机专业排名1-28 1 Carnegie Mellon University卡内基梅隆大学 1 Massac ...

  8. cmu 计算机科学 硕士 年薪,卡内基梅隆大学就业率高不高?世界级名校学生高就业率高薪资...

    卡内基梅隆大学简称CMU,1900年创建于美国宾夕法尼亚州的匹兹堡,是一所研究型的大学.在2016-17泰晤士高等教育全球大学排名中位列世界第23,可以说是世界顶尖高等学府之一,因此吸引了来自全世界各 ...

  9. cmu 计算机科学 硕士 年薪,卡内基梅隆大学就业率及薪资排名

    卡内基梅隆大学(Carnegie Mellon University),简称CMU,1900年创建于美国宾夕法尼亚州的匹兹堡(Pittsburgh),是一所研究型的大学.该校拥有全美顶级计算机学院和戏 ...

最新文章

  1. 如何每天自动备份 SourceSafe (转)
  2. 使用VC来操作Excel表格的源码
  3. 00029_引用数据类型
  4. Yolov5身份证检测——C++ OpenCV DNN推理
  5. [转载] 深入剖析 redis 主从复制
  6. Win11右键菜单变换Win10风格
  7. 使用VS开发C++ 控制台程序或其他项目出现 ‘ LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib” ’ 常规解决办法
  8. ASP.NET.CORE发布后启动网站出现500.19-0x8007000d错误解决方法
  9. springboot aop记录日志
  10. Android 系统(144)---整包升级与差分升级的区别
  11. JavaScript基本数据类型和引用数据类型
  12. Win7系统C盘空间不足
  13. php留言系统源码,XYCMS php留言板 v8.0
  14. 论文管理软件 Zotero 备忘
  15. java oracle中文乱码_解决java oracle中文乱码的方法
  16. 开发如何转型做项目管理
  17. Turtlebot2激光雷达(Rplidar)gmapping构建地图
  18. 怎么样把谷歌浏览器的默认背景颜色设置成绿豆沙
  19. liunx 用户管理(增加、删除、修改密码)
  20. 手机贴图压缩技术标准及作用

热门文章

  1. 导电滑环工作原理及部件解析
  2. 仅拍125个视频就成为千万级网红? Python告诉你:李子柒的网红路
  3. CATIA V5R20电气线束设计从入门到精通视频教程
  4. 计算机科学与技术要学政治,北京交通大学计算机科学与技术考研经验分享
  5. 14.Flink1.11 安装部署及Release 文档解读
  6. 协议——SCCB与IIC的区别
  7. 用scratch2.0编射击游戏
  8. python 单应性矩阵实现
  9. 计算机折旧的常用会计函数,Excel财务函数:AMORLINC每个结算期间的折旧值-excel技巧-电脑技巧收藏家...
  10. uniapp开发微信小程序-4.页面跳转与横向滑动