linux如何进入解释器路径,如何更改解释器路径并将命令行参数传递给Linux上的"可执行"共享库?...

以下是"可执行"共享库的最小示例(假定文件名:)mini.c:

// Interpreter path is different on some systems

//+definitely different for 32-Bit machines

const char my_interp[] __attribute__((section(".interp")))

= "/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2";

#include

#include

int entry() {

printf("WooFoo!\n");

exit (0);

}

如果用例如:编译它gcc -fPIC -o mini.so -shared -Wl,-e,entry mini.c."运行"结果.so将如下所示:

confus@confusion:~$ ./mini.so

WooFoo!

我现在的问题是:

如何更改上述程序以将命令行参数传递给.so-file 的调用?更改后的示例shell会话可能如下所示:

confus@confusion:~$ ./mini.so 2 bar

1: WooFoo! bar!

2: WooFoo! bar!

confus@confusion:~$ ./mini.so 3 bla

1: WooFoo! bla!

2: WooFoo! bla!

3: WooFoo! bla!

5: WooFoo! Bar!

在编译时检测也是很好的,目标是32位或64位二进制文​​件,以相应地更改解释器字符串.否则,会收到"访问已损坏的共享库"警告.就像是:

#ifdef SIXTY_FOUR_BIT

const char my_interp[] __attribute__((section(".interp"))) = "/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2";

#else

const char my_interp[] __attribute__((section(".interp"))) = "/lib/ld-linux.so.2";

#endif

或者甚至更好,完全自动检测适当的路径,以确保编译库的系统是正确的.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值