簡體   English   中英

Linux環境下的Java JNA

[英]Java JNA On Linux Environment

我目前正在嘗試在Linux系統上使用java編寫內存讀取器/寫入。 經過研究后,我發現ptrace.h具有執行此操作的功能。

這是我的ptrace課程

package com.beaudoin.jmm.natives.linux;

import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import com.sun.jna.Pointer;
import com.sun.jna.win32.W32APIOptions;

/**
 * Created by jonathan on 06/01/16.
 */
public class ptrace {

    static {
        Native.register(NativeLibrary.getInstance("/usr/include/sys/ptrace.h"));
    }

    public static native long ptrace (/*enum __ptrace_request*/ long request,
                               /*pid_t*/ int pid,
                               Pointer addr,
                               Pointer data);
}

ptrace.h文件位於/usr/include/sys/ptrace.h

在啟動時我收到此錯誤:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library '/usr/include/sys/ptrace.h': Native library (usr/include/sys/ptrace.h) not found in resource path ([file:/usr/lib/jvm/java-8-oracle/jre/lib/charsets.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/deploy.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/cldrdata.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/dnsns.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jaccess.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jfxrt.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/localedata.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/nashorn.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunec.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunjce_provider.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunpkcs11.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/ext/zipfs.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/javaws.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/jce.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/jfr.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/jfxswt.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/jsse.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/management-agent.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/plugin.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/resources.jar, file:/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar, file:/home/jonathan/ideaprojects/Java-Memory-Manipulation/build/classes/main/, file:/home/jonathan/ideaprojects/Java-Memory-Manipulation/build/resources/main/, file:/home/jonathan/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/4.2.1/fcc5b10cb812c41b00708e7b57baccc3aee5567c/jna-4.2.1.jar, file:/home/jonathan/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna-platform/4.2.1/440e1b36d1b68fb0360ebf66d9544c3f9d9f15ef/jna-platform-4.2.1.jar, file:/home/jonathan/Desktop/idea-IC-143.1184.17/lib/idea_rt.jar])
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:277)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:403)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:342)
at com.beaudoin.jmm.natives.linux.ptrace.<clinit>(ptrace.java:14)
at com.beaudoin.jmm.Main.main(Main.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

這是ptrace.h的教程和結構

https://mikecvet.wordpress.com/2010/08/14/ptrace-tutorial/

您將無法加載頭文件..您需要加載一個庫文件,其中包含該函數,然后使用JNA從符號導出表中加載它,並調用它。 看看它是否適合你:)

我不確定,但我認為ptrace位於C標准庫中,因此請嘗試從JNA加載“libc”,然后從那里解析該函數​​。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM