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)