什么是堆栈帧

可以肯定地说,任何设计合理的程序都是围绕着数据进行设计的。哪些数据必须由程序来管理呢?在程序中这些数据最准确、高效的表示方法是什么?这些都是有经验的软件设计人员和软件开发人员必须知道的最基本的问题。
对逆向工程而言,数据也是同样重要的。要真正理解一个程序,逆向者必须理解这个程序的数据。只要理解了程序中关键数据结构的总体规划和设计目的,我们就可以相对比较轻松地破译我们感兴趣的特定的代码区域。
本附录讲解了各种各样与程序中底层数据管理相关的主题。我们将从堆栈开始,讨论在程序中是如何使用堆栈的,然后接着讨论程序中使用的几种最基本的数据构造(data constructs。译注:数据构造要比数据结构的含义更广泛。),比如说变量,等等。接下来一节我们讨论数据在内存中的布置,并且描述了(从底层代码的视角来看)数组、链表等常用的数据构造。最后,我将演示类在底层是怎样实现的以及怎样在逆向工程中识别类。

C.1 堆栈

可以说堆栈是一块连续的内存,在系统中运行的例程将它组织成“层状”结构。堆栈中的内存单元在函数的生命周期内可以使用,而当函数返回时,这些内存单元就会被释放(释放后其他函数就可以用了)。
接下来的几小节将展示堆栈是怎样组织的,并讲述各种决定堆栈的基本布局的调用约定。

C.1.1 堆栈帧

堆栈帧指的是在堆栈中为当前正在运行的函数分配的区域(或空间)。传入的参数、返回地址(当这个函数结束后必须跳转到该返回地址。译注:即主调函数的断点处)以及函数所用的内部存储单元(即函数存储在堆栈上的局部变量)都在堆栈帧中。
对函数来说,堆栈帧内部具体的布局是一个非常关键的问题,因为布局会影响到函数访问堆栈中存放的传入参数以及存放其内部数据(例如局部变量)的方式。大多数函数调用代码都是以一段为函数设置堆栈帧的序言(prologue)开始的。设置堆栈帧的目的是:通过将一个指针存放在堆栈中参数区域和局部变量区域之间的那个单元,使得函数可以简便而快捷地访问这些参数和局部变量。这个指针通常存放在一个辅助寄存器中(通常是EBP),而腾出来ESP(ESP是主堆栈指针)来记录当前堆栈位置(即堆栈顶)。当前堆栈位置非常重要,因为这个函数可能还需要调用另外一个函数——这种情况下在ESP指向的当前位置下面(译注:“下面”指的是更低内存地址,而不是图C.1中所示的那种“上下”关系)的区域就要被用来给被调函数创建一个新的堆栈帧了。
图C.1展示了堆栈的总体布局以及堆栈帧是怎样布置的。


144434732.jpg

总结:
堆栈帧是一个为函数保留的区域,用来存储关于参数、局部变量和返回地址的信息。
堆栈帧通常是在新的函数调用的时候创建,并在函数返回的时候销毁。
说白了,堆栈由堆栈帧组成. 当调用函数时堆栈帧被压入栈中, 当函数返回时堆栈帧被从栈中弹出. 堆栈帧包括函数的参数, 函数地局部变量, 以及恢复前一个堆栈帧所需要的数据。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容