java - 从 eclipse 包中提取后损坏的 ELF header /部分

标签 java eclipse elf

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

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

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

在 32 位 Debian 系统上。

两个应用程序都使用 bundle.getEntry() 从 bundle 中提取可执行文件,并通过 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的问题吗? eclipse ?图书馆?

这里是复制方法:

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);

最佳答案

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

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

关于java - 从 eclipse 包中提取后损坏的 ELF header /部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10686600/

相关文章:

java - Eclipse 工作区在每次关闭时都会损坏

java - 运行字符串中包含的 groovy 脚本代码

android - Eclipse 中 Android 导入的问题

Android - 按下主页键时关闭应用程序

C 原型(prototype)函数 - 目标文件

c++ - ELF文件中符号表中的符号信息能否获取对象名?

java - 我想从数据库中检索值而不使用 ListView 并显示在 TextView 字段中

java - AWS Lambda 如何处理多个请求?

java - eclipse /Tomcat : tomcat home page is reachable but app is not

elf - 如何从 ELF 二进制文件中删除程序头