as를 이용해서 부트로더를 만들려는데요
글쓴이: gurugio / 작성시간: 화, 2004/02/17 - 1:22오전
masm으로 만들어본 부트 로더가 있어서
그대로 다시 만들려고 하는데요
masm으로 윈도우즈에서 만들때는 일단 실행화일로 만든다음에
exe2bin으로 바이너리 파일로 만들고
partcopy로 디시크의 부트 섹터에 복사했었는데
이 작업을 리눅스에서는 어떤 유틸로 해야할지 모르겠습니다.
as나 ld에 바이너리를 만드는 옵션이 있는지 objcopy로 해야하는지
또 부트섹터에 이미지를 복사할때 어떤 툴을 써야할지 궁금합니다.
감사합니다. wink
Forums:
어셈블러는nasm 을 사용하시면 됩니다출력포맷을 bin 로 해주시
어셈블러는
nasm 을 사용하시면 됩니다
출력포맷을 bin 로 해주시면 되고요
dd 를 사용해서 카피하시면 됩니다.
저도 예전에 재미삼아 만들어 봤는데
protected mode 에 관한 부분은 암만 해봐도 모르겠더군요 ^^
-- 아쉬운 하루 되세요 --
gcc를 사용해서 (물론 내부적으로 as를 호출하겠지만요..) compi
gcc를 사용해서 (물론 내부적으로 as를 호출하겠지만요..) compile하고
objcopy -O binary $(SRC) $(TARGET) 하시면 binary 파일 얻어지구요.
dd 사용해서 설치..
jcly2님이 말씀하신대로 해도 됩니다만 masm으로 컴파일된 소스코드를
jcly2님이 말씀하신대로 해도 됩니다만 masm으로 컴파일된 소스코드를 그대로 사용하실거면 voider님이 말씀하신대로 nasm으로 컴파일하셔야 될거에요.
어셈블리 문법이 서로 틀려서 gas로 컴파일 하실려면 소스코드를 많이 수정하셔야 되거든요.
앞으로 계속 as를 사용해서 보호 모드와메모리 관리를 코딩해볼 계
앞으로 계속 as를 사용해서 보호 모드와
메모리 관리를 코딩해볼 계획이거든요
nasm으로도 만들어봤지만 이번에는
as 문법 연습도 할겸 as로 작업하려고 했습니다.
jcly2 님 gcc 로 컴파일하는 방법을 자세히 알려주시겠어요?
전 Programming from the ground up 에 나온 대로
as 로 어셈블하고 ld로 실행파일을 만들어서 썼거든요.
gcc로는 어떻게 하는지 모르겠습니다.
부탁...
만들어보신 부트로더를 공개하실 생각은 없으신가요?
부탁드립니다.
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
방금 작업한 소스입니다.하드 디스크에 있는 추가 이미지를 로드해야
방금 작업한 소스입니다.
하드 디스크에 있는 추가 이미지를 로드해야하는데 그 부분은 안만들었고
일단 테스트하기 위해 부팅 되는지만 알아보도록 만들었습니다.
별 도움이 되실지 모르겠습니다.
급하게 테스트용으로 만들어서 주석은 없습니다.
나중에 어셈러브라고 제 홈페이지에 문서화를 해서 올리겠습니다.
# how to assemble it
#as -o bootsect.o bootsect.S
#objcopy -O binary bootsect.o biitsect.img
.equ BOOTSEG, 0x07c0
.equ INITSEG, 0x9000
.code16
.text
.global _start
_start
movw $BOOTSEG, %ax
movw %ax, %ds
movw $INITSEG, %ax
movw %ax, %es
movw $256, %cx
xorw %si, %si
xorw %di, %di
cld
rep
movsw
ljmp $INITSEG, $START_BOOTLOADER
START_BOOTLOADER
movw %ax, %ds # initialize data segment
movw %ax, %ss # initialize stack segment (0x90000x8000)
movw $0x8000, %ax
movw %ax, %sp
movb $0xe, %ah # print test data
movb $'X', %al
movw $0x7, %bx
int $0x10
pushw %cs
popw %cx
movb %ch, %dl
call PRINT_BYTE
movb %cl, %dl
call PRINT_BYTE
movb $0xe, %ah
movw $0x7, %bx
xorw %si, %si
movw $BOOT_MSG1, %bx
PRINT_MSG_LOOP
movb (%bx), %al
cmp $0x0, %al
jz END_BOOTLOADER
int $0x10
incw %bx
jmp PRINT_MSG_LOOP
END_BOOTLOADER
jmp END_BOOTLOADER
PRINT_BYTE
movb %dl, %al
shrb $4, %al
addb $0x30, %al
int $0x10
movb %dl, %al
andb $0xf, %al
addb $0x30, %al
int $0x10
ret
BOOT_MSG1
.ascii "boot complete..",
.byte 0xd, 0xa, 0x0
.org 510
BOOT_FLAG
.word 0xAA55
예전에 부트로드 만든다고 손대던 건데.. 도움이 될지...Make
예전에 부트로드 만든다고 손대던 건데.. 도움이 될지...
Makefile입니다.
==============================================
AFLAGS = -g -I. -I.. -Wa,-a -c -fno-builtin -nostdinc
all: stage1
stage1: stage1.o
gcc -O2 -nostdlib -g -Wl,-N,-Ttext,7C00 -o stage1.exec stage1.o
objcopy -O binary stage1.exec stage1
# dd if=stage1 of=stage1_446 bs=446 count=1
stage1.o: stage1.S
gcc $(AFLAGS) stage1.S > stage1.lst
clean:
rm -f *.o
rm -f *.lst
rm -f *.exec
rm -f stage1
댓글 달기