|
|
发表于 2007-7-3 15:56:19
|
显示全部楼层
=== VMware + LFS系统 + nasm 笔记 ===
安装nasm源码包
# cd /sources
# tar -xvf nasm-0.99.01.tar.tar
# cd nasm-0.99.01
# more INSTALL
# ./configure
# make
# make install
创建以下4个文件:
/usr/local/bin/{nasm,ndisasm} , /usr/local/man/man1/{nasm.1,ndisasm.1}
# cd
# file /usr/local/bin/nasm
nasm: ELF 32-bit LSB executable, Intel 80386,version 1 (SYSV)..................
[ 系统属于‘ELF’格式 ]
1) nasm操作例子:
由于LFS系统没有进行‘进阶设置’(例如 BLFS相关配置),执行命令时采用绝对路径形式。以下例子中程序来源‘骇客基地’(www.hookbase.com),《Linux和ELF文件格式汇编语言教程》文档。
# cd
# vi hello.asm
---------------------------------------
BITS32
section .text
global _start
_start:
mov eax,4
mov ebx,1
mov ecx,message
mov edx,23
int 80h
mov eax,1
mov ebx,0
int 80h
section .data
message db "hello Linux world !",13,10,0
section .bss
---------------------------------------
# /usr/local/bin/nasm -f elf hello.asm
# ld -o hello hello.o
# ./hello
hello Linux world !
参考 NASM中文手册
# /usr/local/bin/nasm -f coff hello.asm -l my1.lst
# /usr/local/bin/nasm -f elf hello.asm -l my2.lst
# cat my2.lst
2) nasm操作例子:
# vi chapter1_boot.asm
----------------------------------------
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0
dw 0xaa55
----------------------------------------
# /usr/local/bin/nasm chapter1_boot.asm -o boot.bin
# hexdump boot.bin -n 512
# hexdump boot.bin -C
反汇编
# /usr/local/bin/ndisasm -o 0x7c00 boot.bin > disboot.asm
制作引导盘:
VMware菜单> VM > Floppy > Use floppy image > Create 创建软盘文件boot.flp,然后Connect
# dd if=boot.bin of=/dev/fd0
1+0 records in
1+0 records out
# hexdump /dev/fd0 -n 512
然后启动进行测试
正常显示红色字 Hello, OS world!
[ 注 RH7.3系统安装套件中有 nasm RPM包,能进行以上操作 ]
注:参考《自己动手写操作系统》(OS_DIY.pdf)第一章测试部分。尝试用LFS系统替代工作环境,学习其中的内容。
==
-- |
|