【问题标题】:corrupted ELF header/section after extract from eclipse bundle从 Eclipse 包中提取后损坏的 ELF 标头/部分
【发布时间】:2012-05-28 00:47:48
【问题描述】:

我需要帮助解决以下问题:

我有两个不同的 eclipse 产品,它们使用 linux 可执行文件所在的同一个包,但使用来自目标平台的不同 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);

【问题讨论】:

    标签: java eclipse elf


    【解决方案1】:

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

    Readers 和Writers 用于文本数据,它们与chars 一起使用,而InputStreams 和OutputStreams 用于二进制数据,它们与bytes 一起使用。 chars 和字节之间的转换是通过应用适当的字符编码来实现的,它可能会损坏通过 FileWriter 传递的二进制数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2017-11-01
      • 2016-08-09
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多