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();
}
}
分享到:
相关推荐
标题“asm_helloworld_world_”暗示我们关注的焦点是一个用汇编语言编写的“Hello, World!”程序。在计算机科学的教育中,"Hello, World!"通常被用作初次接触新编程语言时编写的第一个程序,它能快速验证编译器和...
标题 "asm.zip_asm hello world_world" 和描述 "asm hello world test" 暗示了这个压缩包的内容与汇编语言编程有关,特别是涉及到一个简单的 "hello world" 程序的创建和测试。汇编语言是计算机编程的一种底层语言,...
在`HelloWorld.asm`中,我们可能会看到类似以下的代码片段,用于打印"Hello, World!": ```assembly section .data hello db 'Hello, World!',0 section .text global _start _start: ; 设置段寄存器 mov ax,...
第一个汇编语言程序,使用MASM32编译,适合自己学习参考
这个简单的hello world操作系统包包括一个boot sector code(ASM) , boot sector writer , 一个 exe header stripper , 和 一个如何建立一个显示“Hello World !”的小操作系统的简单导引。The Simple Hello World ...
标题中的"hello-world2_supporttnd_world_vs2019hello.asm_efiasmhelloworld_源"揭示了这个压缩包文件的主要内容。它涉及到一个“hello world”程序的实现,使用了汇编语言(asm),并且可能针对Visual Studio 2019...
汇编语言第一个入门程序,helloworld的asm格式文档
`hello.asm`是我们的主要程序文件,它将包含"Hello, World!"的输出逻辑。在汇编语言中,我们需要指定输出到屏幕的指令,这通常通过控制视频内存来实现。DOS环境下,我们可以使用INT 21H这个中断服务调用来显示文本,...
标题中的"masm.rar_Assembly hello wor_dos hello world_hello world D_masm_"揭示了我们今天要讨论的主题——使用MASM(Microsoft Assembler)在DOS环境下编写并编译一个简单的“Hello, World!”程序。这个压缩包...
标题“MASM_masmhellloworld_汇编语言helloworld_”揭示了我们要讨论的主题,即使用Microsoft Macro Assembler(MASM)编写一个简单的“Hello, World!”程序。这是一个经典的编程入门示例,用于演示基本的汇编语言...
用x86汇编写的环境搭建的测试程序。如果输出“Hello World!”那么就表示环境搭建成功。大家可以下载尝试一下。
对于本实验,我们将使用一个简单的“Hello, World!”程序示例来介绍DSP开发的基本流程。在开始之前,请确保你已经正确安装了CCS,并且按照安装说明完成了相关的软件设置,包括设置好目标板或模拟器的通信接口。 ...
首先,我们来看`HelloWorld.asm`文件,这是源代码文件。在汇编语言中,每个语句都对应机器码,直接控制计算机硬件。MASM32提供了方便的语法,允许程序员用高级形式表示低级指令。在这个例子中,源代码可能包含以下...
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...
[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...
22.asm
【标题】"DTK643 例程 hello world" 是一个基于数字信号处理器(DSP)DM643开发板的示例程序,用于初学者理解如何在该平台上进行基本的编程操作。"hello world"是软件开发中的一个经典入门程序,通常用于验证开发...
本文将深入探讨一个基于汇编语言的简单消息框源程序——"hello world!",它是一个常见的入门级示例,适用于初学者理解和学习。 首先,"hello world!"程序是每个程序员接触编程时的首个例子,它在屏幕上打印出...
@Path("/helloworld") public class HelloWorldResource { @GET @Produces("text/plain") public String getClichedMessage() { return "Hello World"; } } ``` 这里定义了一个简单的GET方法,用于返回文本...
CSharpAsmjs C#Hello World示例到Asm.js 我试图写一个Hello World! 可以转换为Asm.js的示例应用程序首先使用C#Native( )转换为C ++,然后使用Emscripten( )转换为JavaScript。障碍: EMscripten无法编译C#...