免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: x5miao
打印 上一主题 下一主题

又发现一个C和C++的小不同 [复制链接]

论坛徽章:
0
71 [报告]
发表于 2011-10-21 03:04 |只看该作者
回复  AD8018

arm有相对pc获取数据的指令?
OwnWaterloo 发表于 2011-10-21 02:55


有。

但有个现实的困境,他相对于pc的offset有限制,这个offset值非常小,
于是不可能让大量的数据通过pc+offset直接取得。

pc+offset处,通常只存放这些“大量数据”的起始地址。
LDR r0, [pc, offset]   
这样r0是地址,不是数据,
效果上,相当于
mov eax, 0x123456

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
72 [报告]
发表于 2011-10-21 03:15 |只看该作者
回复 71# AD8018

>> 但有个现实的困境,他相对于pc的offset有限制,这个offset值非常小
又蛋疼了……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
73 [报告]
发表于 2011-10-21 03:19 |只看该作者
回复 71# AD8018

>> pc+offset处,通常只存放这些“大量数据”的起始地址。
>> LDR r0, [pc, offset]   
>> 这样r0是地址,不是数据

上面说错……   不是蛋疼,是这样不足以完成位置无关……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
74 [报告]
发表于 2011-10-21 03:23 |只看该作者
回复 67# AD8018

>> 如果位置无关,应该R9由加载器存放数据的基础地址,
>> LDR R0,[PC, offset] 取出数据相对于R9的偏移。
>> 在结合R9+偏移,得到数据的实际地址。更麻烦一点。

这样应该可行了。

如果考虑共享库,executable、各个共享库之间的基础地址不同吧?
R9根据什么切换呢?

每次函数调用(如果该函数会访问本共享库全局变量)都会切换么?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
75 [报告]
发表于 2011-10-21 03:35 |只看该作者
    "internal"
          Internal visibility is like hidden visibility, but with
          additional processor specific semantics.  Unless otherwise
          specified by the psABI, GCC defines internal visibility to
          mean that a function is _never_ called from another module.
          Compare this with hidden functions which, while they cannot
          be referenced directly by other modules, can be referenced
          indirectly via function pointers.  By indicating that a
          function cannot be called from outside the module, GCC may
          for instance omit the load of a PIC register since it is known
          that the calling function loaded the correct value.

似乎是遇见了 __attribute__(__visibility__("internal")) 与 "hidden" 行为不同的cpu了……

论坛徽章:
0
76 [报告]
发表于 2011-10-21 08:02 |只看该作者
回复  OwnWaterloo
你这是学生课本上才会出现的题目啊,处在我的位置,你说我看这些干什么?那不 ...
塑料袋 发表于 2011-10-20 23:31

确实是学生课本上的题目, 但是实际中就是这么用的啊, 要不然链表你是怎么用的???
听说过  软件 = 数据结构 吗?

论坛徽章:
0
77 [报告]
发表于 2011-10-21 08:04 |只看该作者
回复  AD8018

>> 如果位置无关,应该R9由加载器存放数据的基础地址,
>> LDR R0, 取出数据相对于R9的偏 ...
OwnWaterloo 发表于 2011-10-21 03:23


    R9应该由loader负责写入。
无OS裸奔下,实现过这样的简单loader,用libelf分析出代码段和数据段,写入内存。
运行代码段前,loader将数据段写入内存的地址赋值给R9。
这样就可以位置无关了。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
78 [报告]
发表于 2011-10-21 08:14 |只看该作者
R9应该由loader负责写入。
无OS裸奔下,实现过这样的简单loader,用libelf分析出代码段和数据段, ...
AD8018 发表于 2011-10-21 08:04



    知道我为啥苦恼了吧

  连寻址这么个问题,都很难对他解释清楚,到最后他还扯到symbol的hidden属性上去,不骂街干什么?

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
79 [报告]
发表于 2011-10-21 09:09 |只看该作者
回复  OwnWaterloo


    我 操 你 妈,滚!

   爱咋地咋地
塑料袋 发表于 2011-10-20 23:52



    蛋定啊,这都能骂上,定力不足。

ow的严谨和逻辑你肯定得再学学,我也得学。

论坛徽章:
0
80 [报告]
发表于 2011-10-21 09:27 |只看该作者
知道我为啥苦恼了吧

  连寻址这么个问题,都很难对他解释清楚,到最后他还扯到symbol的hidden ...
塑料袋 发表于 2011-10-21 08:14


欧阳锋和黄药师,总是互相有些苦恼的吧。。淡定,淡定。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP