본문 바로가기

카테고리 없음

jvm 살짝 보기

jvm에는

 

 

 

스레드별로 PC register, Stack ,Native Method Stack이 있고

공용 메모리로는 Heap, Method Area가 있다.

 

공용 메모리는 이해가 됐다 heap이랑 소스코드 method area가 있겠지

스레드별로 stack이 있는건 이해되는데 왜 따로 native method stack이라는게 있는지 어떻게 있는지 애매했다.

gdb로 봐봤다.

 

java -Djava.library.path=. MyLibrary 라이브러리 위치 정해주고 실행

 

 

418800000-457000000 rw-p 00000000 00:00 0 
457000000-7ff800000 ---p 00000000 00:00 0 
7ff800000-7ff908000 rw-p 00ced000 103:0a 17185179                        /usr/lib/jvm/java-21-openjdk-amd64/lib/server/classes.jsa
7ff908000-800000000 rw-p 00000000 00:00 0 
5feb14773000-5feb14774000 r--p 00000000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb14774000-5feb14775000 r-xp 00001000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb14775000-5feb14776000 r--p 00002000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb14776000-5feb14777000 r--p 00002000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb14777000-5feb14778000 rw-p 00003000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb1631a000-5feb16361000 rw-p 00000000 00:00 0                          [heap]
7608dc000000-7608dc021000 rw-p 00000000 00:00 0 
7608dc021000-7608e0000000 ---p 00000000 00:00 0 
7608e0000000-7608e0021000 rw-p 00000000 00:00 0 
7608e0021000-7608e4000000 ---p 00000000 00:00 0 
7608e8000000-7608e8034000 rw-p 00000000 00:00 0 
7608e8034000-7608ec000000 ---p 00000000 00:00 0 
7608ec000000-7608ec05f000 rw-p 00000000 00:00 0 
7608ec05f000-7608f0000000 ---p 00000000 00:00 0 
7608f4000000-7608f4021000 rw-p 00000000 00:00 0 
7608f4021000-7608f8000000 ---p 00000000 00:00 0 
7608f8000000-7608f8021000 rw-p 00000000 00:00 0 
7608f8021000-7608fc000000 ---p 00000000 00:00 0 
760900000000-760900021000 rw-p 00000000 00:00 0 
760900021000-760904000000 ---p 00000000 00:00 0 
760904000000-760904021000 rw-p 00000000 00:00 0 
760904021000-760908000000 ---p 00000000 00:00 0 
76090c000000-76090c021000 rw-p 00000000 00:00 0 
76090c021000-760910000000 ---p 00000000 00:00 0 
760910000000-760910021000 rw-p 00000000 00:00 0 
760910021000-760914000000 ---p 00000000 00:00 0 
760918000000-760918020000 rw-p 00000000 00:00 0 
760918020000-760918400000 ---p 00000000 00:00 0 
760918400000-760918410000 rw-p 00000000 00:00 0 
760918410000-76091c000000 ---p 00000000 00:00 0 
76091c000000-76091c021000 rw-p 00000000 00:00 0 
76091c021000-760920000000 ---p 00000000 00:00 0 
760923000000-760923cae000 rw-p 00001000 103:0a 17185179                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/classes.jsa
760923cae000-760924000000 ---p 00000000 00:00 0 
760924000000-760924010000 rw-p 00000000 00:00 0 
760924010000-760924040000 ---p 00000000 00:00 0 
760924040000-760924050000 rw-p 00000000 00:00 0 
760924050000-760964000000 ---p 00000000 00:00 0 
760964000000-760964021000 rw-p 00000000 00:00 0 
760964021000-760968000000 ---p 00000000 00:00 0 
760968000000-760968021000 rw-p 00000000 00:00 0 
760968021000-76096c000000 ---p 00000000 00:00 0 
760970000000-760970021000 rw-p 00000000 00:00 0 
760970021000-760974000000 ---p 00000000 00:00 0 
760974000000-760974021000 rw-p 00000000 00:00 0 
760974021000-760978000000 ---p 00000000 00:00 0 
760979000000-760979f36000 r--p 00000000 103:0a 16517754                  /usr/lib/locale/locale-archive
76097a000000-76097c021000 rw-p 00000000 00:00 0 
76097c021000-760980000000 ---p 00000000 00:00 0 
760980d00000-760980d04000 ---p 00000000 00:00 0 
760980d04000-760980e00000 rw-p 00000000 00:00 0 
760980e00000-760981da0000 rw-p 00000000 00:00 0 
760981da0000-7609907c0000 ---p 00000000 00:00 0 
7609907c0000-7609907e0000 rw-p 00000000 00:00 0 
760990800000-7609909f4000 rw-p 00000000 00:00 0 
7609909f4000-760992738000 ---p 00000000 00:00 0 
760992738000-76099273c000 rw-p 00000000 00:00 0 
760992800000-7609929f4000 rw-p 00000000 00:00 0 
7609929f4000-760994738000 ---p 00000000 00:00 0 
760994738000-76099473c000 rw-p 00000000 00:00 0 
760994800000-760994a70000 rwxp 00000000 00:00 0 
760994a70000-76099bc5f000 ---p 00000000 00:00 0 
76099bc5f000-76099becf000 rwxp 00000000 00:00 0 
76099becf000-76099c3a0000 ---p 00000000 00:00 0 
76099c3a0000-76099c610000 rwxp 00000000 00:00 0 
76099c610000-7609a3800000 ---p 00000000 00:00 0 
7609a3800000-7609abe02000 r--s 00000000 103:0a 17185176                  /usr/lib/jvm/java-21-openjdk-amd64/lib/modules
7609abe2f000-7609abe33000 ---p 00000000 00:00 0 
7609abe33000-7609abf2f000 rw-p 00000000 00:00 0 
7609abf2f000-7609abf34000 r--p 00000000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609abf34000-7609abf75000 r-xp 00005000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609abf75000-7609abffe000 r--p 00046000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609abffe000-7609abfff000 r--p 000ce000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609abfff000-7609ac000000 rw-p 000cf000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609ac000000-7609ac16e000 rw-p 00000000 00:00 0 
7609ac16e000-7609b0000000 ---p 00000000 00:00 0 
7609b002f000-7609b0033000 ---p 00000000 00:00 0 
7609b0033000-7609b012f000 rw-p 00000000 00:00 0 
7609b012f000-7609b0133000 ---p 00000000 00:00 0 
7609b0133000-7609b022f000 rw-p 00000000 00:00 0 
7609b022f000-7609b0233000 ---p 00000000 00:00 0 
7609b0233000-7609b032f000 rw-p 00000000 00:00 0 
7609b032f000-7609b0333000 ---p 00000000 00:00 0 
7609b0333000-7609b042f000 rw-p 00000000 00:00 0 
7609b042f000-7609b0433000 ---p 00000000 00:00 0 
7609b0433000-7609b052f000 rw-p 00000000 00:00 0 
7609b052f000-7609b0533000 ---p 00000000 00:00 0 
7609b0533000-7609b062f000 rw-p 00000000 00:00 0 
7609b062f000-7609b0633000 ---p 00000000 00:00 0 
7609b0633000-7609b072f000 rw-p 00000000 00:00 0 
7609b072f000-7609b0730000 ---p 00000000 00:00 0 
7609b0730000-7609b0830000 rw-p 00000000 00:00 0 
7609b0830000-7609b0831000 ---p 00000000 00:00 0 
7609b0831000-7609b0931000 rw-p 00000000 00:00 0 
7609b0931000-7609b0a0d000 rw-p 00000000 00:00 0 
7609b0a0d000-7609b0a0e000 ---p 00000000 00:00 0 
7609b0a0e000-7609b0b0e000 rw-p 00000000 00:00 0 
7609b0b0e000-7609b0b0f000 ---p 00000000 00:00 0 
7609b0b0f000-7609b0c0f000 rw-p 00000000 00:00 0 
7609b0c0f000-7609b1b1e000 rw-p 00000000 00:00 0 
7609b1b1e000-7609b1b1f000 ---p 00000000 00:00 0 
7609b1b1f000-7609b1c1f000 rw-p 00000000 00:00 0 
7609b1c1f000-7609b1c20000 ---p 00000000 00:00 0 
7609b1c20000-7609b1d20000 rw-p 00000000 00:00 0 
7609b1d20000-7609b1d21000 ---p 00000000 00:00 0 
7609b1d21000-7609b1e21000 rw-p 00000000 00:00 0 
7609b1e21000-7609b2e33000 rw-p 00000000 00:00 0 
7609b2e33000-7609b2f17000 ---p 00000000 00:00 0 
7609b2f17000-7609b2f1c000 rw-p 00000000 00:00 0 
7609b2f1c000-7609b3000000 ---p 00000000 00:00 0 
7609b3000000-7609b309d000 r--p 00000000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b309d000-7609b31dd000 r-xp 0009d000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b31dd000-7609b326b000 r--p 001dd000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b326b000-7609b3276000 r--p 0026b000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b3276000-7609b3279000 rw-p 00276000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b3279000-7609b327d000 rw-p 00000000 00:00 0 
7609b3280000-7609b3300000 rw-p 00000000 00:00 0 
7609b3300000-7609b3304000 ---p 00000000 00:00 0 
7609b3304000-7609b3400000 rw-p 00000000 00:00 0 
7609b3400000-7609b3696000 r--p 00000000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b3696000-7609b44fe000 r-xp 00296000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b44fe000-7609b47d1000 r--p 010fe000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b47d1000-7609b48a1000 r--p 013d0000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b48a1000-7609b48d1000 rw-p 014a0000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b48d1000-7609b4937000 rw-p 00000000 00:00 0 
7609b4950000-7609b49d2000 rw-p 00000000 00:00 0 
7609b49d2000-7609b49dc000 ---p 00000000 00:00 0 
7609b49dc000-7609b49e9000 r--p 00000000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49e9000-7609b49f8000 r-xp 0000d000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49f8000-7609b49fd000 r--p 0001c000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49fd000-7609b49fe000 r--p 00021000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49fe000-7609b49ff000 rw-p 00022000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49ff000-7609b4a00000 rw-p 00000000 00:00 0 
7609b4a00000-7609b4a28000 r--p 00000000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4a28000-7609b4bb0000 r-xp 00028000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4bb0000-7609b4bff000 r--p 001b0000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4bff000-7609b4c03000 r--p 001fe000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4c03000-7609b4c05000 rw-p 00202000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4c05000-7609b4c12000 rw-p 00000000 00:00 0 
7609b4c1b000-7609b4c23000 rw-s 00000000 103:0a 17301594                  /tmp/hsperfdata_yeongjae/93041
7609b4c23000-7609b4c27000 r--p 00000000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c27000-7609b4c4a000 r-xp 00004000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c4a000-7609b4c4e000 r--p 00027000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c4e000-7609b4c4f000 r--p 0002b000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c4f000-7609b4c50000 rw-p 0002c000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c50000-7609b4c60000 r--p 00000000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4c60000-7609b4cdf000 r-xp 00010000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4cdf000-7609b4d37000 r--p 0008f000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4d37000-7609b4d38000 r--p 000e7000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4d38000-7609b4d39000 rw-p 000e8000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4d39000-7609b4d3b000 rw-p 00000000 00:00 0 
7609b4d3b000-7609b4d3d000 r--p 00000000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d3d000-7609b4d47000 r-xp 00002000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d47000-7609b4d4a000 r--p 0000c000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d4a000-7609b4d4b000 r--p 0000f000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d4b000-7609b4d4c000 rw-p 00010000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d4c000-7609b4d4e000 r--p 00000000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d4e000-7609b4d60000 r-xp 00002000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d60000-7609b4d66000 r--p 00014000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d66000-7609b4d67000 r--p 0001a000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d67000-7609b4d68000 rw-p 0001b000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d69000-7609b4d6a000 r--p 00000000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6a000-7609b4d6b000 r-xp 00001000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6b000-7609b4d6c000 r--p 00002000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6c000-7609b4d6d000 r--p 00002000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6d000-7609b4d6e000 rw-p 00003000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6e000-7609b4d6f000 ---p 00000000 00:00 0 
7609b4d6f000-7609b4d70000 r--p 00000000 00:00 0 
7609b4d70000-7609b4d71000 ---p 00000000 00:00 0 
7609b4d71000-7609b4d73000 r--p 00000000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d73000-7609b4d76000 r-xp 00002000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d76000-7609b4d77000 r--p 00005000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d77000-7609b4d78000 r--p 00006000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d78000-7609b4d79000 rw-p 00007000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d79000-7609b4d7b000 rw-p 00000000 00:00 0 
7609b4d7b000-7609b4d7c000 r--p 00000000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7609b4d7c000-7609b4da7000 r-xp 00001000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7609b4da7000-7609b4db1000 r--p 0002c000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7609b4db1000-7609b4db3000 r--p 00036000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7609b4db3000-7609b4db5000 rw-p 00038000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7fff32a87000-7fff32aa8000 rw-p 00000000 00:00 0                          [stack]
7fff32bd4000-7fff32bd8000 r--p 00000000 00:00 0                          [vvar]
7fff32bd8000-7fff32bda000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]

 

#include <stdio.h>

// MyLibrary.c
#include <jni.h>
#include <stdio.h>
#include <unistd.h>
JNIEXPORT void JNICALL Java_MyLibrary_printMessage(JNIEnv *env, jobject obj) {
    void *stackAddress;
    __asm__ volatile ("mov %%rsp, %0" : "=r"(stackAddress)); // x86-64에서 스택 포인터를 가져옴
    printf("Current stack address: %p\n", stackAddress);

        printf("Hello from C Library!\n");
        sleep(2);
}

이걸로 so 라이브러리 만들어서

 

// MyLibrary.java
public class MyLibrary {
    // Load the C library
    static {
        System.loadLibrary("MyLibrary");
    }

    // Declare the native method
    public native void printMessage();

    public static void main(String[] args) {
        MyLibrary myLib = new MyLibrary();
while(true){
               myLib.printMessage(); // Call the native method
  System.out.println("aa");
  try {
                Thread.sleep(3000); // 3초 대기
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

}
}
}

 

jni로 자바에서 c 호출

 

왜냐면 native method stack이 jni같은 java가 아닌 함수 호출할때 쓰인다고 한다.

 

결과는

 

Current stack address: 0x7609b33fe8e0
Hello from C Library!
aa
Current stack address: 0x7609b33fe8e0
Hello from C Library!
aa
Current stack address: 0x7609b33fe8e0
Hello from C Library!
aa

를 반복해서 내는데

gdb로 이 프로세스에 붙어서 backtrace를 보며 스택 위치를 보기로 했다.

 

 Target Id                                           Frame 
* 1    Thread 0x7609b4d39b80 (LWP 93041) "java"            0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, 
    expected=93042, futex_word=0x7609b33ff990) at ./nptl/futex-internal.c:57
  2    Thread 0x760980dff6c0 (LWP 93058) "Common-Cleaner"  0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, 
    abstime=0x760980dfe430, op=137, expected=0, futex_word=0x7609ac1681b0) at ./nptl/futex-internal.c:57
  3    Thread 0x7609abf2e6c0 (LWP 93057) "Notification Th" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, abstime=0x0, 
    op=393, expected=0, futex_word=0x7609b4904c78 <mutex_init()::Notification_lock_storage+88>) at ./nptl/futex-internal.c:57
  4    Thread 0x7609b012e6c0 (LWP 93056) "C1 CompilerThre" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=11, cancel=true, 
    abstime=0x7609b012daf0, op=137, expected=0, futex_word=0x7609b49042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
  5    Thread 0x7609b022e6c0 (LWP 93055) "C2 CompilerThre" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b022daf0, 
    op=137, expected=0, futex_word=0x7609b49042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
  6    Thread 0x7609b032e6c0 (LWP 93054) "Monitor Deflati" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b032dce0, 
    op=137, expected=0, futex_word=0x7609b4904d78 <mutex_init()::MonitorDeflation_lock_storage+88>) at ./nptl/futex-internal.c:57
  7    Thread 0x7609b042e6c0 (LWP 93053) "Service Thread"  0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7609b4904cf8 <mutex_init()::Service_lock_storage+88>) at ./nptl/futex-internal.c:57
  8    Thread 0x7609b052e6c0 (LWP 93052) "Signal Dispatch" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
    abstime=0x0, op=393, expected=0, futex_word=0x5feb1631b550) at ./nptl/futex-internal.c:57
  9    Thread 0x7609b062e6c0 (LWP 93051) "Finalizer"       0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7609ac14f878) at ./nptl/futex-internal.c:57
  10   Thread 0x7609b072e6c0 (LWP 93050) "Reference Handl" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, abstime=0x0, 
    op=393, expected=0, futex_word=0x7609b4902d78 <mutex_init()::Heap_lock_storage+88>) at ./nptl/futex-internal.c:57
  11   Thread 0x7609b082f6c0 (LWP 93049) "VM Thread"       0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b082ed00, 
    op=137, expected=0, futex_word=0x7609b4902b78 <mutex_init()::VMOperation_lock_storage+88>) at ./nptl/futex-internal.c:57
  12   Thread 0x7609b09306c0 (LWP 93048) "VM Periodic Tas" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b092fd20, 
    op=137, expected=0, futex_word=0x7609b4903d78 <mutex_init()::PeriodicTask_lock_storage+88>) at ./nptl/futex-internal.c:57
  13   Thread 0x7609b0b0d6c0 (LWP 93047) "G1 Service"      0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, 
    abstime=0x7609b0b0cd50, op=137, expected=0, futex_word=0x7609ac10bef8) at ./nptl/futex-internal.c:57
  14   Thread 0x7609b0c0e6c0 (LWP 93046) "G1 Refine#0"     0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7609ac10af48) at ./nptl/futex-internal.c:57
  15   Thread 0x7609b1c1e6c0 (LWP 93045) "G1 Conc#0"       0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
    abstime=0x0, op=393, expected=0, futex_word=0x7609ac058898) at ./nptl/futex-internal.c:57
  16   Thread 0x7609b1d1f6c0 (LWP 93044) "G1 Main Marker"  0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7609b49054f8 <mutex_init()::CGC_lock_storage+88>) at ./nptl/futex-internal.c:57
  17   Thread 0x7609b1e206c0 (LWP 93043) "GC Thread#0"     0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
--Type <RET> for more, q to quit, c to continue without paging--
    abstime=0x0, op=393, expected=0, futex_word=0x7609ac046848) at ./nptl/futex-internal.c:57
  18   Thread 0x7609b33ff6c0 (LWP 93042) "java"            0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b33fe770, 
    op=137, expected=0, futex_word=0x7609ac01b978) at ./nptl/futex-internal.c:57

 

이때는 자바의 Thread.sleep에서 멈췄을 때다 이떄의

rsp rbp를 보면

 

rbp            0x7609b33fe680      0x7609b33fe680
rsp            0x7609b33fe640      0x7609b33fe640

 

(gdb) bt
#0  0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b33fe770, op=137, expected=0, futex_word=0x7609ac01b978)
    at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x7609b33fe770, clockid=0, expected=0, futex_word=0x7609ac01b978) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7609ac01b978, expected=expected@entry=0, clockid=clockid@entry=1, 
    abstime=abstime@entry=0x7609b33fe770, private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x00007609b4a9bc7e in __pthread_cond_wait_common (abstime=0x7609b33fe770, clockid=1, mutex=0x7609ac01b928, cond=0x7609ac01b950)
    at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_timedwait64 (cond=0x7609ac01b950, mutex=0x7609ac01b928, abstime=0x7609b33fe770) at ./nptl/pthread_cond_wait.c:652
#5  0x00007609b40f5277 in PlatformEvent::park_nanos (nanos=0, this=0x7609ac01b900) at src/hotspot/os/posix/os_posix.cpp:1591
#6  PlatformEvent::park_nanos (this=this@entry=0x7609ac01b900, nanos=nanos@entry=3000000000) at src/hotspot/os/posix/os_posix.cpp:1560
#7  0x00007609b3d22b14 in JavaThread::sleep_nanos (this=this@entry=0x7609ac0192c0, nanos=nanos@entry=3000000000) at src/hotspot/share/runtime/javaThread.cpp:2051
#8  0x00007609b3ddaa51 in JVM_Sleep (env=0x7609ac019678, threadClass=<optimized out>, nanos=3000000000) at src/hotspot/share/prims/jvm.cpp:3066
#9  0x000076099bc6b9c0 in ?? ()
#10 0x00007609b33fe8c8 in ?? ()
#11 0x000076099bc672a8 in ?? ()
#12 0x00007609b33fe880 in ?? ()
#13 0x0000000000000000 in ?? ()

 

bt를 보면 내가 공부한 대로 보면 .cpp인 frame 0~8은 네이티브스택을 사용하고 9~13은 자바 스택을 사용한다.

 

 

아래는 라이브러리의 sleep에서 멈춘 상황

1    Thread 0x7609b4d39b80 (LWP 93041) "java"            0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, 
    expected=93042, futex_word=0x7609b33ff990) at ./nptl/futex-internal.c:57
  2    Thread 0x760980dff6c0 (LWP 93058) "Common-Cleaner"  0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, 
    abstime=0x760980dfe430, op=137, expected=0, futex_word=0x7609ac1681b0) at ./nptl/futex-internal.c:57
  3    Thread 0x7609abf2e6c0 (LWP 93057) "Notification Th" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, abstime=0x0, 
    op=393, expected=0, futex_word=0x7609b4904c78 <mutex_init()::Notification_lock_storage+88>) at ./nptl/futex-internal.c:57
  4    Thread 0x7609b012e6c0 (LWP 93056) "C1 CompilerThre" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=11, cancel=true, 
    abstime=0x7609b012daf0, op=137, expected=0, futex_word=0x7609b49042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
  5    Thread 0x7609b022e6c0 (LWP 93055) "C2 CompilerThre" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b022daf0, 
    op=137, expected=0, futex_word=0x7609b49042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
  6    Thread 0x7609b032e6c0 (LWP 93054) "Monitor Deflati" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b032dce0, 
    op=137, expected=0, futex_word=0x7609b4904d78 <mutex_init()::MonitorDeflation_lock_storage+88>) at ./nptl/futex-internal.c:57
  7    Thread 0x7609b042e6c0 (LWP 93053) "Service Thread"  0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7609b4904cf8 <mutex_init()::Service_lock_storage+88>) at ./nptl/futex-internal.c:57
  8    Thread 0x7609b052e6c0 (LWP 93052) "Signal Dispatch" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
    abstime=0x0, op=393, expected=0, futex_word=0x5feb1631b550) at ./nptl/futex-internal.c:57
  9    Thread 0x7609b062e6c0 (LWP 93051) "Finalizer"       0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7609ac14f878) at ./nptl/futex-internal.c:57
  10   Thread 0x7609b072e6c0 (LWP 93050) "Reference Handl" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, abstime=0x0, 
    op=393, expected=0, futex_word=0x7609b4902d78 <mutex_init()::Heap_lock_storage+88>) at ./nptl/futex-internal.c:57
  11   Thread 0x7609b082f6c0 (LWP 93049) "VM Thread"       0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b082ed00, 
    op=137, expected=0, futex_word=0x7609b4902b78 <mutex_init()::VMOperation_lock_storage+88>) at ./nptl/futex-internal.c:57
  12   Thread 0x7609b09306c0 (LWP 93048) "VM Periodic Tas" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b092fd20, 
    op=137, expected=0, futex_word=0x7609b4903d78 <mutex_init()::PeriodicTask_lock_storage+88>) at ./nptl/futex-internal.c:57
  13   Thread 0x7609b0b0d6c0 (LWP 93047) "G1 Service"      0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, 
    abstime=0x7609b0b0cd50, op=137, expected=0, futex_word=0x7609ac10bef8) at ./nptl/futex-internal.c:57
  14   Thread 0x7609b0c0e6c0 (LWP 93046) "G1 Refine#0"     0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7609ac10af48) at ./nptl/futex-internal.c:57
  15   Thread 0x7609b1c1e6c0 (LWP 93045) "G1 Conc#0"       0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
    abstime=0x0, op=393, expected=0, futex_word=0x7609ac058898) at ./nptl/futex-internal.c:57
  16   Thread 0x7609b1d1f6c0 (LWP 93044) "G1 Main Marker"  0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7609b49054f8 <mutex_init()::CGC_lock_storage+88>) at ./nptl/futex-internal.c:57
  17   Thread 0x7609b1e206c0 (LWP 93043) "GC Thread#0"     0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
--Type <RET> for more, q to quit, c to continue without paging--
    abstime=0x0, op=393, expected=0, futex_word=0x7609ac046848) at ./nptl/futex-internal.c:57
  18   Thread 0x7609b33ff6c0 (LWP 93042) "java"            0x00007609b4aecadf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, 
    req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
(gdb) thr 18
[Switching to thread 18 (Thread 0x7609b33ff6c0 (LWP 93042))]
#0  0x00007609b4aecadf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0)
    at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
warning: 78 ../sysdeps/unix/sysv/linux/clock_nanosleep.c: No such file or directory
(gdb) bt
#0  0x00007609b4aecadf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0)
    at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
#1  0x00007609b4af9a27 in __GI___nanosleep (req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0) at ../sysdeps/unix/sysv/linux/nanosleep.c:25
#2  0x00007609b4b0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#3  0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#4  0x000076099bc6b9c0 in ?? ()
#5  0x0000760923437ef0 in ?? ()
#6  0x0000000000000000 in ?? ()

 

0~3은 네이티브스택, 4~6은 자바스택을 쓴다

 

rbp            0x7609b33fe880      0x7609b33fe880
rsp            0x7609b33fe810      0x7609b33fe810

 

이 상황에서 하나씩 내려가보면

 

#0  __GI___nanosleep (req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0) at ../sysdeps/unix/sysv/linux/nanosleep.c:26
#1  0x00007609b4b0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#2  0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#3  0x000076099bc6b9c0 in ?? ()
#4  0x0000760923437ef0 in ?? ()
#5  0x0000000000000000 in ?? ()

 

rbp            0x7609b33fe890      0x7609b33fe890
rsp            0x7609b33fe890      0x7609b33fe890

 

#0  0x00007609b4b0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#1  0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#2  0x000076099bc6b9c0 in ?? ()
#3  0x0000760923437ef0 in ?? ()
#4  0x0000000000000000 in ?? ()

 

 

 

rbp            0x7609b33fe8d0      0x7609b33fe8d0
rsp            0x7609b33fe8a0      0x7609b33fe8a0

 

#0  0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#1  0x000076099bc6b9c0 in ?? ()
#2  0x0000760923437ef0 in ?? ()
#3  0x0000000000000000 in ?? ()

 

rbp            0x7609b33fe900      0x7609b33fe900
rsp            0x7609b33fe8e0      0x7609b33fe8e0

 

#0  0x000076099bc6b9c0 in ?? ()
#1  0x0000760923437ef0 in ?? ()
#2  0x0000000000000000 in ?? ()

 

rbp            0x7609b33fe968      0x7609b33fe968
rsp            0x7609b33fe910      0x7609b33fe910

 

#0  0x000076099bc6b9c7 in ?? ()
#1  0x00007609b33fe968 in ?? ()
#2  0x000076099bc6b9c0 in ?? ()
#3  0x0000760923437ef0 in ?? ()
#4  0x0000000000000000 in ?? ()

 

rbp            0x7609b33fe968      0x7609b33fe968
rsp            0x7609b33fe900      0x7609b33fe900

 

스택 자체는 1개지만 native 메서드를 call할때 전용 스택이 있는 것이 아니라 그냥 스택프레임 모양이 다른것같다.

 

어느 스택이나

7609b3304000-7609b3400000 rw-p 00000000 00:00 0  여기에 해당하는 메모리를 스택으로 사용한다.

 

76099bc5f000-76099becf000 rwxp 00000000 00:00 0 여기에는 내가 작성한 자바 코드가 jit으로 컴파일되어 기계어로 들어가있는듯하다

 

아닌가

 

#0  0x00007609b4b0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#1  0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#2  0x000076099bc6b9c0 in ?? ()
#3  0x0000760923437ef0 in ?? ()
#4  0x0000000000000000 in ?? ()

 

#8  0x00007609b3ddaa51 in JVM_Sleep (env=0x7609ac019678, threadClass=<optimized out>, nanos=3000000000) at src/hotspot/share/prims/jvm.cpp:3066
#9  0x000076099bc6b9c0 in ?? ()
#10 0x00007609b33fe8c8 in ?? ()
#11 0x000076099bc672a8 in ?? ()
#12 0x00007609b33fe880 in ?? ()
#13 0x0000000000000000 in ?? ()

보면

c코드 전에

0x76099bc6b9be: call   *%rax를 호출하는데

jni코드가 아닐까 추측한다.

그 전 코드들 중에 내 코드가 있는게 아닐까

 

 

 

// MyLibrary.java
public class MyLibrary {
    // Load the C library
    static {
        System.loadLibrary("MyLibrary");
    }

    // Declare the native method
    public native void printMessage();

    public static void main(String[] args) {
        MyLibrary myLib = new MyLibrary();
// System.out.println("aa");      
while(true){
               myLib.printMessage(); // Call the native method
  System.out.println("aa");
  try {
                Thread.sleep(1); // 0.5초 대기
int c=0;
          for(int i=0;i<2100000000;i++){
c+=i;
}
 System.out.println(c);


  } catch (InterruptedException e) {
                e.printStackTrace();
            }

 // Thread.sleep(3000); // 0.5초 대기
}

    }
}

이런식으로 연산을 엄청해서 늦춰서 break를 걸어보면

 

418800000-457000000 rw-p 00000000 00:00 0 
457000000-7ff800000 ---p 00000000 00:00 0 
7ff800000-7ff908000 rw-p 00ced000 103:0a 17185179                        /usr/lib/jvm/java-21-openjdk-amd64/lib/server/classes.jsa
7ff908000-800000000 rw-p 00000000 00:00 0 
5ab5f1272000-5ab5f1273000 r--p 00000000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f1273000-5ab5f1274000 r-xp 00001000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f1274000-5ab5f1275000 r--p 00002000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f1275000-5ab5f1276000 r--p 00002000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f1276000-5ab5f1277000 rw-p 00003000 103:0a 17185026                  /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f2bbc000-5ab5f2c03000 rw-p 00000000 00:00 0                          [heap]
7a4af8000000-7a4af8021000 rw-p 00000000 00:00 0 
7a4af8021000-7a4afc000000 ---p 00000000 00:00 0 
7a4afc000000-7a4afc021000 rw-p 00000000 00:00 0 
7a4afc021000-7a4b00000000 ---p 00000000 00:00 0 
7a4b04000000-7a4b0402d000 rw-p 00000000 00:00 0 
7a4b0402d000-7a4b08000000 ---p 00000000 00:00 0 
7a4b08000000-7a4b0810b000 rw-p 00000000 00:00 0 
7a4b0810b000-7a4b0c000000 ---p 00000000 00:00 0 
7a4b10000000-7a4b10021000 rw-p 00000000 00:00 0 
7a4b10021000-7a4b14000000 ---p 00000000 00:00 0 
7a4b14000000-7a4b14021000 rw-p 00000000 00:00 0 
7a4b14021000-7a4b18000000 ---p 00000000 00:00 0 
7a4b1c000000-7a4b1c021000 rw-p 00000000 00:00 0 
7a4b1c021000-7a4b20000000 ---p 00000000 00:00 0 
7a4b20000000-7a4b20021000 rw-p 00000000 00:00 0 
7a4b20021000-7a4b24000000 ---p 00000000 00:00 0 
7a4b28000000-7a4b28021000 rw-p 00000000 00:00 0 
7a4b28021000-7a4b2c000000 ---p 00000000 00:00 0 
7a4b2c000000-7a4b2c021000 rw-p 00000000 00:00 0 
7a4b2c021000-7a4b30000000 ---p 00000000 00:00 0 
7a4b34000000-7a4b34020000 rw-p 00000000 00:00 0 
7a4b34020000-7a4b34400000 ---p 00000000 00:00 0 
7a4b34400000-7a4b34410000 rw-p 00000000 00:00 0 
7a4b34410000-7a4b38000000 ---p 00000000 00:00 0 
7a4b38000000-7a4b38021000 rw-p 00000000 00:00 0 
7a4b38021000-7a4b3c000000 ---p 00000000 00:00 0 
7a4b3f000000-7a4b3fcae000 rw-p 00001000 103:0a 17185179                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/classes.jsa
7a4b3fcae000-7a4b40000000 ---p 00000000 00:00 0 
7a4b40000000-7a4b40010000 rw-p 00000000 00:00 0 
7a4b40010000-7a4b40040000 ---p 00000000 00:00 0 
7a4b40040000-7a4b40050000 rw-p 00000000 00:00 0 
7a4b40050000-7a4b80000000 ---p 00000000 00:00 0 
7a4b80000000-7a4b80021000 rw-p 00000000 00:00 0 
7a4b80021000-7a4b84000000 ---p 00000000 00:00 0 
7a4b84000000-7a4b84021000 rw-p 00000000 00:00 0 
7a4b84021000-7a4b88000000 ---p 00000000 00:00 0 
7a4b8bf00000-7a4b8bf04000 ---p 00000000 00:00 0 
7a4b8bf04000-7a4b8c000000 rw-p 00000000 00:00 0 
7a4b8c000000-7a4b8c021000 rw-p 00000000 00:00 0 
7a4b8c021000-7a4b90000000 ---p 00000000 00:00 0 
7a4b90000000-7a4b90021000 rw-p 00000000 00:00 0 
7a4b90021000-7a4b94004000 ---p 00000000 00:00 0 
7a4b94004000-7a4b94100000 rw-p 00000000 00:00 0 
7a4b94100000-7a4b94104000 ---p 00000000 00:00 0 
7a4b94104000-7a4b94200000 rw-p 00000000 00:00 0 
7a4b94200000-7a4b94204000 ---p 00000000 00:00 0 
7a4b94204000-7a4b94300000 rw-p 00000000 00:00 0 
7a4b94300000-7a4b94304000 ---p 00000000 00:00 0 
7a4b94304000-7a4b94400000 rw-p 00000000 00:00 0 
7a4b94400000-7a4b94404000 ---p 00000000 00:00 0 
7a4b94404000-7a4b94500000 rw-p 00000000 00:00 0 
7a4b94500000-7a4b94504000 ---p 00000000 00:00 0 
7a4b94504000-7a4b94600000 rw-p 00000000 00:00 0 
7a4b94600000-7a4b94604000 ---p 00000000 00:00 0 
7a4b94604000-7a4b94700000 rw-p 00000000 00:00 0 
7a4b94700000-7a4b94704000 ---p 00000000 00:00 0 
7a4b94704000-7a4b94800000 rw-p 00000000 00:00 0 
7a4b94800000-7a4b95736000 r--p 00000000 103:0a 16517754                  /usr/lib/locale/locale-archive
7a4b957f8000-7a4b957f9000 ---p 00000000 00:00 0 
7a4b957f9000-7a4b958f9000 rw-p 00000000 00:00 0 
7a4b958f9000-7a4b958fa000 ---p 00000000 00:00 0 
7a4b958fa000-7a4b959fa000 rw-p 00000000 00:00 0 
7a4b959fa000-7a4b959fb000 ---p 00000000 00:00 0 
7a4b959fb000-7a4b95afb000 rw-p 00000000 00:00 0 
7a4b95afb000-7a4b95afc000 ---p 00000000 00:00 0 
7a4b95afc000-7a4b95bfc000 rw-p 00000000 00:00 0 
7a4b95bfc000-7a4b98021000 rw-p 00000000 00:00 0 
7a4b98021000-7a4b9c000000 ---p 00000000 00:00 0 
7a4b9c022000-7a4b9c027000 r--p 00000000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c027000-7a4b9c068000 r-xp 00005000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c068000-7a4b9c0f1000 r--p 00046000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c0f1000-7a4b9c0f2000 r--p 000ce000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c0f2000-7a4b9c0f3000 rw-p 000cf000 103:0a 17185160                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c0f3000-7a4b9cbfe000 rw-p 00000000 00:00 0 
7a4b9cbfe000-7a4b9cbff000 ---p 00000000 00:00 0 
7a4b9cbff000-7a4b9ccff000 rw-p 00000000 00:00 0 
7a4b9ccff000-7a4b9cd00000 ---p 00000000 00:00 0 
7a4b9cd00000-7a4b9ce00000 rw-p 00000000 00:00 0 
7a4b9ce00000-7a4b9dda0000 rw-p 00000000 00:00 0 
7a4b9dda0000-7a4bac7c0000 ---p 00000000 00:00 0 
7a4bac7c0000-7a4bac7e0000 rw-p 00000000 00:00 0 
7a4bac800000-7a4bac9f4000 rw-p 00000000 00:00 0 
7a4bac9f4000-7a4bae738000 ---p 00000000 00:00 0 
7a4bae738000-7a4bae73c000 rw-p 00000000 00:00 0 
7a4bae800000-7a4bae9f4000 rw-p 00000000 00:00 0 
7a4bae9f4000-7a4bb0738000 ---p 00000000 00:00 0 
7a4bb0738000-7a4bb073c000 rw-p 00000000 00:00 0 
7a4bb0800000-7a4bb0a70000 rwxp 00000000 00:00 0 
7a4bb0a70000-7a4bb7c5f000 ---p 00000000 00:00 0 
7a4bb7c5f000-7a4bb7ecf000 rwxp 00000000 00:00 0 
7a4bb7ecf000-7a4bb83a0000 ---p 00000000 00:00 0 
7a4bb83a0000-7a4bb8610000 rwxp 00000000 00:00 0 
7a4bb8610000-7a4bbf800000 ---p 00000000 00:00 0 
7a4bbf800000-7a4bc7e02000 r--s 00000000 103:0a 17185176                  /usr/lib/jvm/java-21-openjdk-amd64/lib/modules
7a4bc7e7e000-7a4bc7eff000 rw-p 00000000 00:00 0 
7a4bc7eff000-7a4bc7f00000 ---p 00000000 00:00 0 
7a4bc7f00000-7a4bc8000000 rw-p 00000000 00:00 0 
7a4bc8000000-7a4bc8176000 rw-p 00000000 00:00 0 
7a4bc8176000-7a4bcc000000 ---p 00000000 00:00 0 
7a4bcc021000-7a4bcd033000 rw-p 00000000 00:00 0 
7a4bcd033000-7a4bcd117000 ---p 00000000 00:00 0 
7a4bcd117000-7a4bcd11c000 rw-p 00000000 00:00 0 
7a4bcd11c000-7a4bcd200000 ---p 00000000 00:00 0 
7a4bcd200000-7a4bcd29d000 r--p 00000000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd29d000-7a4bcd3dd000 r-xp 0009d000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd3dd000-7a4bcd46b000 r--p 001dd000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd46b000-7a4bcd476000 r--p 0026b000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd476000-7a4bcd479000 rw-p 00276000 103:0a 16526993                  /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd479000-7a4bcd47d000 rw-p 00000000 00:00 0 
7a4bcd4a5000-7a4bcd500000 rw-p 00000000 00:00 0 
7a4bcd500000-7a4bcd504000 ---p 00000000 00:00 0 
7a4bcd504000-7a4bcd600000 rw-p 00000000 00:00 0 
7a4bcd600000-7a4bcd896000 r--p 00000000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bcd896000-7a4bce6fe000 r-xp 00296000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bce6fe000-7a4bce9d1000 r--p 010fe000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bce9d1000-7a4bceaa1000 r--p 013d0000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bceaa1000-7a4bcead1000 rw-p 014a0000 103:0a 17185182                  /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bcead1000-7a4bceb37000 rw-p 00000000 00:00 0 
7a4bceb42000-7a4bcec00000 rw-p 00000000 00:00 0 
7a4bcec00000-7a4bcec28000 r--p 00000000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcec28000-7a4bcedb0000 r-xp 00028000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcedb0000-7a4bcedff000 r--p 001b0000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcedff000-7a4bcee03000 r--p 001fe000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcee03000-7a4bcee05000 rw-p 00202000 103:0a 16526467                  /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcee05000-7a4bcee12000 rw-p 00000000 00:00 0 
7a4bcee3c000-7a4bcee80000 rw-p 00000000 00:00 0 
7a4bcee80000-7a4bcee8a000 ---p 00000000 00:00 0 
7a4bcee8a000-7a4bcee97000 r--p 00000000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bcee97000-7a4bceea6000 r-xp 0000d000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bceea6000-7a4bceeab000 r--p 0001c000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bceeab000-7a4bceeac000 r--p 00021000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bceeac000-7a4bceead000 rw-p 00022000 103:0a 17185153                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bceead000-7a4bceeae000 rw-p 00000000 00:00 0 
7a4bceeae000-7a4bceeb6000 rw-s 00000000 103:0a 17301594                  /tmp/hsperfdata_yeongjae/96036
7a4bceeb6000-7a4bceeba000 r--p 00000000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceeba000-7a4bceedd000 r-xp 00004000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceedd000-7a4bceee1000 r--p 00027000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceee1000-7a4bceee2000 r--p 0002b000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceee2000-7a4bceee3000 rw-p 0002c000 103:0a 16526600                  /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceee3000-7a4bceef3000 r--p 00000000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bceef3000-7a4bcef72000 r-xp 00010000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bcef72000-7a4bcefca000 r--p 0008f000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bcefca000-7a4bcefcb000 r--p 000e7000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bcefcb000-7a4bcefcc000 rw-p 000e8000 103:0a 16526772                  /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bcefcc000-7a4bcefce000 rw-p 00000000 00:00 0 
7a4bcefce000-7a4bcefd0000 r--p 00000000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefd0000-7a4bcefda000 r-xp 00002000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefda000-7a4bcefdd000 r--p 0000c000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefdd000-7a4bcefde000 r--p 0000f000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefde000-7a4bcefdf000 rw-p 00010000 103:0a 17185157                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefdf000-7a4bcefe1000 r--p 00000000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bcefe1000-7a4bceff3000 r-xp 00002000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bceff3000-7a4bceff9000 r--p 00014000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bceff9000-7a4bceffa000 r--p 0001a000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bceffa000-7a4bceffb000 rw-p 0001b000 103:0a 16527124                  /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bceffc000-7a4bceffd000 r--p 00000000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bceffd000-7a4bceffe000 r-xp 00001000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bceffe000-7a4bcefff000 r--p 00002000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bcefff000-7a4bcf000000 r--p 00002000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bcf000000-7a4bcf001000 rw-p 00003000 103:0a 11431798                  /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bcf001000-7a4bcf002000 ---p 00000000 00:00 0 
7a4bcf002000-7a4bcf003000 r--p 00000000 00:00 0 
7a4bcf003000-7a4bcf004000 ---p 00000000 00:00 0 
7a4bcf004000-7a4bcf006000 r--p 00000000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf006000-7a4bcf009000 r-xp 00002000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf009000-7a4bcf00a000 r--p 00005000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf00a000-7a4bcf00b000 r--p 00006000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf00b000-7a4bcf00c000 rw-p 00007000 103:0a 17185156                  /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf00c000-7a4bcf00e000 rw-p 00000000 00:00 0 
7a4bcf00e000-7a4bcf00f000 r--p 00000000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7a4bcf00f000-7a4bcf03a000 r-xp 00001000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7a4bcf03a000-7a4bcf044000 r--p 0002c000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7a4bcf044000-7a4bcf046000 r--p 00036000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7a4bcf046000-7a4bcf048000 rw-p 00038000 103:0a 16526285                  /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7ffc5a00a000-7ffc5a02b000 rw-p 00000000 00:00 0                          [stack]
7ffc5a1b7000-7ffc5a1bb000 r--p 00000000 00:00 0                          [vvar]
7ffc5a1bb000-7ffc5a1bd000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]

 

