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

  • 相关阅读:
    CSS3 target伪类简介
    不用position,让div垂直居中
    css3 在线编辑工具 连兼容都写好了
    a标签伪类的顺序
    oncopy和onpaste
    【leetcode】1523. Count Odd Numbers in an Interval Range
    【leetcode】1518. Water Bottles
    【leetcode】1514. Path with Maximum Probability
    【leetcode】1513. Number of Substrings With Only 1s
    【leetcode】1512. Number of Good Pairs
  • 原文地址:https://www.cnblogs.com/openix/p/2834498.html
Copyright © 2011-2022 走看看