binary hacks读数笔记(objdump命令)

首先看一段程序:

int printf(const char* fromat,...);
int global_init_var=84;
int global_uninit_var;
 
void func1(int i)
{
      printf("%d\n,i");
}
 
int main()
{
        static int static_var=85;
        static int static_var2;
        int a=1;
        int b;
        func1(static_var+static_var2+a+b);
        return a;
}

gcc -c SimpleSection.o

利用objdump -h命令将SimpleSection.o这个ELF文件的各个段基本信息打印出来,如下:

Sections:
Idx Name                         Size               VMA                         LMA                    File off     Algn
  0 .text                          0000004f  0000000000000000  0000000000000000  00000040  2**0
                                    CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data                        00000008  0000000000000000  0000000000000000  00000090  2**2
                                     CONTENTS, ALLOC, LOAD, DATA
  2 .bss                         00000004  0000000000000000  0000000000000000  00000098  2**2
                                    ALLOC
  3 .rodata                    00000006  0000000000000000  0000000000000000  00000098  2**0
                                   CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .comment               0000002e  0000000000000000  0000000000000000  0000009e  2**0
                                   CONTENTS, READONLY
  5 .note.GNU-stack     00000000  0000000000000000  0000000000000000  000000cc  2**0
                                   CONTENTS, READONLY
  6 .eh_frame                00000058  0000000000000000  0000000000000000  000000d0  2**3
                                    CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
 
       除了基本的代码段、数据段(初始化的全局变量与局部静态变量)、BSS段(未初始化的全局变量和未初始化的局部静态变量)之外,还有之都数据段( .rodata),注释信息段( .comment),堆栈提示段( .note.GNU-stack),调试信息段( .eh_frame)。
其中 Size表示该段的大小,  File off表示段所在位置(距离ELF Header 00000000)的偏移。  CONTENTS, ALLOC等表示各段的属性。 CONTENTS表示该段在文件中存在,BSS段
其实在ELF中不存在内容。
 

猜你喜欢

转载自www.cnblogs.com/wsw-seu/p/10600537.html