关于CSAPP lab3中压栈问题引发的思考

之前有个问题也没特别注意,今天回来看邮件发现有同学和我讨论关于函数调用压栈的问题。

废话少说,直接上对比测试图:

图一:CSAPP lab3的getbuf反汇编结果截图

图二: 我测试,节选了部分的getbuf实现,然后很简单的去测试getbuf的反汇编结果,反汇编结果如下图

我究竟是怎么测试的:

unsigned long long getbuf()
{
  char buf[36];
  volatile char* variable_length;
  int i;
  unsigned long long val;

  return val % 40;
}

int main()
{
    getbuf();
    return 0;
}

个人还是觉得测试代码没问题的。主要就是观察buf数组到底怎么被压栈的。保留其他的局部变量就可以了,理论上不会影响esp自减开辟新栈的大小。

但是但是。。。

Q1:

童鞋们能很明显的看出这里前后两个反汇编的结果不同。

前者开辟了0x30的大小的stack frame

后者开辟了0x40的大小的stack frame。

Q2:

利用CSAPP的可执行程序,gdb调试,然后查看反汇编程序。

观察寄存器rbp和buf的地址。

也就是说 buf数组距离栈基地址(rbp寄存器指向处),相差了0x30的大小。

而这段区域内应该只存在buf数组元素,无其他变量或者寄存器被压栈。于是我就怀疑这个buf数组(本来只有36byte)被对齐到了48byte(0x30), 但是这又无法解释, 因为如果按照64位操作系统的话,8byte对齐,只要对齐到

0x28就可以了,不用0x30. 这里相差的8byte就是个疑问。

有高手路过,恳请指导。。。

时间: 2024-10-12 00:26:53

关于CSAPP lab3中压栈问题引发的思考的相关文章

曲演杂坛--一条DELETE引发的思考

原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID INT IDENTITY(1,1) PRIMARY KEY, DT DATETIME ) 每次业务想要获取一个新ID,就执行以下SQL: INSERT INTO TB001(DT) SELECT GETDATE(); SELECT @@IDENTITY 由于这些数据只需保留最近一天的数据,因此建立一个SQL作业来定期删除数据,删除脚

一次部署HTTPS的相关事件引发的思考

前言: 上周五快要下班的时候,突然收到通知客户希望了解一下部署HTTPS的流程,这种事情谁听了都会有几分诧异的.因为这件事虽然和工作有一定的相关度,但平时不会走这个方向,实际上也较少接触.此外,客户手下应该不缺人,做运维和开发的肯定比我更懂这个,但情况却和我想的不一样. 正文: 客户有需求,就应该尽量满足!因此,尽管之前对Apache.Tomcat的一些配置不熟,也未有过自己部署HTTPS的经验[当然失败的尝试还是有的],便趁着周末了解了一下相关的东西,在本地搭建了环境.实践表明,当你对一个东西

UPDATE 时主键冲突引发的思考【转】

假设有一个表,结构如下: root@localhost : yayun 22:59:43> create table t1 ( -> id int unsigned not null auto_increment, -> id2 int unsigned not null default '0', -> primary key (id) -> )engine=myisam; Query OK, 0 rows affected (0.00 sec) root@localhost

Navicat连接mysql出现2003——can't connect to mysql server on localhost(10061)引发的思考)

一:起因 (0)最近由于病了一场,闲暇时间(即生病期间)一直思考如下问题: 思考一:如何做一名合格的程序猿,怎么才能成为一名名副其实的程序猿? 思考二:还有就是到底,值不值得熬夜加班去搞研发(或转型或做相对轻松的其它IT岗位~~~对于这个问题,我一时无法给出答案,希望各位帮我分析一下,不胜感激!!!) (1)如果没有做到这一点你怎么能说,你是一名合格的程序猿 —— 安装程序或者运行开发程序... http://d.dxy.cn/detail/7870458http://d.dxy.cn/deta

黑马程序员---Objective-C基础学习---一道课后习题引发的思考

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一道课后习题引发的思考 /* 需求:设计一个类Point2D,用来表示二维平面中某个点 1> 属性 * double x * double y 2> 方法 * 属性相应的set和get方法 * 设计一个对象方法同时设置x和y * 设计一个对象方法计算跟其他点的距离 * 设计一个类方法计算两个点之间的距离 3> 提示 * C语言的math.h中有个函数:double pow(double

一个截取字符串函数引发的思考

背景 前些天,遇到这样一个问题,问题的内容如下: 要求编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,如"我ABC", 4,截取后的效果应该为"我AB",输入"我ABC汉DEF", 6,应该输出为"我ABC",而不是"我ABC+汉的半个". 问题 刚看到这个问题的时候,以为还是很简单的,但写出来之后,发现并不是想要的效果.回想一下当时的思路,就发现刚开

【ROC曲线】关于ROC曲线、PR曲线对于不平衡样本的不敏感性分析说引发的思考

ROC曲线 在网上有很多地方都有说ROC曲线对于正负样本比例不敏感,即正负样本比例的变化不会改变ROC曲线.但是对于PR曲线就不一样了.PR曲线会随着正负样本比例的变化而变化.但是没有一个有十分具体和严谨地对此做出过分析和论证(至少我没有找到). 此处记为结论1: 结论1:PR曲线会随着正负样本比例的变化而变化:但是ROC曲线不会. 此处我就这一问题进行了详细的分析论证,并在这个过程中引发了很多思考. 首先,如何分析这个问题呢? 看下ROC曲线是由TPR和FPR组成的 下面我们这样来分析这个问题

《技术、沟通、协作,引发的思考》

<技术.沟通.协作,引发的思考> 01. 有些朋友私信问我,最近又在忙什么,很少看到我活跃了.其实,我在憋大招!我花了很多心思在项目上, 可以说,这是我工作以来,最重要的时刻,成败在此一举! 02. 我按着倒序来表述,也能谈谈我对于文章主题的思考.接下来的两周时间,我会与我的项目小团队,完美的与"理财运营中心"(我在互联网金融行业)实现功能联调测试.上线以后,整个公司理财营销业务的20%~50%的用户流量将正式走我们所开发的"智能营销体系(这是一个大数据挖掘应用的

由 &#39;&#39; in &#39;abc&#39; return True 引发的思考----Python 成员测试操作

最近遇到判断字典中是否存在空字符串'',这个很好判断,直接用:'' in ['a','b','c'],就可以直接判断出来:但是当我对字符串使用 "in" 方法进行判断的时候,发现:'' in 'abc' 仍然会返回True,对于这个问题,之前一直没有注意到过其中的原理,现在去进行探索总结一下: 首先,查看官方文档:https://docs.python.org/2/reference/expressions.html#not-in 文档在5.9.2中:Membership test o