요래요래 테스트 했습니다.
코드를 통해 분석할 수도 있지만, 새로운 프로세스에서 LLDB 를 실행하는데 관여하는 클래스가 많아서 이 중 어디서 java.library.path가 누락되는 것인지 파악하기 어려울 것 같았습니다. 그래서 JDB를 사용해서 분석하기로 했습니다.
스크립트를 파악해서 추가
이런게 있었군요.
자바는 interning 을 사용하기에 동일한 문자열로 여러 인스턴스를 만들지 않습니다. debugger에서 특정 address를 watch 하는 것은 흔한 기법이므로, java.library.path의 값에 해당하는 문자열 인스턴스를 watch 해보려 시도했으나, 실패했습니다.
정확한 근거가 있는 것은 아니었지만, "Connect" 문자열 및 실패 메시지 문자열을 통해 관련 메소드를 찾고, 거기서부터 한 단계 씩 진행하며 java.library.path를 전달하지 않고 새로운 JVM 프로세스를 실행하는 메소드가 어디인지 추적했습니다.
그 결과 AgentThread라는 클래스에서 새로운 프로세스를 실행하는데, 이 때, java.library.path 옵션을 다루지 않는 것을 확인했습니다.
추가했고, 완료했습니다.
아쉽게도 해당 버그는 수정되지 않을 것 같습니다. 애초에 ghidra의 관리자는 vm을 사용하여 테스트 하는 것을 권장한다는 답변을 받고 PR은 종료 됐습니다.