请选择 进入手机版 | 继续访问电脑版

通业开发人论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6444|回复: 0

使用 $Super和$Sub覆盖符号定义

[复制链接]
发表于 2016-11-10 13:22:27 | 显示全部楼层 |阅读模式
在某些情况下,无法修改现有符号,例如,由于符号位于外部库或 ROM 代码中。可以使用 $Super$$ 和 $Sub$$模式来修补现有符号。
例如,要修补函数 foo() 的定义,请按如下方式使用 $Super$$foo() 和 $Sub$$foo():
$Super$$foo标识未修补的原始函数 foo()。 使用它可以直接调用原函数。

$Sub$$foo标识调用的新函数,而不是原始函数 foo()。可以使用此模式在原始函数之前或之后添加处理。


$Sub 和 $Super 机制只在静态链接时起作用,$Super$$ 引用无法导入或导出到动态符号表中。


例如:
extern void ExtraFunc(void);
extern void $Super
foo(void):/∗thisfunctioniscalledinsteadoftheoriginalfoo()∗/void$Sub

foo(void)
{
  ExtraFunc();    /* does some extra setup work */
  $Super$$foo();  /* calls the original foo() function */
}

摘自<ELF for arm..>
  A symbol $Sub
nameisthesub−classversionofname.Asymbol$Super

name is the super-class version of
name. In the presence of a defintion of both name and $Sub$$name:

1. A reference to name resovles to the definition of $Sub
name.2.Areferenceto$Super

name resolves to the definition of name.

It is an error to refer to $Sub
name,ortodefine$Super

name, or to use $Sub
…or$Super

… recursively.
A platform standard may mandate support of sub- and super-class symbols.
There are outstanding defects for sub- and super-class symbols DE-316140.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|TongYe R&D Inc. ( 粤ICP备17061194号-1 )

GMT+8, 2020-8-7 06:36 , Processed in 0.119007 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表