2010-06-30 36 views
44

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

+0

Đọc https://docs.oracle.com/javase/specs/jvms/se7/html/index.html và sử dụng 'printf' trong bash :-) –

Trả lời

42

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ố đó?

+6

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

+0

+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

+0

@ 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. " –

8

Bạn đã xem JBE (Trình biên dịch Bytecode Java) chưa?
Nó dựa trên Thư viện Kỹ thuật bytecode của Apache (BCEL)

+0

typo: đó là BCEL. Nếu không, biên tập viên tuyệt vời –

7

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

+0

+1 cho chỉnh sửa – Pops

7

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.

8

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

liên kết bị hỏng – Manza

+0

Xin lỗi về điều đó. Có vẻ như toàn bộ wiki đã biến mất. Tôi sẽ gửi email cho họ để xem họ có thể mang lại hoặc có bất kỳ bản sao nào không. – Antimony

Các vấn đề liên quan