glibc php,glibc 源码之 include/libc-symbols.h

/* The following macros are used for PLT bypassing within libc.so

(and if needed other libraries similarly).

First of all, you need to have the function prototyped somewhere,

say in foo/foo.h:

int foo (int __bar);

If calls to foo within libc.so should always go to foo defined in libc.so,

then in include/foo.h you add:

libc_hidden_proto (foo)

line and after the foo function definition:

int foo (int __bar)

{

return __bar;

}

libc_hidden_def (foo)

or

int foo (int __bar)

{

return __bar;

}

libc_hidden_weak (foo)

Similarly for global data. If references to foo within libc.so should

always go to foo defined in libc.so, then in include/foo.h you add:

libc_hidden_proto (foo)

line and after foo's definition:

int foo = INITIAL_FOO_VALUE;

libc_hidden_data_def (foo)

or

int foo = INITIAL_FOO_VALUE;

libc_hidden_data_weak (foo)

If foo is normally just an alias (strong or weak) to some other function,

you should use the normal strong_alias first, then add libc_hidden_def

or libc_hidden_weak:

int baz (int __bar)

{

return __bar;

}

strong_alias (baz, foo)

libc_hidden_weak (foo)

If the function should be internal to multiple objects, say ld.so and

libc.so, the best way is to use:

#if !defined NOT_IN_libc || defined IS_IN_rtld

hidden_proto (foo)

#endif

in include/foo.h and the normal macros at all function definitions

depending on what DSO they belong to.

If versioned_symbol macro is used to define foo,

libc_hidden_ver macro should be used, as in:

int __real_foo (int __bar)

{

return __bar;

}

versioned_symbol (libc, __real_foo, foo, GLIBC_2_1);

libc_hidden_ver (__real_foo, foo) */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值