700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java依赖dll java - 使用Java查找/解析DLL的依赖DLL - 堆栈内存溢出

java依赖dll java - 使用Java查找/解析DLL的依赖DLL - 堆栈内存溢出

时间:2024-04-04 21:38:44

相关推荐

java依赖dll java - 使用Java查找/解析DLL的依赖DLL - 堆栈内存溢出

我想弄清楚加载DLL失败时缺少哪些从属DLL 。 通过使用Java的System#loadLibrary加载DLL ,我只会得到长的负退出代码,例如-1073741515而不是Windows错误消息,指出缺少哪个DLL 。 这对于解决该问题没有帮助。

我的想法是使用Java从DLL解析依赖的DLL ,然后逐一加载它们,以找出哪个抛出UnsatisfiedLinkError 。 我找到了一个名为pecoff4j的库,声称可以解析PE可执行文件,但无法解析导入的DLL名称:

PE pe = PEParser.parse("C:\\Users\\User\\Desktop\\my.dll");

final ImportDirectory importTable = pe.getImageData().getImportTable();

for (int i = 0; i < importTable.size(); i++)

{

String name = importTable.getName(i);

System.out.println(name);

}

由于名称似乎不可用,因此产生以下异常:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

at java.util.ArrayList.rangeCheck(ArrayList.java:657)

at java.util.ArrayList.get(ArrayList.java:433)

at org.boris.pecoff4j.ImportDirectory.getName(ImportDirectory.java:39)

ImportDirectory.java :

package org.boris.pecoff4j;

import org.boris.pecoff4j.util.DataObject;

import java.util.ArrayList;

import java.util.List;

public class ImportDirectory extends DataObject {

private List entries = new ArrayList();

private List names = new ArrayList();

private List nameTables = new ArrayList();

private List addressTables = new ArrayList();

public void add(ImportDirectoryEntry entry) {

entries.add(entry);

}

public void add(String name, ImportDirectoryTable names,

ImportDirectoryTable addresses) {

this.names.add(name);

nameTables.add(names);

addressTables.add(addresses);

}

public int size() {

return entries.size();

}

public String getName(int index) {

return names.get(index);

}

public ImportDirectoryTable getNameTable(int index) {

return nameTables.get(index);

}

public ImportDirectoryTable getAddressTable(int index) {

return addressTables.get(index);

}

public ImportDirectoryEntry getEntry(int index) {

return entries.get(index);

}

}

Visual Studio的dumpbin可以工作,但是我需要一个基于Java的解决方案来集成到应用程序中,该应用程序分发给不一定安装Visual Studio用户。

如果您认为使用Java加载DLL时有一种更好/更简单的方法来找出或防止DLL丢失,请随时告诉我。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。