as를 이용해서 부트로더를 만들려는데요

gurugio의 이미지

masm으로 만들어본 부트 로더가 있어서

그대로 다시 만들려고 하는데요

masm으로 윈도우즈에서 만들때는 일단 실행화일로 만든다음에

exe2bin으로 바이너리 파일로 만들고

partcopy로 디시크의 부트 섹터에 복사했었는데

이 작업을 리눅스에서는 어떤 유틸로 해야할지 모르겠습니다.

as나 ld에 바이너리를 만드는 옵션이 있는지 objcopy로 해야하는지

또 부트섹터에 이미지를 복사할때 어떤 툴을 써야할지 궁금합니다.

감사합니다. wink

voider의 이미지

어셈블러는
nasm 을 사용하시면 됩니다
출력포맷을 bin 로 해주시면 되고요

dd 를 사용해서 카피하시면 됩니다.

저도 예전에 재미삼아 만들어 봤는데
protected mode 에 관한 부분은 암만 해봐도 모르겠더군요 ^^

-- 아쉬운 하루 되세요 --

jcly2의 이미지

gcc를 사용해서 (물론 내부적으로 as를 호출하겠지만요..) compile하고
objcopy -O binary $(SRC) $(TARGET) 하시면 binary 파일 얻어지구요.

dd 사용해서 설치..

xfree의 이미지

jcly2님이 말씀하신대로 해도 됩니다만 masm으로 컴파일된 소스코드를 그대로 사용하실거면 voider님이 말씀하신대로 nasm으로 컴파일하셔야 될거에요.

어셈블리 문법이 서로 틀려서 gas로 컴파일 하실려면 소스코드를 많이 수정하셔야 되거든요.

gurugio의 이미지

앞으로 계속 as를 사용해서 보호 모드와

메모리 관리를 코딩해볼 계획이거든요

nasm으로도 만들어봤지만 이번에는

as 문법 연습도 할겸 as로 작업하려고 했습니다.

jcly2 님 gcc 로 컴파일하는 방법을 자세히 알려주시겠어요?

전 Programming from the ground up 에 나온 대로

as 로 어셈블하고 ld로 실행파일을 만들어서 썼거든요.

gcc로는 어떻게 하는지 모르겠습니다.

girneter의 이미지

만들어보신 부트로더를 공개하실 생각은 없으신가요?

부탁드립니다.

개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?

gurugio의 이미지

방금 작업한 소스입니다.

하드 디스크에 있는 추가 이미지를 로드해야하는데 그 부분은 안만들었고

일단 테스트하기 위해 부팅 되는지만 알아보도록 만들었습니다.

별 도움이 되실지 모르겠습니다.

급하게 테스트용으로 만들어서 주석은 없습니다.

나중에 어셈러브라고 제 홈페이지에 문서화를 해서 올리겠습니다.

# 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

jcly2의 이미지

예전에 부트로드 만든다고 손대던 건데.. 도움이 될지...

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.