Tôi đang tìm cách viết một chương trình ngắn (có thể là Hello World) trong mã Java bytecode. Tôi chỉ muốn viết bytecode bằng cách sử dụng trình soạn thảo văn bản của tôi và chạy nó. Làm thế nào tôi sẽ làm điều này? Có một ví dụ? Cảm ơn!Lập trình bằng mã Java bytecode
Trả lời
Bạn có thể thử Jasmin!
.class public HelloWorld
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit stack 3
.limit locals 1
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello World."
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
Bạn biên dịch nó bằng cách sử:
> java -jar jasmin.jar hello.j
Và sau đó bạn chạy nó giống như bất kỳ lớp:
> java HelloWorld Hello World.
Cập nhật
Tôi thấy rằng câu hỏi của bạn đề cập đến "không có sử dụng Javac hoặc Java ". Bạn có thể làm rõ làm thế nào bạn có nghĩa là tuyên bố đó?
Bài đăng này làm cho tôi muốn giả mạo công việc tôi đang làm hôm nay và tinker xung quanh với Jasmin. :-) – corsiKa
+1 Jasmin là những gì tôi nghĩ và tôi không thể nhớ tên. Nó được giới thiệu trong một cuốn sách giải thích nội bộ JVM. Tôi quên tên của cuốn sách quá, * thở dài * ... – bakkal
@ Bakkal: Theo liên kết: "Jasmin ban đầu được tạo ra như một người bạn đồng hành với cuốn sách" Máy ảo Java ", được viết bởi Jon Meyer và Troy Downing và xuất bản bởi O'Reilly Associates. " –
Có lẽ bài viết này có thể giúp bạn bắt đầu: Bytecode basics (một ít tuổi, nhưng bạn sẽ có được ý tưởng).
Các class file format sẽ có ích quá: D
+1 cho chỉnh sửa – Pops
Mã byte được viết dưới dạng byte thực, thường không thể chỉnh sửa dễ dàng bằng trình chỉnh sửa văn bản thông thường.
Điều này có nghĩa là bạn sẽ cần thứ gì đó chuyển đổi biểu diễn dạng văn bản thành nhị phân. Một nơi hợp lý để bắt đầu sẽ là một người lắp ráp như Jasmin.
Tôi đã tạo một Java bytecode assembler mới tương thích ngược với Jasmin nhưng cũng bổ sung thêm nhiều tính năng mới và đơn giản hóa cú pháp một chút.
Dưới đây là ví dụ về cách bạn có thể viết chương trình Hello World.
.class public hello
.super java/lang/Object
.method public static main : ([Ljava/lang/String;)V
.limit stack 10
.limit locals 10
getstatic java/lang/System out Ljava/io/PrintStream;
ldc "Hello World!"
invokevirtual java/io/PrintStream println (Ljava/lang/Object;)V
return
.end method
I've also written a tutorial on bytecode assembly. Nó hiện chỉ bao gồm Hello, World, nhưng tôi có thể tiếp tục nếu có sự quan tâm.
- 1. Xóa hướng dẫn khỏi mã Java bytecode
- 2. Độc lập Bytecode Verifier
- 3. Dịch mã byte Java sang các ngôn ngữ lập trình và ngôn ngữ lập trình khác
- 4. Lập trình meta bằng Java
- 5. Thêm mẫu mã Java theo lập trình
- 6. API để lập trình lại mã Java
- 7. Java - Mã nhị phân có giống với ByteCode không?
- 8. Lập trình trò chơi bằng Java
- 9. Lập trình biên dịch java bằng JavaCompiler?
- 10. Có cách nào để tạo mã bytecode bằng Python không?
- 11. Gửi fax lập trình bằng Java
- 12. khi java jvm biên dịch bytecode, mã đó đi đâu trong không gian quá trình?
- 13. Cách đăng nhập vào Facebook bằng lập trình bằng Java?
- 14. Chuyển đổi BCI (chỉ số bytecode) sang số dòng mã
- 15. Android: Điền Spinner từ mã Java theo lập trình
- 16. Biên dịch sang bytecode java (không sử dụng Java)
- 17. Java bytecode: các loại biến cục bộ?
- 18. Tìm hiểu về Java bytecode và JVM
- 19. Lập trình GPU Java
- 20. Trình biên dịch mã byte Java trong JavaScript
- 21. Mã một bài tập lập trình tuyến tính bằng tay
- 22. Xử lý các ngoại lệ Thử/Bắt trong mã Java bytecode? ("stack height inconsistent")
- 23. Lập trình Java và lập trình sự kiện
- 24. Làm thế nào để phát ra và thực thi mã Java bytecode khi chạy?
- 25. Làm thế nào để chạy mã bytecode scala trên jvm?
- 26. Tháo rời Java JIT biên dịch bytecode bản địa
- 27. sử dụng lập trình R trong java
- 28. Công cụ mã bytecode CLR/.NET nào tồn tại?
- 29. Lập trình Java với Vim
- 30. Đậu trong lập trình java
Đọc https://docs.oracle.com/javase/specs/jvms/se7/html/index.html và sử dụng 'printf' trong bash :-) –