10장 삽질 목록

c0wb3ll ㅣ 2022. 9. 18. 08:22

Chap#10 삽질

run_qemu.sh

  • 이전에 i8086 architecture debugging을 위해 qemu를 i386으로 실행시킴
  • qemu를 i386으로 실행시키고 IA-32e Mode 지원이 왜 안되지 하면서 1시간 삽질….
O_DEBUG="no"

while getopts d opts; do
    case $opts in
    d) O_DEBUG="yes"
        ;;
    esac
done

if [ "${O_DEBUG}" = "yes" ]; then
    qemu-system-x86_64 -L . -m 64 -fda /mnt/d/home/study/mint64os/Disk.img -rtc base=localtime -M pc -s -S
    #qemu-system-i386 -L . -m 64 -fda /mnt/d/home/study/mint64os/Disk.img -rtc base=localtime -M pc -s -S 
fi
if [ "${O_DEBUG}" = "no" ]; then
    qemu-system-x86_64 -L . -m 64 -fda /mnt/d/home/study/mint64os/Disk.img -rtc base=localtime -M pc
    #qemu-system-i386 -L . -m 64 -fda /mnt/d/home/study/mint64os/Disk.img -rtc base=localtime -M pc
fi

run_qemu.sh 수정

O_DEBUG="no"
O_ARCH="x86_64"

while getopts da: opts; do
    case $opts in
    d) O_DEBUG="yes"
        ;;
    a) O_ARCH=$OPTARG
        ;;
    esac
done

if [ "${O_DEBUG}" = "yes" ]; then
    qemu-system-${O_ARCH} -L . -m 64 -fda /mnt/d/home/study/mint64os/Disk.img -rtc base=localtime -M pc -s -S
fi
if [ "${O_DEBUG}" = "no" ]; then
    qemu-system-${O_ARCH} -L . -m 64 -fda /mnt/d/home/study/mint64os/Disk.img -rtc base=localtime -M pc
fi

+... 코드는 거짓말 하지 않는다...

왜인지는 모르겠지만 NULLDESCRIPTOR에 db 0x00 한 줄이 더 추가되어 있었다... 디버깅 끝에 jmp 0x18: 0x10020 에서 이상한데로 뛰는 것을 보고 오류를 찾을 수 있었는데 이것도 참 오래걸렸따.... 오류 찾고 디버깅 하고 수정하려면 오래걸리니까 처음부터 코드를 집중해서 잘 보도록 하자...