从eclipse bundle中提取后损坏的ELF头/节

时间:2012-05-21 13:53:30

标签: java eclipse elf

我需要以下问题的帮助:

我有两个不同的eclipse产品,它们使用linux可执行文件所在的同一个bundle,但是使用目标平台上不同的eclipse插件(3.5和3.7)。两者都运行:

Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b06)

在32位Debian系统上。

两个应用程序都使用bundle.getEntry()从包中提取可执行文件,并通过FileInputStream将其放在目录中 - > FileWriter的。

然后调用可执行文件。在一种情况下,它完美地工作,而另一种情况则不然。对于3.5版(工作案例),$:file myFile表示以下内容:

ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

对于3.7版(非工作案例),$:file myFile表示如下:

ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), corrupted program header size, corrupted section header size

他们使用相同的操作系统,JRE和Bundle,但是什么在破坏我的ELF元数据? 我不知道其他任何地方。这是Java问题吗?日食?图书馆?

这里是复制方法:

URL url = bundle.getBundle(path);
inputStream = url.openStream();
FileWriter fileWriter = new FileWriter(path);

int in;
while ((in = inputStream.read()) != -1)
fileWriter.write(in);

inputStream.close();
fileWriter.close();

new File(path).setExecutable(true, false);

1 个答案:

答案 0 :(得分:1)

您不应将FileWriter用于二进制数据。请改用FileOutputStream

ReaderWriter用于文本数据,它们与char一起使用,而InputStreamOutputStream用于二进制数据,他们与byte合作。 char和字节之间的转换通过应用适当的字符编码而发生,并且可能会损坏通过FileWriter传递的二进制数据。