• 程序员的自我修养学习笔记


    ------------------------------------------------------------------------
    1.查看各种目标文件的结构和内容
    objdump -h SimpleSection.o
    ------------------------------------------------------------------------
    2.查看ELF文件代码段、数据段、BSS(Block Stated by Symbol)段的长度
    size SimpleSection.o
    注解:
    程序源码被编译后主要分成两种段:程序指令和程序数据。
    代码段属于程序指令,而数据段和.bss属于程序数据
    BSS最初是UA-SAP汇编器的一个伪指令,用于为符号预留一块内存空间
    ------------------------------------------------------------------------
    3.查看某个段的内容
    objdump使用:
    -s  将所有段的内容以十六进制方式打印出来
    -d  将所有包含指令的段反汇编
    -x  显示所有文件头的内容
    代码段:objdump -s -d SimpleSection.o
    数据段:objdump -x -s -d SimpleSection.o
    ------------------------------------------------------------------------
    4.自定义段
    将某二进制文件,比如图片、MP3音乐、词典一类的东西作为目标文件中的一个段
    objcopy -I binary -O elf32-i386 -B i386 image.jpg image.o
    objdump -ht image.o
    GCC关于自定义段的扩展机制:
    格式:__attribute__((section(name"))) 
    __attribute__((section("FOO"))) int global = 42;
    __attribute__((section("BAR"))) void foo()
    ------------------------------------------------------------------------
    5.文件头
    可以用readelf命令来详细查看ELF文件
    readelf -h SimpleSection.o
    -----------------------------------------------------------------------
    6.查看文件符号
    nm SimpleSection.o
    ------------------------------------------------------------------------
    7.查看文件的段表
    readelf -S SimpleSection.o
    ------------------------------------------------------------------------

    测试代码:

    /*
     * SimpleSection.c
     * 
     * Linux:
     *     gcc -c SimpleSection.c
     *
     * Windows:
     *     cl SimpleSection.c /c /2a
     
    */

    int printf(const char * format, ...);

    int global_init_var = 84;
    int global_uninit_var;

    void funcl(int i)
    {
        printf("%d ", i);
    }

    int main(void)
    {
        static int static_var = 85;
        static int static_var2;
        int a = 1;
        int b;

        funcl(static_var + static_var2 + a + b);
        return a;

    } 

  • 相关阅读:
    socket架构
    异常处理
    类的装饰器
    with&as上下文管理协议
    软件开发规范
    面向对象-描述符
    面向对象-迭代器
    面向对象编程多种特性
    体验Visual Studio 2015 之 MVC
    MVC 好记星不如烂笔头之 ---> 全局异常捕获以及ACTION捕获
  • 原文地址:https://www.cnblogs.com/awiki/p/5521814.html
Copyright © 2020-2023  润新知