1    Thread 0x7a4bcefccb80 (LWP 96036) "java"            0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, 
    expected=96037, futex_word=0x7a4bcd5ff990) at ./nptl/futex-internal.c:57
  2    Thread 0x7a4b8bfff6c0 (LWP 96053) "Common-Cleaner"  0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7a4b8bffe430, 
    op=137, expected=0, futex_word=0x7a4bc81681b0) at ./nptl/futex-internal.c:57
  3    Thread 0x7a4b940ff6c0 (LWP 96052) "Notification Th" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=31307, cancel=true, abstime=0x0, 
    op=393, expected=0, futex_word=0x7a4bceb04c78 <mutex_init()::Notification_lock_storage+88>) at ./nptl/futex-internal.c:57
  4    Thread 0x7a4b941ff6c0 (LWP 96051) "C1 CompilerThre" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=12, cancel=true, 
    abstime=0x7a4b941feaf0, op=137, expected=0, futex_word=0x7a4bceb042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
  5    Thread 0x7a4b942ff6c0 (LWP 96050) "C2 CompilerThre" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=12, cancel=true, 
    abstime=0x7a4b942feaf0, op=137, expected=0, futex_word=0x7a4bceb042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
  6    Thread 0x7a4b943ff6c0 (LWP 96049) "Monitor Deflati" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=31307, cancel=true, 
    abstime=0x7a4b943fece0, op=137, expected=0, futex_word=0x7a4bceb04d78 <mutex_init()::MonitorDeflation_lock_storage+88>) at ./nptl/futex-internal.c:57
  7    Thread 0x7a4b944ff6c0 (LWP 96048) "Service Thread"  0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7a4bceb04cf8 <mutex_init()::Service_lock_storage+88>) at ./nptl/futex-internal.c:57
  8    Thread 0x7a4b945ff6c0 (LWP 96047) "Signal Dispatch" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
    abstime=0x0, op=393, expected=0, futex_word=0x5ab5f2bbd550) at ./nptl/futex-internal.c:57
  9    Thread 0x7a4b946ff6c0 (LWP 96046) "Finalizer"       0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7a4bc814f878) at ./nptl/futex-internal.c:57
  10   Thread 0x7a4b947ff6c0 (LWP 96045) "Reference Handl" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=31307, cancel=true, abstime=0x0, 
    op=393, expected=0, futex_word=0x7a4bceb02d78 <mutex_init()::Heap_lock_storage+88>) at ./nptl/futex-internal.c:57
  11   Thread 0x7a4b958f86c0 (LWP 96044) "VM Thread"       0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7a4b958f7d00, 
    op=137, expected=0, futex_word=0x7a4bceb02b78 <mutex_init()::VMOperation_lock_storage+88>) at ./nptl/futex-internal.c:57
  12   Thread 0x7a4b959f96c0 (LWP 96043) "VM Periodic Tas" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7a4b959f8d20, 
    op=137, expected=0, futex_word=0x7a4bceb03d78 <mutex_init()::PeriodicTask_lock_storage+88>) at ./nptl/futex-internal.c:57
  13   Thread 0x7a4b95afa6c0 (LWP 96042) "G1 Service"      0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=31307, cancel=true, 
    abstime=0x7a4b95af9d50, op=137, expected=0, futex_word=0x7a4bc810bef8) at ./nptl/futex-internal.c:57
  14   Thread 0x7a4b95bfb6c0 (LWP 96041) "G1 Refine#0"     0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7a4bc810af48) at ./nptl/futex-internal.c:57
  15   Thread 0x7a4b9ccfe6c0 (LWP 96040) "G1 Conc#0"       0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
    abstime=0x0, op=393, expected=0, futex_word=0x7a4bc8058898) at ./nptl/futex-internal.c:57
  16   Thread 0x7a4b9cdff6c0 (LWP 96039) "G1 Main Marker"  0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, 
    expected=0, futex_word=0x7a4bceb054f8 <mutex_init()::CGC_lock_storage+88>) at ./nptl/futex-internal.c:57
  17   Thread 0x7a4bc7fff6c0 (LWP 96038) "GC Thread#0"     0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true, 
--Type <RET> for more, q to quit, c to continue without paging--
    abstime=0x0, op=393, expected=0, futex_word=0x7a4bc8046848) at ./nptl/futex-internal.c:57
  18   Thread 0x7a4bcd5ff6c0 (LWP 96037) "java"            0x00007a4bb83a0f02 in ?? ()

 

 

#0  0x00007a4bb83a0f02 in ?? ()
#1  0x0000000456812a08 in ?? ()
#2  0x0000000456801310 in ?? ()
#3  0x0000000000017138 in ?? ()
#4  0x00000000000f4240 in ?? ()
#5  0x0000000000000000 in ?? ()

 

0x7a4bb83a0ed0: add    %ebx,%r13d
   0x7a4bb83a0ed3: add    %ebx,%r13d
   0x7a4bb83a0ed6: add    %ebx,%r13d
   0x7a4bb83a0ed9: add    %ebx,%r13d
   0x7a4bb83a0edc: add    %ebx,%r13d
   0x7a4bb83a0edf: add    %ebx,%r13d
   0x7a4bb83a0ee2: add    %ebx,%r13d
   0x7a4bb83a0ee5: add    %ebx,%r13d
   0x7a4bb83a0ee8: add    %ebx,%r13d
   0x7a4bb83a0eeb: add    %ebx,%r13d
   0x7a4bb83a0eee: add    %ebx,%r13d
   0x7a4bb83a0ef1: add    %ebx,%r13d
   0x7a4bb83a0ef4: add    %ebx,%r13d
   0x7a4bb83a0ef7: add    %ebx,%r13d
   0x7a4bb83a0efa: add    %ebx,%r13d
   0x7a4bb83a0efd: lea    0x78(%r13,%rbx,1),%r13d
   0x7a4bb83a0f02: add    $0x10,%ebx
   0x7a4bb83a0f05: cmp    %r11d,%ebx
   0x7a4bb83a0f08: jl     0x7a4bb83a0ed0

이런식으로 루프가 있다


rsp            0x7a4bcd5fe9a0      0x7a4bcd5fe9a0

 

 

 

#0  0x00007a4bcececadf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7a4bcd5fe8b0, rem=rem@entry=0x7a4bcd5fe8b0)
    at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
#1  0x00007a4bcecf9a27 in __GI___nanosleep (req=req@entry=0x7a4bcd5fe8b0, rem=rem@entry=0x7a4bcd5fe8b0) at ../sysdeps/unix/sysv/linux/nanosleep.c:25
#2  0x00007a4bced0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#3  0x00007a4bceffd1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#4  0x00007a4bb7c6b9c0 in ?? ()
#5  0x00000004568088e0 in ?? ()
#6  0x00007a4bcd5fe928 in ?? ()
#7  0x0000000000000000 in ?? ()

 

