import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Method;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class HelloAsm {
public static void main(String[] args)throws Exception{
System.out.println("enter main");
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
// 类访问开始
cw.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, "com/cjf/Hello", null, "java/lang/Object", null);
// 至少提供一个构造函数
MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
// 代码开始:必须
mv.visitCode();
mv.visitVarInsn(Opcodes.ALOAD, 0);
// 调用Object 构造函数
mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
mv.visitInsn(Opcodes.RETURN);
// 计算栈和局部变量最大空间:必须
mv.visitMaxs(0, 0);
mv.visitEnd();
// 生成main 方法
mv = cw.visitMethod(Opcodes.ACC_PUBLIC|Opcodes.ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null);
mv.visitCode();
mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitLdcInsn("Hello World!");
// 调用实例重载方法
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
mv.visitInsn(Opcodes.RETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
// 类结束:必须
cw.visitEnd();
final byte[] bytes = cw.toByteArray();
Class<?> clazz = new ClassLoader() {
protected Class<?> findClass(String name) throws ClassNotFoundException{
return defineClass(name, bytes,0, bytes.length);
}
}.loadClass("com.cjf.Hello");
Method method = clazz.getMethod("main", new Class[]{String[].class});
method.invoke(null, (Object)new String[0]);
for (int i = 0; i < bytes.length; i++) {
System.out.printf("%d:\t %02X \t %c \n",i,bytes[i],(char)bytes[i]);
}
FileOutputStream fos = new FileOutputStream(new File("Hello.class"));
fos.write(bytes);
fos.close();
}
}
分享到:
相关推荐
hello world最简单的汇编程序最简单的汇编语言程序,最简单的汇编语言程序
asm hello world test
第一个汇编语言程序,使用MASM32编译,适合自己学习参考
这个简单的hello world操作系统包包括一个boot sector code(ASM) , boot sector writer , 一个 exe header stripper , 和 一个如何建立一个显示“Hello World !”的小操作系统的简单导引。The Simple Hello World ...
Simple hello world in asm
汇编语言第一个入门程序,helloworld的asm格式文档
hello.asm 汇编程序 Data SEGMENT string DB "HELLO WORLD! $" data ENDS CODE SEGMENT ASSUME CS:code,DS:data start: MOV AX,data MOV DS,AX MOV DX,OFFSET string MOV AH,9 INT 21H MOV AH,4CH INT 21H...
22.asm
[INFO] | +- org.springframework:spring-asm:jar:3.1.2.RELEASE:compile [INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile [INFO] \- org.springframework:spring-webmvc:jar:3.1.2.RELEASE:compile...
远程线程注入asm代码.hello world级别 xxxxxxxxxxx
CSharpAsmjs C#Hello World示例到Asm.js 我试图写一个Hello World! 可以转换为Asm.js的示例应用程序首先使用C#Native( )转换为C ++,然后使用Emscripten( )转换为JavaScript。障碍: EMscripten无法编译C#...
nasm -f elf32 hello_world.asm -o hello_world.o 这里的-f elf32指定了输出格式为32位的ELF格式,适用于32位的x86系统。如果你使用的是64位的系统,你可能需要调整这个选项。 使用链接器链接目标文件: bash ld -m...
rpi4bp-hello-world-asm ARM的“你好,世界!” asm 在Raspberry Pi 4B +上 pi @ rpi4bp:〜$ nano hello.asm pi @ rpi4bp:〜$ as hello.asm -o hello.o pi @ rpi4bp:〜$ gcc hello.o -o hello.elf -nostdlib pi ...
《Windows环境下32位汇编语言程序设计》从编写应用程序的角度,从“HelloWorld"这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。Windows环境下32位...
SimpleOS 仅显示“ Hello World!”的裸机最低操作系统。 并列出字母。 您可以在虚拟机下运行此操作系统。 qemu就是这样一种VM。 如果希望使用qemu运行(仅在Linux上进行了测试),则使用终端cd进入包含boot.bin文件...
嵌入式arm64位luvcview 工具,可以测试USB camera以及所有支持v4l2设备
Intel语法 Intel语法是由Intel公司为其处理器编写官方文档时所采用的语法。...编译:nasm -f elf32 hello_world.asm -o hello_world.o 链接:ld -m elf_i386 hello_world.o -o hello_world 运行:./hello_world
本书从编写应用程序的角度,从“Hello World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是...
在美国最高法院关于婚姻平等的裁决之日(2015年6月26日)之际,就在一天之内制作了ROM。 完整评论的6502 ASM源代码和闪光动画的更新已于2015年9月11日发布。 播放ROM:向上和向下按下以更改颜色。 按B切换故障。 ...
调用bios中断打印helloworld并输出显示时钟