逆向学习从零开始(1)栈帧、调用约定 明白函数和寄存器、栈的关系
PE程序拖入OD有四个基础窗口:代码执行窗口、寄存器窗口、数据窗口、栈窗口,帮助我们对程序进行逆向分析,运行程序,处理器执行的是汇编代码,代码执行时临时保存数据的地方在寄存器和栈。
栈帧
栈的改变是临时的,比如我们调用一个函数,就会生成一个栈空间,调用函数执行结束,根据前面保存在栈里的值,会恢复调用函数之前寄存器的值和汇编代码执行到哪里的地址。
栈帧( stack frame )和栈有关,栈帧是在程序的运行时栈中分配的内存块,专门用于特定的函数调用。程序员通常会将可执行语句分组,划分成叫做函数(也称过程、子例程或方法)的单元。有时候,这样做是遵照所使用的语言的要求。多数情况下,以这些函数单元为基础构建程序是一种编程思维。
如果一个函数并未执行,通常它并不需要内存。但是,当函数被调用时,它就可能因为某种原因需要用到内存。这源于几方面的原因。其一,函数的调用方可能希望以参数(实参)的方式,向该函数传递信息,这些参数需要存储到函数能够找到它们的位置。其二,在执行任务的过程中,函数可能需要临时的存储空间。程序员通常会通过声明局部变量来分配这类临时空间,这些变量将在函