机器级编程中存在两种十分重要的抽象
1.由指令集体系结构或指令集架构来定义机器级程序的格式和行为
2.机器级程序使用的内存地址是虚拟地址
内存在机器代码层面的本质是什么?
一个很大的,按字节寻址的数组
在机器执行的程序只是一个字节序列,是一系列指令的编码,而对这些指令的源代码一无所知
关于机器代码和反汇编需要注意的事项有哪些?
X86-64的指令长度从1—15字节不等
1.常用的指令以及操作数较少的指令所需的字节数少
2.而那些不太常用或操作数较多的指令所需的字节数较多
设计指令格式的方式是,从某个给定位置开始,将字节唯一解码成机器指令
反汇编器使用的指令命名规则与GCC生成的汇编代码使用的有些细微差别
反汇编器给call和ret指令添加了‘q’后缀,省略这些后缀也没问题
在编译器生成汇编代码之后,所有以“.”开头的行都是知道汇编器和连接器工作的伪指令
在C程序中插入汇编代码有两种方法:
1.编写完整函数,放进一个独立的汇编代码文件中,让汇编器和编译器把他和用C语言写的代码合并起来
2.用GCC的内联汇编,用asm伪指令可以在C程序中包含简短的汇编代码