X86 LINUX Driver "Hello world!" example

mail:bookworepeng@Hotmail.com

qq:196568501

author:DriveMonkey

phone:13410905075


Source:

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int mmap_init(void)
{
	printk(KERN_ALERT"Hello world!\n");

	return 0;
}

static void mmap_exit(void)
{
	printk(KERN_ALERT"Bye World!\n");
}

module_init(mmap_init);
module_exit(mmap_exit);

Makefile:

#obj-$(CONFIG_MMP_TEST)			+= mmap.o

obj-m := mmap.o  
KERNELDR := /usr/src/linux-headers-2.6.32-38-generic/
PWD := $(shell pwd)  
modules:  
	$(MAKE) -C $(KERNELDR) M=$(PWD) modules  
moduels_install:  
	$(MAKE) -C $(KERNELDR) M=$(PWD) modules_install  
clean:  
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 汇编代码实现输出 "Hello World!" 的方式有很多,这里是一个例子: ``` ; Windows 平台下的汇编代码,使用 Microsoft Macro Assembler (MASM) 汇编器 ; 在 Windows 平台下,使用 WriteConsoleA 函数输出字符串 .data hello_world db 'Hello World!', 0 ; 定义字符串变量 hello_world,以 0 结尾 .code mov eax, 4 ; 调用 WriteConsoleA 函数,eax=4 mov ebx, 1 ; 输出到控制台,ebx=1 mov ecx, offset hello_world ; 字符串地址,ecx=&hello_world mov edx, 13 ; 字符串长度,edx=13 int 0x80 ; 调用中断,执行 Write consoleA 函数 ``` 上述代码将会输出 "Hello World!" 到控制台。 需要注意的是,需要使用 Microsoft Macro Assembler (MASM) 汇编器来汇编这段代码。这段代码的输出方式是通过调用 Windows API 函数 WriteConsoleA 实现的,这个函数是在 Windows 平台下常用的输出函数。 希望这段代码能帮到你! ### 回答2: 在Windows平台下使用汇编语言编写代码输出“Hello World!”可以使用汇编语言中的系统调用来实现。以下是一种可能的汇编代码示例: ```assembly section .data message db 'Hello World!',0 message_len equ $-message section .text global _start _start: ; 使用系统调用号4(即write)将字符串输出到标准输出 mov eax, 4 mov ebx, 1 mov edx, message_len mov ecx, message int 0x80 ; 使用系统调用号1(即exit)退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 该代码使用了Linux的系统调用接口,因此需要使用Linux下的汇编工具进行汇编和链接。在Windows平台上,可选择使用MinGW-w64等工具链。 可以将上述代码保存为一个文件,例如`hello.asm`,然后使用以下命令进行汇编和链接: ```bash $ nasm -f elf32 hello.asm -o hello.o $ ld -m elf_i386 hello.o -o hello ``` 最后,执行生成的可执行文件: ```bash $ ./hello ``` 执行结果将在命令行中输出“Hello World!”。 ### 回答3: 在Windows平台下,可以使用汇编语言编写一个简单的代码来输出"Hello World!"字符串。以下是一个示例代码: ```assembly section .data hello db 'Hello World!', 0 section .text global _start _start: ; 将字符串"Hello World!"的地址存储到 EDX 寄存器中 mov edx, hello ; 获取字符串长度 mov ecx, 13 ; 文件句柄 stdout 是 1 mov ebx, 1 ; 系统调用号 4 表示写入文件 mov eax, 4 ; 执行系统调用,将字符串输出到屏幕 int 0x80 ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 以上代码使用x86汇编语言编写,在.data段中定义了一个存储字符串的变量`hello`。在.text段中,使用`mov`指令将字符串地址存储到寄存器EDX中,然后使用`mov`指令将字符串长度存储到寄存器ECX中,将文件句柄stdout存储到寄存器EBX中。接下来,使用`mov`指令将系统调用号4存储到寄存器EAX中,表示将要执行的系统调用是写入文件。最后通过`int 0x80`指令触发系统调用,将字符串输出到屏幕上。然后使用`mov`指令将退出程序调用号1存储到寄存器EAX中,并使用`int 0x80`指令退出程序。 需要注意的是,汇编语言是与特定的体系结构和操作系统相关的低级语言。所以上述代码仅适用于基于x86体系结构的Windows操作系统。在其他体系结构或操作系统上运行此代码可能会导致错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值