在64位应用程序中使用32位模式的BridJ

时间:2018-04-07 10:15:25

标签: java jnaerator bridj

我试图以一种我不确定它是否受支持的方式使用BridJ:

我有64位应用程序。我通过调试器接口得到一个包含32位应用程序内存的字节数组。

我想使用BridJ将此字节数组的内容解析为C数据类型。我是通过使用Pointer.pointerToBytes().as(my_struct.class).get()来完成的。此技术适用于32位应用程序。但是在64位应用程序中它没有,因为BridJ使用主机应用程序的字大小(64位),我想使用字节数组的字大小(32位)。

能做到吗?有可能以某种方式手动切换BridJ的字大小,以便BridJ使用32位字,即使它是在64位应用程序中运行吗?

我正在尝试做的更长的例子

byte[] objData = debugger.readMemory(remoteStructAddr, BridJ.sizeOf(c_struct.class));
// pointerToBytes only works as expected when objData has the same
// word size as the host system
c_struct s = Pointer.pointerToBytes(objData).as(c_struct.class).get();
int structMem = s.member();

// offsetOfField only works as expected when objData has the same
// word size as the host system
byte[] namePtr = debugger.readMemory(removePtr + StructObject.offsetOfField(new c_struct(), "name"), 4); 
String name = debugger.readString(namePtr);

更多细节

  • 我使用JNAerator生成BridJ类
  • 我尝试使用JNAerator -arch标志,但它似乎没有按照我的意愿行事。
  • 我没有将本机库与BridJ一起使用,我只是使用BridJ来读取调试器API所带来的字节数组。

0 个答案:

没有答案