ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

程序设计与计算机系统 第3、4章

2026/9/29 1:56:13 拓冰建站 浏览量
程序设计与计算机系统 第3、4章

一、

        生成汇编文件 .s :gcc -O1 -S code.c

        生成机器码文件 .o :gcc -O1 -c code.c

        生成可执行文件 : gcc -O1 -o code.c main.c

        反汇编: objdump -d code.o

        同一段代码。单个文件生成的.o文件的反汇编码和链接后可执行程序的反汇编码一致,不同在于地址偏移不一样,,单个文件的偏移是相对于他自己这个文件的,从0开始。
 

二、

        汇编后缀: b = 字节  w = 字  l = 双字 或 double s = float

         8 个寄存器 : 6 通用 eax、ecx 、edx 、ebx 、edi 、esi + 2 个 特殊

        EBP存储着当前函数栈底的地址,栈低通常作为基址,我们可以通过栈底地址和偏移相加减来获取变量地址(很重要)。

        ESP就是前面说的,始终指向栈顶,只要ESP指向变了,那么当前栈顶就变了

        操作数: 1 、立即数 $  2、寄存器  3、存储器引用(多种寻址模式)

三、

        if else 在汇编层次用 jmp ,无论是否有else ,都会生成else 的汇编分支

        while ,for , do while ,汇编层次都按 do while 模式进行生成,只是初始化部分,while for 会有额外的先行判断

四、

        linux 对齐:2字节数据类型的地址必须是2的倍数,,较大的数据类型地址必须是4的倍数

        windows对齐:任何K字节基本对象的地址必须是K 的倍数, k=2\4\8

五、

        缓冲区溢出:会导致栈信息错误,可以被作为攻击手段:输入给程序一段字符串,这个字符串包含一些可执行代码的字节编码(攻击代码),还有一些字节用一个执行攻击代码的指针覆盖返回地址。

        对抗攻击:栈随机化,每次运行,同一个代码的对象栈地址是不一样的;栈保护机制;限制可执行代码区域

六、

        指令编码:汇编指令都有固定的字节级编码,而每种指令需要的额外参数等的长度也应该固定。也就是说,任意的字节序列要么是唯一的指令序列编码,要么就不是合法的,这样才能保证无二义性,只要从第一个字节开始处理,就可以确定所有的指令序列。

        CISC:复杂指令集计算机

         RISC:精简指令集计算机

七、

        取指 、译码 、 执行AUL 、访存 、 写回、 更新PC

        流水线技术。。。