.class 파일을 조작하고 있습니다. 나는 한 번에 하나씩 지침을 얻기 위해 InstrutionHandle 패키지를 사용하고 있습니다. 나는 getPosition() 메서드 을 통해 명령어의 바이트 오프셋을 가지고 있는데, 바이트 오프셋에서 소스 라인 번호를 얻을 수 있습니까?Java에서 바이트 오프셋에서 소스 코드의 행 번호를 얻으려면 어떻게해야합니까?
1
A
답변
2
클래스 파일이 디버깅 정보로 컴파일되는지 여부에 따라 다릅니다. 일반적으로 컴파일러는 LineNumberTable
속성을 삽입하여 바이트 코드의 각 범위에 해당하는 원래 소스 행 번호를 제공합니다. 그러나 LineNumberTable
속성은 메타 데이터 일 뿐이므로 제작자는 사소한 제약 조건으로 원하는 내용을 넣거나 완전히 생략 할 수 있습니다. (일반적으로 -g: none
으로 컴파일하거나 obfuscator를 실행하여 완료)
어쨌든 속성의 형식은 entires (2 바이트) 수와 그 다음에 (start pc, line number) 쌍 (둘 모두 2 바이트)이옵니다. LineNumberTable
속성을 여러 개 가질 수도 있습니다. 물론 라이브러리를 사용하고 있다면, 아마도 이것을 이미 해독 할 것입니다.
관련 문제
- 1. 링커지도에서 소스 행 번호를 찾는 방법
- 2. Perl에서 소스 행 번호를 인쇄하려면 어떻게해야합니까?
- 3. Java - 주어진 오프셋에서 바이트 읽기
- 4. ant 빌드에서 생성 된 jar의 오류 스택 추적에서 소스 행 번호를 얻으려면 어떻게해야합니까?
- 5. PHP에서 바이트 오프셋에서 문자를 찾는 방법은 무엇입니까?
- 6. Java에서 유형의 기본값을 얻으려면 어떻게해야합니까?
- 7. Java에서 MySql으로부터 시간을 얻으려면 어떻게해야합니까?
- 8. Java에서 파일 아이콘을 얻으려면 어떻게해야합니까?
- 9. 우분투 소스 코드를 얻으려면 어떻게해야합니까?
- 10. jQuery를 사용하여 소스 코드의 새 행 인쇄
- 11. MongoDB를 사용하여 연속적인 행 집합을 얻으려면 어떻게해야합니까?
- 12. 이 JSON 응답에서 전화 번호를 얻으려면 어떻게해야합니까?
- 13. tridion에서 선택한 항목의 버전 번호를 얻으려면 어떻게해야합니까?
- 14. HttpWebRequest의 로컬 포트 번호를 얻으려면 어떻게해야합니까?
- 15. OpenNI를 사용하여 Kinect 일련 번호를 얻으려면 어떻게해야합니까?
- 16. 연락처 목록에서 특정 휴대폰 번호를 얻으려면 어떻게해야합니까?
- 17. Nokia 전화의 IMEI 번호를 얻으려면 어떻게해야합니까?
- 18. 정적 라이브러리에서 버전 번호를 얻으려면 어떻게해야합니까?
- 19. Heroku에서 MongoDB 버전 번호를 얻으려면 어떻게해야합니까?
- 20. .NET에서 Windows 버전 번호를 얻으려면 어떻게해야합니까?
- 21. Git의 최신 안정 버전 번호를 얻으려면 어떻게해야합니까?
- 22. StackTrace에서 올바른 줄 번호를 얻으려면 어떻게해야합니까?
- 23. kext에서 OS X 버전 번호를 얻으려면 어떻게해야합니까?
- 24. 아이폰에서 imei와 일련 번호를 얻으려면 어떻게해야합니까?
- 25. 쉘에서 SVN 헤드 버전 번호를 얻으려면 어떻게해야합니까?
- 26. 프로그래밍 방식으로 장비 일련 번호를 얻으려면 어떻게해야합니까?
- 27. cx_Oracle : ORA-xxxxx 오류 번호를 얻으려면 어떻게해야합니까?
- 28. Dreamweaver CS4에서 줄 번호를 다시 얻으려면 어떻게해야합니까?
- 29. 행 번호를 제어 할 때 어떤 바이트 코드 라이브러리가 필요합니까?
- 30. Java에서 c/C++ 소스 코드의 함수 이름 추출