zoukankan      html  css  js  c++  java
  • strtab symtab shstrtab

    关于.strtab,.symtab,.shstrtab
    .strtab是字符串表(STRING TABLE)
    .shstrtab是段表字符串表(Section Header String Table),针对段表
    .symtab是符号表,一般是变量、函数

    shstrtab及symtab经常引用strtab中的字符串。


    ld链接脚本中将会定义很多特殊的符号,这些符号并没有在你的程序中定义,但是你可以直接声明并应用,我们称之为特殊符号。
    查看ld的默认链接脚本:
    ld -verbose
    对于这些特殊符号,我们不必定义它,只需声明引用即可使用。链接器会在将程序最终链接成可执行文件的时候将其解析成正确的值,只有
    在使用ld链接生成最终可执行文件的时候这些符号才会存在。

    下列地址都是程序被装载时的虚拟地址:
    __executable_start,该符号为程序的起始地址,注意,不是入口地址,是程序最开始的地址。
    __etext或_etext或etext,该符号为代码段结束地址,即代码段最末尾的地址。
    _edata或edata,该符号为数据段结束地址,即数据段最末尾的地址。
    _end或end,该符号为程序结束地址。

          1 #include <stdio.h>                                                                                         
          2
          3 extern char __executable_start [];
          4 extern char etext[], _etext[], __etext[];
          5 extern char edata[], _edata[];
          6 extern char end[], _end[];
          7
          8 int main(void)
          9 {
         10     printf("Executable Start %p\n", __executable_start);
         11     printf("Text End %p %p %p\n", etext, _etext, __etext);
         12     printf("Data End %p %p\n", edata, _edata);
         13     printf("Executable End %p %p\n", end, _end);
         14     return 0;
         15 }

    输出结果:

    Executable Start 0x400000
    Text End 0x400656 0x400656 0x400656
    Data End 0x601020 0x601020
    Executable End 0x601030 0x601030

          1 #include <stdio.h>                                                                                         
          2
          3 extern char __executable_start;
          4 extern char etext[], _etext[], __etext[];
          5 extern char edata[], _edata[];
          6 extern char end[], _end[];
          7
          8 int main(void)
          9 {
         10     printf("Executable Start %x\n", __executable_start);
         11     printf("Executable Start %p\n", &__executable_start);
         12     printf("Text End %p %p %p\n", etext, _etext, __etext);
         13     printf("Data End %p %p\n", edata, _edata);
         14     printf("Executable End %p %p\n", end, _end);
         15     return 0;
         16 }

    输出结果:

    Executable Start 7f
    Executable Start 0x400000
    Text End 0x400676 0x400676 0x400676
    Data End 0x601020 0x601020
    Executable End 0x601030 0x601030

  • 相关阅读:
    6-2 铁轨 uva 514
    并查集基础
    周练7
    周练5
    周练4
    二分查找
    周练3
    2-7 使用不同方式进行定位.py
    2-6 使用title_contains检查页面是否正确
    启用不同浏览器.py
  • 原文地址:https://www.cnblogs.com/openix/p/2834498.html
Copyright © 2011-2022 走看看