int printf(const char* format, ...);
int global_init_var = 84;
int global_uninit_var;
extern char __executable_start[];
__attribute__ ((section("FOO"))) int global =43;
typedef int HRESULT;
#define _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)
enum HResult
{
E_FAIL = _HRESULT_TYPEDEF_(0x80004005)
};
void func1(int i)
{
printf("%d, %X\n",i, __executable_start);
}
int main(void)
{
static int static_var = 85;
static int static_var2;
int a=1;
int b;
func1(static_var + static_var2 + a + b);
printf("----%d\n", E_FAIL);
return a;
}
gcc -c SimpleSection.c
目标文件是由各个节(Section)或者说段(Segment)组成。
如上所示的源文件SimpleSection.c,将其编译成目标文件SimpleSection.o:
#gcc -c SimpleSection.c
可以用如下命令来查看查看目标文件的各个段的基本信息:
#objdump -h SimpleSection.o
我们也可以从readelf命令来查看ELF文件,查看文件头
readelf -h SimpleSection.o
具体这个结构的定义可以查看/usr/include/elf.h头文件里的Elf32_Ehdr或者Elf64_Ehdr结构。
使用如下命令可以查看段表
readelf -S SimpleSection.o
段表是一个以Elf32_Shdr结构体为元素的数组。数组的大小为Elf32_Ehdr里面的 Number of section headers:这一行。
使用如下命令可以查看符号表:
readelf -s SimpleSection.o