라이브러리 sleep함수 때

rbp            0x7a4bcd5fe890      0x7a4bcd5fe890
rsp            0x7a4bcd5fe820      0x7a4bcd5fe820

 

 

7a4bb83a0000-7a4bb8610000 rwxp 00000000 00:00 0  여기에 코드가 있고

 

7a4bb7c5f000-7a4bb7ecf000 rwxp 00000000 00:00 0 여기엔 아마 jni관련 코드가 있는거같다.

 

gcc -shared -fPIC -o libMyLibrary.so -I /usr/lib/jvm/java-21-openjdk-amd64/include/ -I /usr/lib/jvm/java-21-openjdk-amd64/include/linux/ Mylib.c 

 

 

 

// Example.java
public class Example {
    static {
        System.loadLibrary("example"); // C 라이브러리 로드
    }
    // 네이티브 메소드 선언
    public native void callCFunction(int value);
    // C에서 호출할 메소드
    public void callbackFromC(int result) {
        System.out.println("Callback from C: " + result);
    int c=0;
          for(int i=0;i<2100000000;i++){
c+=i;
}
 System.out.println(c);

    }

    public static void main(String[] args) {
        Example example = new Example();


        System.out.println(c11);

        while(true){
try {
                int c=0;
          for(int i=0;i<2100000000;i++){
c+=i;
}
                example.callCFunction(0x22222222);
                        Thread.sleep(1); 
  } catch (InterruptedException e) {
                e.printStackTrace();
            }

}

    }
}

 

 

// example.c
#include <jni.h>
#include <stdio.h>
// C 함수 구현

JNIEXPORT void JNICALL Java_Example_callCFunction(JNIEnv *env, jobject obj, jint value) {
    // 널 참조 체크
    if (obj == NULL) {
        return; // 오류 처리
    }
printf("Received value from Java: %d\n", value);
int c=0;
for(int i=0;i<2100000000;i++){
c+=i;
}
printf("%d",c);

    // 안전한 메소드 호출
    jclass cls = (*env)->GetObjectClass(env, obj);
    jmethodID mid = (*env)->GetMethodID(env, cls, "callbackFromC", "(I)V");

    if (mid != NULL) {
        (*env)->CallVoidMethod(env, obj, mid, 0x11111111);
    } else {
        // 메소드 찾지 못한 경우 처리
    }
}

 

java -> c라이브러리 -> java 호출해봤다

 

최종 자바에서 break를 걸고 보면


rsp            0x7f0eef9fe480      0x7f0eef9fe480

스택이 이러는데

 

