免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1679 | 回复: 3
打印 上一主题 下一主题

[实践] elf文件格式的疑问 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-06 10:40 |只看该作者 |倒序浏览
本帖最后由 mrpre 于 2014-06-06 11:02 编辑

小程序如下:
  1. extern int foo;

  2. int abcdefg = 0x12345678;
  3. /*hello*/
  4. char *ddddd="123456";
  5. char *aaaaa="78910";

  6. int array[]={1,2,3,4};
  7. int function(void) {
  8.     return foo;
  9. }

  10. 程序源码附件以及我的.o文件
  11. relf.rar (658 Bytes, 下载次数: 2)


复制代码








ddddd aaaaa的数据部分居然在.rodata段

附上二级制文件:

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2014-06-06 10:47 |只看该作者
本帖最后由 mrpre 于 2014-06-06 11:05 编辑

根据第一张图 : symtab
我所知到的是:存储在data还是 rodata,是编译器相关的。不同版本的gcc,结果不一样。
那么现在这种情况,aaaaa或者ddddd是如何关联到自己的数据的?符号表中,abcdefg和aaaaa和bbbbb的Ndx都是3,即在data段。abcdefg很简单,就在.data段,并且的确能找到它的数据,elf也指明了偏移等信息,可是aaaaa的数据呢,数据在哪里(我一个一个段试过去,才发现aaaaa和bbbbb的数据是存在rodata中的),data段里面是0,怎么才能找到它具体的数据,或者说elf文件在哪里说明aaaaa和bbbbb 是存在rodata 段的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2014-06-06 14:50 |只看该作者
soga,objdump -d -j .data relf.o 打出来的aaaaa,ddddd 并不是aaaaa,ddddd 的值,他们显示的数字“00000000”和“07000000”表示aaaaa,ddddd 的值在.rodata中的偏移量。

论坛徽章:
0
4 [报告]
发表于 2014-06-10 22:49 |只看该作者
楼主这几个命令用得很熟练哦, 据我所知,char *xx = "const string";

xx这个字符指针变量被赋值了,应该就是入section .data,而后面的是叫做字符串字面值,按规则来讲是只读的,所以是放.rodata。

那幅图里的 0x78 56 34 12 看起来就是个整数,可以直接“注入”?
而对于字符串来讲,因为有个.rodata区域专门存储了,所以只要指定地址即可,不知道我理解的对否。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP