zoukankan      html  css  js  c++  java
  • 程序编码(机器级代码+汇编代码+C代码+反汇编)

    【-1】相关声明

    本文总结于csapp; 了解详情,或有兴趣,建议看原版书籍;
    

    【0】程序编码

    GCC调用了一系列程序,将源代码转化成可执行代码的流程如下:

    • (1)C预处理器扩展源代码,插入所有用#include命令指定的文件,并扩展声明的宏;
    • (2)编译器产生两个源代码的汇编代码:*.s;
    • (3)汇编器将汇编代码转化为二进制目标代码 :*.o ; (目标代码是机器代码的一种形式,它包含所有指令的二进制表示,但没有填入地址的全局值)
    • (4)链接器将目标代码与实现库函数的代码合并,最终产生可执行代码文件;

    【1】机器级代码

    对于机器级编程来说,两种抽象很重要:

    • (1)机器级程序的格式和行为,定义为指令集体系结构;
    • (2)机器级程序使用的存储器地址是虚拟地址;

    (Attention:os负责管理虚拟地址空间, 将虚拟地址翻译成实际处理器存储器中的物理地址!)


    【2】要知道处理器的状态是可见的:

    • (1)程序计数器:pc,指示将要执行的下一条指令在存储器中的地址;
    • (2)整数寄存器文件:包含8个命名的位置;
    • (3)条件码寄存器:保存着算术或者逻辑指令的状态信息;
    • (4)一组浮点寄存器存放浮点数据;

    【3】代码示例(联系开头的程序编码首文)

    3.1)gcc编译器产生汇编代码

    gcc -O1 -S code.c  generates code.s
    gcc -O1 -S p107.c  generates p107.s
    

    这里写图片描述

    3.2)gcc编译并汇编该代码

    gcc -O1 -c p107.c 产生目标代码p107.o, 它是二进制格式,所以无法直接查看。
    

    这里写图片描述

    3.3)反汇编器-disassmbler, 根据目标代码产生类似于汇编代码的格式

    objdump -d p107.o >> p107-dis.s  
    

    这里写图片描述

    3.4)生成可执行文件 prog

    gcc -O1 -o prog p107.o p107-main.c
    

    这里写图片描述

    3.5)反汇编prog文件

    objdump -d prog >> prog-dis.s   
    

    这里写图片描述

    int accum = 0;
    int sum(int x, int y)
    {
     int t = x + y;
     accum += t;
     return t;
    }
    

    (Attention)

    • A0)这段代码(L121~L128)和 p107-dis.s 的代码几乎完全一样。
    • A1)其中一个主要的区别:是左边列出的地址不同——链接器将代码的地址移到一段不同的地址范围中。
    • A2)第二个不同之处:在于链接器确定了存储全局变量accum的地址。
    • A3)在p107-dis.s的12行,很明显accum=0, 而在prog的反汇编指令中(L126),accum的地址就设置为0x8049634了。

    【4】ATT与intel 汇编代码格式

    ATT是GCC、OBJDUMP和其它一些我们使用的工具的默认汇编格式;
    其它一些编程工具, 包括Microsoft工具,以及来自intel的文档,其汇编代码是intel格式的;

  • 相关阅读:
    www.insidesql.org
    kevinekline----------------- SQLSERVER MVP
    Sys.dm_os_wait_stats Sys.dm_performance_counters
    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
    VITAM POST MORTEM – ANALYZING DEADLOCKED SCHEDULERS MINI DUMP FROM SQL SERVER
    Cargo, Rust’s Package Manager
    建筑识图入门(初学者 入门)
    Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge
    Microsoft SQL Server R Services
    The Rambling DBA: Jonathan Kehayias
  • 原文地址:https://www.cnblogs.com/pacoson/p/4893175.html
Copyright © 2011-2022 走看看