0x7f0eef9fe480: 0x11111111 0x00000000 0x0000001a 0x00000000
0x7f0eef9fe490: 0x8ad00858 0x00000004 0x568042c0 0x00000004
0x7f0eef9fe4a0: 0x0010dfff 0xdeaddeaf 0x61e6b001 0xdeaddeaf
0x7f0eef9fe4b0: 0xef9fe530 0x00007f0e 0xd7c5fcc6 0x00007f0e
0x7f0eef9fe4c0: 0x11111111 0x00007f0e 0x56813108 0x00000004
0x7f0eef9fe4d0: 0x00001fa0 0x00000000 0xef9fe650 0x00007f0e
0x7f0eef9fe4e0: 0x0000000e 0x00000000 0xef9fe768 0x00007f0e
0x7f0eef9fe4f0: 0xef9fe690 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fe500: 0xef9fe5c0 0x00007f0e 0xef9fe768 0x00007f0e
0x7f0eef9fe510: 0x0000000a 0x00007f0e 0x54400538 0x00007f0e
0x7f0eef9fe520: 0xd7cb2600 0x00007f0e 0xef9fe698 0x00007f0e
0x7f0eef9fe530: 0xef9fe630 0x00007f0e 0xf070841a 0x00007f0e
0x7f0eef9fe540: 0x00000002 0x00000000 0xe80192c0 0x00007f0e
0x7f0eef9fe550: 0x00000000 0x00000000 0x3f3f3f3f 0x3f3f3f3f
0x7f0eef9fe560: 0xef9fe5c0 0x00007f0e 0x20202020 0x0000000a
0x7f0eef9fe570: 0xd7cb2600 0x00007f0e 0xef9fe580 0x00007f0e
0x7f0eef9fe580: 0xe80192c0 0x00007f0e 0xe8019e00 0x00007f0e
0x7f0eef9fe590: 0xe8019e40 0x00007f0e 0xe8019e58 0x00007f0e
0x7f0eef9fe5a0: 0xe8019f28 0x00007f0e 0x000000d8 0x00000000
0x7f0eef9fe5b0: 0xef9feab0 0x00007f0e 0xf1493965 0x00007f0e
0x7f0eef9fe5c0: 0xe80192c0 0x00007f0e 0xe8141900 0x00007f0e
0x7f0eef9fe5d0: 0x54400538 0x00007f0e 0x56813108 0x00000004
0x7f0eef9fe5e0: 0xef9fe920 0x00007f0e 0xd7c6b991 0x00007f0e
0x7f0eef9fe5f0: 0xef9fe980 0x00007f0e 0xef9fe760 0x00007f0e
0x7f0eef9fe600: 0xf1601ee0 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fe610: 0xef9fe650 0x00007f0e 0xef9fe760 0x00007f0e
0x7f0eef9fe620: 0xe80199d0 0x00007f0e 0xef9fe690 0x00007f0e
0x7f0eef9fe630: 0xef9fe740 0x00007f0e 0xf07aade2 0x00007f0e
0x7f0eef9fe640: 0x5fc5dac0 0x00007f0e 0xe8019e50 0x00007f0e
0x7f0eef9fe650: 0x54400538 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fe660: 0xe80199d0 0x00007f0e 0xe8019a10 0x00007f0e
0x7f0eef9fe670: 0xe8019a20 0x00007f0e 0xe8019df8 0x00007f0e
0x7f0eef9fe680: 0x000003d8 0x00000000 0xf130fac0 0x00007f0e
0x7f0eef9fe690: 0xef9fe6c0 0x00007f0e 0x56813108 0x00000004
--Type <RET> for more, q to quit, c to continue without paging--
0x7f0eef9fe6a0: 0x11111111 0x00007f0e 0xe8003e50 0x00007f0e
0x7f0eef9fe6b0: 0xef9fe7b0 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fe6c0: 0xef9fe740 0x00007f0e 0xf07ba736 0x00007f0e
0x7f0eef9fe6d0: 0x54400538 0x00007f0e 0xe80001c0 0x00007f0e
0x7f0eef9fe6e0: 0x5f48f728 0x00007f0e 0xef9fe698 0x00007f0e
0x7f0eef9fe6f0: 0xef9fe6d9 0x00007f0e 0x00000002 0x00000008
0x7f0eef9fe700: 0xef9fe700 0x00007f0e 0x00000000 0x00000000
0x7f0eef9fe710: 0x54400538 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fe720: 0xe8174478 0x00007f0e 0xef9fe9a8 0x00007f0e
0x7f0eef9fe730: 0xef9fe7b0 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fe740: 0xef9fe8c0 0x00007f0e 0xf07ade37 0x00007f0e
0x7f0eef9fe750: 0xe80192c0 0x00007f0e 0xef9fe790 0x00007f0e
0x7f0eef9fe760: 0x0000000e 0x00000000 0x00000004 0x00000000
0x7f0eef9fe770: 0x0000006e 0x00000001 0x00000018 0x00000030
0x7f0eef9fe780: 0xef9fe8d0 0x00007f0e 0xef9fe7f0 0x00007f0e
0x7f0eef9fe790: 0xe80192c0 0x00007f0e 0x00000000 0x00000000
0x7f0eef9fe7a0: 0x54400648 0x00007f0e 0xa7cdae00 0xfc57225f
0x7f0eef9fe7b0: 0xf11e1988 0x00007f0e 0x5f48f728 0x00007f0e
0x7f0eef9fe7c0: 0x0000000e 0x00000000 0x0000015c 0x00000000
0x7f0eef9fe7d0: 0xef9fe690 0x00007f0e 0x00000020 0x00000030
0x7f0eef9fe7e0: 0xef9fe8d0 0x00007f0e 0xef9fe7f0 0x00007f0e
0x7f0eef9fe7f0: 0x00000010 0x00000030 0xef9fe8d0 0x00007f0e
0x7f0eef9fe800: 0xef9fe810 0x00007f0e 0x11111111 0x00000000
0x7f0eef9fe810: 0xf07add00 0x00007f0e 0x5f48f728 0x00007f0e
0x7f0eef9fe820: 0x00000000 0x00000000 0x00000000 0x00000000
0x7f0eef9fe830: 0x00000000 0x00000000 0x00000000 0x00000000
0x7f0eef9fe840: 0xef9fe860 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fe850: 0xe8141900 0x00007f0e 0xf164d026 0x00007f0e
0x7f0eef9fe860: 0xf164d021 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fe870: 0xef9fe8c0 0x00007f0e 0xf07aabbb 0x00007f0e
0x7f0eef9fe880: 0xe80192c0 0x00007f0e 0x00000000 0x00000000
0x7f0eef9fe890: 0xe80192c0 0x00007f0e 0x00000000 0x00000000
0x7f0eef9fe8a0: 0x54400460 0x00007f0e 0x00000000 0x00000000
0x7f0eef9fe8b0: 0x54400460 0x00007f0e 0xef9fe9a8 0x00007f0e
--Type <RET> for more, q to quit, c to continue without paging--
0x7f0eef9fe8c0: 0xef9fe910 0x00007f0e 0xf164c214 0x00007f0e
0x7f0eef9fe8d0: 0xe80192c0 0x00007f0e 0x5683e7b8 0x22222222
0x7f0eef9fe8e0: 0xef9fe9a8 0x00007f0e 0xe8019678 0x00007f0e
0x7f0eef9fe8f0: 0x00000000 0x00000000 0x0326c580 0x7d2b7500
0x7f0eef9fe900: 0xe8141900 0x00007f0e 0xe8174478 0x00007f0e
0x7f0eef9fe910: 0xef9fe980 0x00007f0e 0xd7c6b9c0 0x00007f0e
0x7f0eef9fe920: 0xef9fe938 0x00007f0e 0xef9fe980 0x00007f0e
0x7f0eef9fe930: 0xd7c672a8 0x00007f0e 0xef9fe938 0x00007f0e
0x7f0eef9fe940: 0x00000000 0x00000000 0x00000005 0x00000000
0x7f0eef9fe950: 0x544007d0 0x00007f0e 0x00000000 0x00000000
0x7f0eef9fe960: 0x56811fb0 0x00000004 0x54400460 0x00007f0e
0x7f0eef9fe970: 0x00000000 0x00000000 0xef9fe9b0 0x00007f0e
0x7f0eef9fe980: 0x00017138 0x00000000 0xd83a8a60 0x00007f0e
0x7f0eef9fe990: 0x00000000 0x00000000 0xd7c68fd7 0x00007f0e
0x7f0eef9fe9a0: 0x22222222 0x00000000 0x56813108 0x00000004
0x7f0eef9fe9b0: 0x56813108 0x00000004 0x000f4240 0x00000000
0x7f0eef9fe9c0: 0x00000000 0x00000000 0x56801310 0x00000004
0x7f0eef9fe9d0: 0xf1c09003 0xdeaddeaf 0x00000000 0x00000000
0x7f0eef9fe9e0: 0xef9fea60 0x00007f0e 0xd7c5fcc6 0x00007f0e
0x7f0eef9fe9f0: 0x56813108 0x00000004 0x568126c0 0x00000004
0x7f0eef9fea00: 0x00001fa0 0x00007f0e 0xef9feb80 0x00007f0e
0x7f0eef9fea10: 0x0000000e 0x00000000 0xef9fecc8 0x00007f0e
0x7f0eef9fea20: 0xef9febf0 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fea30: 0xef9feaf0 0x00007f0e 0xef9fecc8 0x00007f0e
0x7f0eef9fea40: 0x0000000a 0x00007f0e 0x54400648 0x00007f0e
0x7f0eef9fea50: 0xd7c6a600 0x00007f0e 0xef9febf8 0x00007f0e
0x7f0eef9fea60: 0xef9feb60 0x00007f0e 0xf070841a 0x00007f0e
0x7f0eef9fea70: 0x00000001 0x00000000 0xe80192c0 0x00007f0e
0x7f0eef9fea80: 0x00000000 0x00000000 0x00000040 0x00000000
0x7f0eef9fea90: 0xef9feaf0 0x00007f0e 0xef9feb00 0x0000000a
0x7f0eef9feaa0: 0xd7c6a600 0x00007f0e 0xef9feab0 0x00007f0e
0x7f0eef9feab0: 0xe80192c0 0x00007f0e 0xe8019e00 0x00007f0e
0x7f0eef9feac0: 0xe8019e40 0x00007f0e 0xe8019e50 0x00007f0e
0x7f0eef9fead0: 0xe8019f28 0x00007f0e 0x000000d8 0x00000000
--Type <RET> for more, q to quit, c to continue without paging--
0x7f0eef9feae0: 0xe8019f30 0x00007f0e 0xf0224e85 0x00007f0e
0x7f0eef9feaf0: 0xe80192c0 0x00007f0e 0xe801bb20 0x00007f0e
0x7f0eef9feb00: 0x54400648 0x00007f0e 0x00000000 0x00000000
0x7f0eef9feb10: 0x00000000 0x00000000 0x00000000 0x00000000
0x7f0eef9feb20: 0x00000000 0x00000000 0xef9fecc0 0x00007f0e
0x7f0eef9feb30: 0xe8174448 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9feb40: 0xef9feb80 0x00007f0e 0xe80199d0 0x00007f0e
0x7f0eef9feb50: 0xef9fecc0 0x00007f0e 0xe8146ae8 0x00007f0e
0x7f0eef9feb60: 0xef9feca0 0x00007f0e 0xf07ae72d 0x00007f0e
0x7f0eef9feb70: 0xef9febf0 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9feb80: 0x54400648 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9feb90: 0xe80199d0 0x00007f0e 0xe8019a10 0x00007f0e
0x7f0eef9feba0: 0xe8019a20 0x00007f0e 0xe8019df8 0x00007f0e
0x7f0eef9febb0: 0x000003d8 0x00000000 0xe8174470 0x00007f0e
0x7f0eef9febc0: 0x00000016 0x00000000 0x54400648 0x00007f0e
0x7f0eef9febd0: 0xef9fec00 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9febe0: 0x60000800 0x00007f0e 0xf130fac0 0x00007f0e
0x7f0eef9febf0: 0xef9fec20 0x00007f0e 0x568126c0 0x00000004
0x7f0eef9fec00: 0x54400648 0x00007f0e 0xe8003e50 0x00007f0e
0x7f0eef9fec10: 0xe8146b00 0x00007f0e 0xe8146ae8 0x00007f0e
0x7f0eef9fec20: 0xef9feca0 0x00007f0e 0xf07ba736 0x00007f0e
0x7f0eef9fec30: 0x54400648 0x00007f0e 0xe80101c0 0x00007f0e
0x7f0eef9fec40: 0x5f48fba8 0x00007f0e 0xef9febf8 0x00007f0e
0x7f0eef9fec50: 0xef9fec39 0x00007f0e 0x00000001 0x00000008
0x7f0eef9fec60: 0xef9fec00 0x00007f0e 0x00000000 0x00000000
0x7f0eef9fec70: 0x54400648 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fec80: 0xe8174470 0x00007f0e 0xef9fed10 0x00007f0e
0x7f0eef9fec90: 0xe8146b00 0x00007f0e 0xe8146ae8 0x00007f0e
0x7f0eef9feca0: 0xef9fee20 0x00007f0e 0xf07b0c7f 0x00007f0e
0x7f0eef9fecb0: 0xe80192c0 0x00007f0e 0x00000000 0x00000000
0x7f0eef9fecc0: 0x0000000e 0x00007f0e 0x00000000 0x00007f0e
0x7f0eef9fecd0: 0xf12a7810 0x00007f0e 0x00000018 0x00000030
0x7f0eef9fece0: 0xef9fee30 0x00007f0e 0xef9fed50 0x00007f0e
0x7f0eef9fecf0: 0xe80192c0 0x00007f0e 0x00000000 0x00000000
--Type <RET> for more, q to quit, c to continue without paging--
0x7f0eef9fed00: 0xf11e5740 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fed10: 0xf11e1988 0x00007f0e 0x5f48fba8 0x00007f0e
0x7f0eef9fed20: 0x0000000e 0x00000001 0x000001bd 0x00000000
0x7f0eef9fed30: 0xef9febf0 0x00007f0e 0x00000020 0x00000030
0x7f0eef9fed40: 0xef9fee30 0x00007f0e 0xef9fed50 0x00007f0e
0x7f0eef9fed50: 0x00000000 0x00000000 0x5bdbb588 0x00005bf3
0x7f0eef9fed60: 0xef9fedd0 0x00007f0e 0xe801bb50 0x00007f0e
0x7f0eef9fed70: 0xf12a8160 0x00007f0e 0x00000050 0x00000000
0x7f0eef9fed80: 0xe80192c0 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fed90: 0xe801bb38 0x00007f0e 0x00000000 0x00000000
0x7f0eef9feda0: 0xef9fedd0 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fedb0: 0xe801bb38 0x00007f0e 0xf16293ca 0x00007f0e
0x7f0eef9fedc0: 0xf16293b3 0x00007f0e 0xe8146ae8 0x00007f0e
0x7f0eef9fedd0: 0xef9fee20 0x00007f0e 0xe80192c0 0x00007f0e
0x7f0eef9fede0: 0xe801bb38 0x00007f0e 0xe801bb50 0x00007f0e
0x7f0eef9fedf0: 0xef9fee20 0x00007f0e 0xf079f193 0x00007f0e
0x7f0eef9fee00: 0x00000000 0x00000000 0xe8174470 0x00007f0e
0x7f0eef9fee10: 0xe801bb38 0x00007f0e 0xe801bb50 0x00007f0e
0x7f0eef9fee20: 0xef9feeb0 0x00007f0e 0xf16225be 0x00007f0e
0x7f0eef9fee30: 0x3ac732fc 0x0006232b 0x00000000 0xfc57225f
0x7f0eef9fee40: 0x00000001 0x00000000 0x5bdbb330 0x00005bf3
0x7f0eef9fee50: 0xf12a8140 0x00007f0e 0xe8019678 0x00007f0e
0x7f0eef9fee60: 0x00010002 0x00000004 0x5bde32b0 0x00005bf3
0x7f0eef9fee70: 0x00000000 0x00000000 0x72687470 0x20646165
0x7f0eef9fee80: 0x63617473 0x31203a6b 0xef9ffcdc 0x00007f0e
0x7f0eef9fee90: 0xef9ff6c0 0x00007f0e 0xffffff88 0xffffffff
0x7f0eef9feea0: 0x00000000 0x00000000 0x69359a50 0x00007ffe
0x7f0eef9feeb0: 0xef9feec0 0x00007f0e 0xf162544d 0x00007f0e
0x7f0eef9feec0: 0xef9fef70 0x00007f0e 0xf149ca94 0x00007f0e
0x7f0eef9feed0: 0x00000000 0x00000000 0xef9ff6c0 0x00007f0e
0x7f0eef9feee0: 0xef9ff6c0 0x00007f0e 0xd6931e94 0x0a52c152
0x7f0eef9feef0: 0xef9ff6c0 0x00007f0e 0xffffff88 0xffffffff
0x7f0eef9fef00: 0x00000000 0x00000000 0x69359a50 0x00007ffe
0x7f0eef9fef10: 0xd5d31e94 0x0a52c152 0x87a91e94 0x0a52fcfe
--Type <RET> for more, q to quit, c to continue without paging--
0x7f0eef9fef20: 0x00000000 0x00000000 0x00000000 0x00000000
0x7f0eef9fef30: 0x00000000 0x00000000 0x00000000 0x00000000
0x7f0eef9fef40: 0x00000000 0x00000000 0xa7cdae00 0xfc57225f
0x7f0eef9fef50: 0x00000000 0x00000000 0xf149c710 0x00007f0e
0x7f0eef9fef60: 0xef9ff6c0 0x00007f0e 0xffffff88 0xffffffff
0x7f0eef9fef70: 0x00000000 0x00000000 0xf1529c3c 0x00007f0e
0x7f0eef9fef80: 0x00000000 0x00000000 0x00000000 0x00000000
0x7f0eef9fef90: 0x00000000 0x00000000 0x00000000 0x00000000

 

