zoukankan      html  css  js  c++  java
  • 程序员的自我修养学习笔记

    ------------------------------------------------------------------------
    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;

    } 

  • 相关阅读:
    hdu 2647 Reward
    hdu 2094 产生冠军
    hdu 3342 Legal or Not
    hdu 1285 确定比赛名次
    hdu 3006 The Number of set
    hdu 1429 胜利大逃亡(续)
    UVA 146 ID Codes
    UVA 131 The Psychic Poker Player
    洛谷 P2491消防 解题报告
    洛谷 P2587 [ZJOI2008]泡泡堂 解题报告
  • 原文地址:https://www.cnblogs.com/awiki/p/5521814.html
Copyright © 2011-2022 走看看