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)

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS93UVpWVi5wbmc=

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丢失,请随时告诉我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值