argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: Java Bytecode ръчна редакция ? може ли да се прави ?  (Прочетена 1266 пъти)

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die

Здрасти значи... питам тук защото незнам къде другаде да питам и та въпроса е може ли някак MANUALY да се редактира даден Java class
наприемр
имам си следния java клас :
package simple;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class SimpleC
{
 public static void main(String[] args) throws IOException
  {
   BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
   int a;
   a=br.read();
 }
}


компилирам го и ми излиза class file
за да видя bytecode-а на този classfile трябва да направя :
java -p SimpleC >> SimpleC.bytecode
после в фаила SimpleC.bytecode
мога да видя следното съдържание.
Compiled from "SimpleC.java"
public class simple.SimpleC extends java.lang.Object{
public simple.SimpleC();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[])   throws java.io.IOException;
  Code:
   0:   new   #2; //class java/io/BufferedReader
   3:   dup
   4:   new   #3; //class java/io/InputStreamReader
   7:   dup
   8:   getstatic   #4; //Field java/lang/System.in:Ljava/io/InputStream;
   11:   invokespecial   #5; //Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;)V
   14:   invokespecial   #6; //Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V
   17:   astore_1
   18:   aload_1
   19:   invokevirtual   #7; //Method java/io/BufferedReader.read:()I
   22:   istore_2
   23:   return

}

дотук добре
Въпроса :
Въпрос 1 : мога ли да редактирам нещо по този bytecode и да го върна до class file ? и ако да то как ?
и Въпрос 2:
номерата на редовете задължителни ли са че доста ми бъркат работата
Активен

|JOKe|

  • Гост

въпрос 2 отпада явно цифрите са нужни :)
5:  goto            #16
    8:  iload_0
    9:  iload_0
    10: iconst_1
    11: isub
    12: invokestatic    Faculty.fac (I)I (12)
    15: imul
    16: ireturn

:)))))))
Активен

Nikolay Manchev

  • Неактивен Неактивен
  • Публикации: 185
    • http://www.manchev.org

Не, аз опрделено не искам да знам що за мазохизъм е да пипаш по bytecode-а и да се мъчиш да го компилираш, така че не ми казвай.

Иначе можеш да пробваш да ползваш Jasmin за тая работа:

http://jasmin.sourceforge.net/

Поздрави,

Николай Манчев
Активен

JOKe_

  • Гост

хм мерси това маи ще свърши работа иначе аз до сега бях намерил само Apache BCEL  което донякъде ми върши работа
Активен