"-d .." 플래그를 통해 qemu 로그의 출력을 읽고 이해하는 방법에 대한 문서나 설명은 어디에서 찾을 수 있습니까?
예
qemu-system-x86_64 -cdrom $(ISO_FILE) -serial stdio -m 1024 -d int
" 0: v=03 e=0000 i=1 cpl=0 IP=0008:ffff80000020904e pc=ffff80000020904e SP=0000:ffff800000206ff0 env->regs[R_EAX]=ffff800000209440
RAX=ffff800000209440 RBX=0000000000000800 RCX=0000000080002001 RDX=ffff800000209460
RSI=ffff800000208eeb RDI=ffff8000002096d0 RBP=ffff800000207000 RSP=ffff800000206ff0
R8 =0000000000000000 R9 =0000000000000000 R10=0000000000000000 R11=0000000000000000
R12=0000000000000000 R13=0000000000000000 R14=0000000000000000 R15=0000000000000000
RIP=ffff80000020904e RFL=00000006 [-----P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 0000000000000000 00000000 00000000
CS =0008 0000000000000000 00000000 00209800 DPL=0 CS64 [---]
SS =0000 0000000000000000 00000000 00000000
DS =0000 0000000000000000 00000000 00000000
FS =0000 0000000000000000 00000000 00000000
GS =0000 0000000000000000 00000000 00000000
LDT=0000 0000000000000000 0000ffff 00008200 DPL=0 LDT
TR =0000 0000000000000000 0000ffff 00008b00 DPL=0 TSS64-busy
GDT= 0000000000201000 0000000f
IDT= ffff800000209460 00000fff
CR0=80000013 CR2=0000000000000000 CR3=0000000000202000 CR4=00000620
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00000001ffff0000 CCD=00000000ffff8000 CCO=SARQ
EFER=0000000000000500
check_exception old: 0xffffffff new 0xe
1: v=0e e=0000 i=0 cpl=0 IP=0008:ffff80000020904e pc=ffff80000020904e SP=0000:ffff800000206ff0 CR2=0000000000201008
RAX=ffff800000209440 RBX=0000000000000800 RCX=0000000080002001 RDX=ffff800000209460
RSI=ffff800000208eeb RDI=ffff8000002096d0 RBP=ffff800000207000 RSP=ffff800000206ff0
R8 =0000000000000000 R9 =0000000000000000 R10=0000000000000000 R11=0000000000000000
R12=0000000000000000 R13=0000000000000000 R14=0000000000000000 R15=0000000000000000
RIP=ffff80000020904e RFL=00000006 [-----P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 0000000000000000 00000000 00000000
CS =0008 0000000000000000 00000000 00209800 DPL=0 CS64 [---]
SS =0000 0000000000000000 00000000 00000000
DS =0000 0000000000000000 00000000 00000000
FS =0000 0000000000000000 00000000 00000000
GS =0000 0000000000000000 00000000 00000000
LDT=0000 0000000000000000 0000ffff 00008200 DPL=0 LDT
TR =0000 0000000000000000 0000ffff 00008b00 DPL=0 TSS64-busy
GDT= 0000000000201000 0000000f
IDT= ffff800000209460 00000fff
CR0=80000013 CR2=0000000000201008 CR3=0000000000202000 CR4=00000620
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
CCS=00000001ffff0000 CCD=00000000ffff8000 CCO=SARQ
EFER=0000000000000500"
답변1
"-d" 옵션 플래그는 주로 QEMU 자체를 디버깅하는 데 사용되므로 문서가 없습니다(게스트 바이너리가 수행하는 작업에 대한 통찰력을 얻는 데 사용할 수 있음). 유용하고 문서화하기 쉬운 내용을 기록하며 이를 해석하려면 게스트 아키텍처의 세부 사항과 QEMU 자체의 내부 구현에 대한 지식이 필요합니다.
이 경우 예외가 발생하기 전이나 후에 주로 게스트 레지스터 덤프가 발생합니다. 자세한 내용을 보려면 QEMU 소스 코드를 찾아봐야 합니다. x86 아키텍처를 이해한다면 대부분의 필드의 의미가 명확해질 것입니다.
답변2
확립된@petermedel대답하고 보기qemu 코드, 존재하다
0: v=03 e=0000 i=1 cpl=0 IP=0008:ffff80000020904e pc=ffff80000020904e SP=0000:ffff800000206ff0 env->regs[R_EAX]=ffff800000209440
0:
지금까지의 인터럽트 카운트
v
는 인터럽트입니다V엑터
e
가 연관되어 있다이자형
i
하드웨어나 명령어에서 예외가 발생한 경우 오류 코드는 1 로 설정됩니다 INT
.OSDev 게이트 유형
cpl
현재 특권 레벨, 0 = 커널 모드
IP
, PC
명령 포인터 및 프로그램 카운터, 즉 현재 명령의 주소는
SP
스택 포인터입니다.
귀하의 예에서는
1: v=0e e=0000 i=0 cpl=0 IP=0008:ffff80000020904e pc=ffff80000020904e SP=0000:ffff800000206ff0 CR2=0000000000201008
에 해당페이지 오류0xffff80000020904e에서 예외가 발생했습니다. CR2에 잘못된 주소가 있습니다. 오류 코드는 페이지가 존재하지 않고( e&1
), 쓸 수 없으며( e&2
), 사용자가 액세스할 수 없음( e&4
)을 나타냅니다.