找回密码
 注册
搜索
查看: 664|回复: 0

[资料] 使用 $Super$$ 和 $Sub$$ 覆盖符号定义

[复制链接]
发表于 2011-8-9 20:44:50 | 显示全部楼层 |阅读模式
在某些情况下,无法修改现有符号,例如,由于符号位于外部库或 ROM 代码中。

可以使用 $Super$$ 和 $Sub$$ 模式来修补现有符号。

例如,要修补函数 foo() 的定义,请按如下方式使用 $Super$$foo() 和 $Sub$$foo():
$Super$$foo

标识未修补的原始函数 foo()。 使用它可以直接调用原函数。
$Sub$$foo

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

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

Example 4.4 说明修改遗留函数 foo() 而导致调用 ExtraFunc() 和 foo()。 有关详细信息,请参阅《ARM 体系结构的 ELF》。

Example 4.4. 使用 $Super$$ 和 $Sub$$
extern void ExtraFunc(void);
extern void $Super$$foo(void):

/* this function is called instead of the original foo() */
void $Sub$$foo(void)
{
  ExtraFunc();    /* does some extra setup work */
  $Super$$foo();  /* calls the original foo() function */
}
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-1-26 17:39 , Processed in 0.045687 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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