Java执行cpp二进制文件_java – 在shell脚本中嵌入可执行二进制文件

是的,这可以做到.它实际上与你的链接文章在概念上非常相似.诀窍是使用uuencode将二进制文件编码为文本格式,然后将其添加到脚本的末尾.

然后编写脚本,使其在自身上运行uudecode以创建二进制文件,更改权限然后执行它.

uuencode和uudecode最初是为了将二进制内容转移到互联网的前身而创建的,互联网没有很好地处理二进制信息.转换为文本意味着它也可以作为shell脚本发布.如果由于某种原因,当您尝试运行uuencode时,您的发行版会抱怨,这可能意味着您必须安装它.例如,在Debian Squeeze上:

sudo aptitude install sharutils

将为您获取相关的可执行文件.这是我经历的过程.首先创建并编译您的C程序hello.c:

pax> cat hello.c

#include

int main (void) {

printf ("Hello\n");

return 0;

}

pax> gcc -o hello hello.c

然后创建一个shell脚本testEmbed.sh,它将解码自己:

pax> cat testEmbed.sh

#!/bin/bash

rm -f hello

uudecode $0

./hello

rm -f hello

exit

第一个rm语句演示了hello可执行文件是由这个脚本重新创建的,而不是在编译中徘徊.由于您还需要文件中的有效负载,因此将编码的可执行文件附加到其末尾:

pax> uuencode hello hello >>testEmbed.sh

然后,当您执行脚本testEmbed.sh时,它会提取可执行文件并运行它.

这个工作的原因是因为uudecode在其输入(开始和结束)中查找某些标记行,这些标记行由uuencode放置,因此它只尝试解码编码的程序,而不是整个脚本:

pax> cat testEmbed.sh

#!/bin/bash

rm -f hello

uudecode $0

./hello

rm -f hello

exit

begin 755 hello

M?T5,1@$!`0````````````(``P`!````$(,$"#0```#`!@```````#0`(``'

M`"@`'@`;``8````T````-(`$"#2`!`C@````X`````4````$`````P```!0!

: : :

M:&%N9&QE`%]?1%1/4E]%3D1?7P!?7VQI8F-?8W-U7VEN:70`7U]B

M

4=&AU;FLN8G@`;6%I;@!?:6YI=```

`

end

您还应该担心其他一些问题,例如您的程序可能需要目标系统上不存在的共享库,但上述过程基本上就是您所需要的.

JAR文件的过程非常相似,只是您运行它的方式不同.它仍然是单个文件,但您需要替换该行:

./hello

能够运行JAR文件的东西,例如:

java -jar hello.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值