Tôi đã viết một trình phân tích cú pháp bytecode Java bằng cách sử dụng Haskell và nó hoạt động tốt. Tuy nhiên, bước tiếp theo đã khiến tôi hoàn toàn bối rối.Tiêm một hàm vào tệp .class của Java bằng cách sử dụng Haskell
chương trìnhMy Haskell cần phải sửa đổi các tập tin .class do đó, khi thực hiện, chương trình in Java:
"Bước vào [phương pháp tên ở đây]" trước khi thực hiện một phương pháp, và
" Thoát [tên phương thức tại đây] "sau khi thực hiện một phương pháp.
Tất cả những gì tôi biết là chúng tôi sẽ cần phải nối thêm bảng và bảng phương thức không đổi với các cuộc gọi đến System.out.println
, nhưng tôi cảm thấy tôi vẫn còn thiếu điều gì đó.
- Cách tốt nhất để tiếp cận vấn đề này là gì?
- Làm cách nào bạn biết cách gọi
System.out.println
bằng bytecode? - Làm cách nào để lưu trữ chuỗi có tên của phương pháp, sau này được gọi là đối số của
System.out.println
?
[VMSpec] (http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#80959) là bạn của bạn. :) – biziclop
tiêm chức năng mới vào bytecode ??? Tôi thực sự vui vì bạn đang gặp vấn đề với điều này nghe có vẻ đáng sợ – ControlAltDel
Tôi không tin rằng bạn cần phải đi ra ngoài của Java cho một giải pháp này - Tôi nghi ngờ rằng một số loại kỹ thuật proxy sẽ làm việc. (Điều đó nói rằng, bạn có sự tôn trọng của tôi đối với cố gắng để làm điều đó theo cách này.;)) –