스택을 보면 0x22222222, 0x11111111를 찾을 수 있다.

 

(gdb) bt
#0  0x00007f0ed83a96e5 in ?? ()
#1  0x0000000011111111 in ?? ()
#2  0x000000000000001a in ?? ()
#3  0x000000048ad00858 in ?? ()
#4  0x00000004568042c0 in ?? ()
#5  0xdeaddeaf0010dfff in ?? ()
#6  0xdeaddeaf61e6b001 in ?? ()
#7  0x00007f0eef9fe530 in ?? ()
#8  0x00007f0ed7c5fcc6 in ?? ()
#9  0x00007f0e11111111 in ?? ()
#10 0x0000000456813108 in ?? ()
#11 0x0000000000001fa0 in ?? ()
#12 0x00007f0eef9fe650 in ?? ()
#13 0x000000000000000e in ?? ()
#14 0x00007f0eef9fe768 in ?? ()
#15 0x00007f0eef9fe690 in ?? ()
#16 0x00007f0ee80192c0 in ?? ()
#17 0x00007f0eef9fe5c0 in ?? ()
#18 0x00007f0eef9fe768 in ?? ()
#19 0x00007f0e0000000a in ?? ()
#20 0x00007f0e54400538 in ?? ()
#21 0x00007f0ed7cb2600 in ?? ()
#22 0x00007f0eef9fe698 in ?? ()
#23 0x00007f0eef9fe630 in ?? ()
#24 0x00007f0ef070841a in JavaCalls::call_helper (result=0x7f0ed83a9634, method=..., args=0x0, __the_thread__=0x7f0eef9fe480)

 

backtrace해보면 이렇게 꺠지는데 java stack구조와 native스택 구조가 달라서 java stack은 잘 못읽어서 깨지는 것같다. native stack이랑 자바 스택이 os에선 하나의 메모리에 존재한다는걸 알 수 있었다.

 

스택프레임 구조가 달라서 gdb에선 못읽는듯

 

b *0x00007f0ed7c6b994 thread 18

특정 스레드만 BREAK

 

 

내가 구현한 c코드 라이브러리

 Java_Example_callCFunction () from /home/yeongjae/Desktop/java_test/libexample.so

 

Dump of assembler code for function Java_Example_callCFunction:
   0x00007f0ef164c119 <+0>: endbr64
   0x00007f0ef164c11d <+4>: push   %rbp
   0x00007f0ef164c11e <+5>: mov    %rsp,%rbp
   0x00007f0ef164c121 <+8>: sub    $0x40,%rsp
   0x00007f0ef164c125 <+12>: mov    %rdi,-0x28(%rbp)
   0x00007f0ef164c129 <+16>: mov    %rsi,-0x30(%rbp)
   0x00007f0ef164c12d <+20>: mov    %edx,-0x34(%rbp)
   0x00007f0ef164c130 <+23>: cmpq   $0x0,-0x30(%rbp)
   0x00007f0ef164c135 <+28>: je     0x7f0ef164c216 <Java_Example_callCFunction+253>
   0x00007f0ef164c13b <+34>: mov    -0x34(%rbp),%eax
   0x00007f0ef164c13e <+37>: mov    %eax,%esi
   0x00007f0ef164c140 <+39>: lea    0xeb9(%rip),%rax        # 0x7f0ef164d000
   0x00007f0ef164c147 <+46>: mov    %rax,%rdi
   0x00007f0ef164c14a <+49>: mov    $0x0,%eax
   0x00007f0ef164c14f <+54>: call   0x7f0ef164c050 <printf@plt>
   0x00007f0ef164c154 <+59>: movl   $0x0,-0x18(%rbp)
   0x00007f0ef164c15b <+66>: movl   $0x0,-0x14(%rbp)
   0x00007f0ef164c162 <+73>: jmp    0x7f0ef164c16e <Java_Example_callCFunction+85>
   0x00007f0ef164c164 <+75>: mov    -0x14(%rbp),%eax
   0x00007f0ef164c167 <+78>: add    %eax,-0x18(%rbp)
   0x00007f0ef164c16a <+81>: addl   $0x1,-0x14(%rbp)
   0x00007f0ef164c16e <+85>: cmpl   $0x7d2b74ff,-0x14(%rbp)
   0x00007f0ef164c175 <+92>: jle    0x7f0ef164c164 <Java_Example_callCFunction+75>
   0x00007f0ef164c177 <+94>: mov    -0x18(%rbp),%eax
   0x00007f0ef164c17a <+97>: mov    %eax,%esi
   0x00007f0ef164c17c <+99>: lea    0xe9b(%rip),%rax        # 0x7f0ef164d01e
   0x00007f0ef164c183 <+106>: mov    %rax,%rdi
   0x00007f0ef164c186 <+109>: mov    $0x0,%eax
   0x00007f0ef164c18b <+114>: call   0x7f0ef164c050 <printf@plt>
   0x00007f0ef164c190 <+119>: mov    -0x28(%rbp),%rax
   0x00007f0ef164c194 <+123>: mov    (%rax),%rax
   0x00007f0ef164c197 <+126>: mov    0xf8(%rax),%rcx
   0x00007f0ef164c19e <+133>: mov    -0x30(%rbp),%rdx
   0x00007f0ef164c1a2 <+137>: mov    -0x28(%rbp),%rax
   0x00007f0ef164c1a6 <+141>: mov    %rdx,%rsi
   0x00007f0ef164c1a9 <+144>: mov    %rax,%rdi
   0x00007f0ef164c1ac <+147>: call   *%rcx
   0x00007f0ef164c1ae <+149>: mov    %rax,-0x10(%rbp)
   0x00007f0ef164c1b2 <+153>: mov    -0x28(%rbp),%rax
--Type <RET> for more, q to quit, c to continue without paging--
   0x00007f0ef164c1b6 <+157>: mov    (%rax),%rax
   0x00007f0ef164c1b9 <+160>: mov    0x108(%rax),%r8
   0x00007f0ef164c1c0 <+167>: mov    -0x10(%rbp),%rsi
   0x00007f0ef164c1c4 <+171>: mov    -0x28(%rbp),%rax
   0x00007f0ef164c1c8 <+175>: lea    0xe52(%rip),%rdx        # 0x7f0ef164d021
   0x00007f0ef164c1cf <+182>: mov    %rdx,%rcx
   0x00007f0ef164c1d2 <+185>: lea    0xe4d(%rip),%rdx        # 0x7f0ef164d026
   0x00007f0ef164c1d9 <+192>: mov    %rax,%rdi
   0x00007f0ef164c1dc <+195>: call   *%r8
   0x00007f0ef164c1df <+198>: mov    %rax,-0x8(%rbp)
   0x00007f0ef164c1e3 <+202>: cmpq   $0x0,-0x8(%rbp)
   0x00007f0ef164c1e8 <+207>: je     0x7f0ef164c217 <Java_Example_callCFunction+254>
   0x00007f0ef164c1ea <+209>: mov    -0x28(%rbp),%rax
   0x00007f0ef164c1ee <+213>: mov    (%rax),%rax
   0x00007f0ef164c1f1 <+216>: mov    0x1e8(%rax),%r8
   0x00007f0ef164c1f8 <+223>: mov    -0x8(%rbp),%rdx
   0x00007f0ef164c1fc <+227>: mov    -0x30(%rbp),%rsi
   0x00007f0ef164c200 <+231>: mov    -0x28(%rbp),%rax
   0x00007f0ef164c204 <+235>: mov    $0x11111111,%ecx
   0x00007f0ef164c209 <+240>: mov    %rax,%rdi
   0x00007f0ef164c20c <+243>: mov    $0x0,%eax
   0x00007f0ef164c211 <+248>: call   *%r8
   0x00007f0ef164c214 <+251>: jmp    0x7f0ef164c217 <Java_Example_callCFunction+254>
   0x00007f0ef164c216 <+253>: nop
   0x00007f0ef164c217 <+254>: leave
   0x00007f0ef164c218 <+255>: ret

 

 

 

 

어떤 자바 코드

0x7f0ed7c6bf3d: sub    $0x8,%rsp
   0x7f0ed7c6bf41: call   0x7f0ef0ba82c0 <_ZN13SharedRuntime18dtrace_method_exitEP10JavaThreadP6Method>
   0x7f0ed7c6bf46: add    $0x8,%rsp
   0x7f0ed7c6bf4a: jmp    0x7f0ed7c6bf54
   0x7f0ed7c6bf4f: call   0x7f0ef0ba82c0 <_ZN13SharedRuntime18dtrace_method_exitEP10JavaThreadP6Method>
   0x7f0ed7c6bf54: mov    (%rsp),%rax
   0x7f0ed7c6bf58: add    $0x10,%rsp
 0x7f0ed7c6bf5c: vmovsd (%rsp),%xmm0

 

네이티브 코드에서는 스택프레임을 함수 안에서


   0x00007f0ef164c119 <+0>: endbr64
   0x00007f0ef164c11d <+4>: push   %rbp
   0x00007f0ef164c11e <+5>: mov    %rsp,%rbp
   0x00007f0ef164c121 <+8>: sub    $0x40,%rsp

 

자바에서는 스택프레임을 함수를 호출하는 쪽에서

 

0x7f0ed7c6bf3d: sub    $0x8,%rsp
   0x7f0ed7c6bf41: call   0x7f0ef0ba82c0 <_ZN13SharedRuntime18dtrace_method_exitEP10JavaThreadP6Method>
   0x7f0ed7c6bf46: add    $0x8,%rsp

 

그리고 rbp를 안쓰는거같다

이런식으로 만든다 다르기때문에 구분하는듯(native stack, java stack)