挖掘目标文件(一)

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值