1625-5 王子昂 总结《2017年5月19日》 【连续第230天总结】
A. 加密与解密 数据结构
B. 数据结构是计算机存储、组织数据的方式。逆向分析时,确定了数据结构后,算法就容易得到了。不过有些时候也会反过来,根据特定算法来判断数据结构。
局部变量:
局部变量的生命周期只在函数内部。
从汇编角度看,就是在堆栈中进行分配空间,而函数执行完毕后释放这些堆栈。
程序用"sub esp,8"为局部变量分配空间,用[esp-xxxx]寻址调用这些变量。而参数调用相对于ebp偏移量是正的,因此容易区分
当函数退出时,用esp,8指令平衡堆栈
另外,编译器可能会用push reg指令来取代sub esp,4指令以节省几个字节
局部变量的起始值是随机的,是其它函数执行后留在堆栈中的垃圾数据,因此需要对它进行初始化。
初始化局部变量有两种方法,一种是通过mov进行赋值,一种是直接push赋初值
除了堆栈占用2个寄存器外,编译器会利用剩下的6个通用寄存器尽可能有效地存放局部变量,这样可以产生最小的代码。当然,如果寄存器不够用,就将变量放入堆栈中
C. 明日计划
数据结构,全局变量和数组