背景
大部分人对数值信息都了解七七八八,但汇编了解的人却不多,虽然我学过王爽的《汇编语言》,但那个时候对计算机理解不深刻等于没学,目前在工作中遇到很多相关问题每次查起来很麻烦,这次正好借csapp再系统的梳理一遍,顺便利用拆弹作业做个巩固。
相关知识
C/C++代码变成可执行文件包括4个阶段,分别是预处理、编译成汇编语言、将汇编语言转为机器码、链接。
预处理
把源代码的include和define都替换掉
编译
这个阶段会将源代码转为汇编代码,形式如下,注意,凡是以.开头的如.file都可以理解为汇编代码的注释,不起任何作用,主要是给后面汇编器看生成elf的时候用的
汇编
汇编就是将上面的代码翻译成二进制,同时不同的代码,全局变量啥的各种乱七八糟的都按照虚拟地址排好,然后成一个elf格式的文件,理论上该文件不需要下一步链接也可以执行。常用readelf和objdump两个分析器来分析该文件。
这里注意,书上里面反汇编还可以看要原始函数名,这是因为保留.symtab和.strtab这两个段,如果去掉的话可以用strip mstore.o(该选项也会去掉重定位信息)来直接去掉,这样反汇编就看不到了,避免竞争对手根据名字快速分析出函数作用。
链接
后面有专门的章节讲解