2016-11-03 1 views
2

인텔의 문서에 따르면 FEE0 0000H ~ FEE0 03F0H은 로컬 APIC의 범위입니다. 그러나, QEMU 콘솔에서 그것을 검사, 난 단지 0이 값을 찾을 수 있습니다QEMU의 지역 APIC 주소는 어디입니까?

(qemu) x/128b 0xfee00000 
fee00000: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00008: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00010: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00018: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00020: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00028: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00030: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00038: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00040: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00048: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00050: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00058: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00060: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00068: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00070: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 
fee00078: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 

내가 확인 128 바이트를 다른 아무것도 0이 적어도, FEE0 0030H가 다른 값을 포함해야합니다 있는지 확인하기 위해이 곳 APIC 때문에 버전이 있습니다.

페이징을 사용할 수 없으므로 가상 메모리가 없습니다. 단지 물리적 :

(qemu) info mem 
PG disabled 

그러나, info lapic 명령 보고서 실제 초기 값 :

(qemu) info lapic 
dumping local APIC state for CPU 0 

LVT0  0x00008700 active-hi level        ExtINT (vec 0) 
LVT1  0x00008400 active-hi level        NMI 
LVTPC 0x00010000 active-hi edge masked      Fixed (vec 0) 
LVTERR 0x00010000 active-hi edge masked      Fixed (vec 0) 
LVTTHMR 0x00010000 active-hi edge masked      Fixed (vec 0) 
LVTT  0x00030010 active-hi edge masked   periodic  Fixed (vec 16) 
Timer DCR=0x2 (divide by 8) initial_count = 4096 
SPIV  0x000001ff APIC enabled, focus=off, spurious vec 255 
ICR 0x000c4610 physical edge assert all 
ICR2  0x00000000 
ESR 0x00000000 
ISR (none) 
IRR (none) 

그럼, 여기서이 값입니다

?

+0

'x'는 가상 메모리를 검사하고 로컬 APIC의 레지스터는 _ 물리적 페이지 FEE00xxx에 매핑됩니다. –

+1

이것은 보호 모드 만 사용 가능하지만 페이징은 사용 불가능한 매우 간단한 부트 로더에서 가져온 것입니다. 아직 가상 메모리가 없습니다. – Amumu

+0

이미 주어진 답을 바탕으로, APIC가 내장 된 하드웨어/에뮬레이터 (QEMU 포함)에서 _ECX_에'0x1b'를로드하고'rdmsr' 명령을 사용하여 APIC 기본 주소를 찾을 수 있어야합니다. 기본 주소는 _EDX_ : _EAX_입니다. –

답변

2

장치가 에뮬레이션되었습니다. vCPU가 해당 주소를 읽거나 쓸 때 에뮬레이트 된 APIC에서 처리합니다. GDB/QEMU 콘솔은 해당 에뮬레이터를 통해 라우팅되지 않습니다 (에뮬레이트 된 읽기가 상태를 변경할 수 있음). 아마도 gdb/QEMU 콘솔은 APIC을 포함하지 않는 RAM의 QEMU 표현으로 라우팅됩니다.

+0

사용자 공간 QEMU 또는 QEMU KVM을 사용하고 있는지 잘 모르겠습니다. 두 가지 모두 APIC에 대한 설명이 있는데, APIC는 콘솔에 액세스 할 수 있도록 해커가있을 수 있습니다. 조금 아플 수도 있습니다. lazier 옵션은 게스트 내부에서 인쇄하는 것입니다. – ruthafjord

+0

사용자 공간 QEMU를 사용하고 있습니다. 표준 명령 줄을 사용하여 q35 시스템과 qemu cpu를 시작합니다. 내 VM에는 256 MB RAM 만 있기 때문에 페이징을 사용할 수없는 경우 주소 기반 '0xfee00'을 적용 할 수 있는지 확실하지 않습니다. MSR 레지스터'0x1b'에'wrmsr' 명령으로 임의의 랜덤 주소로베이스를 다시 매핑하려고했습니다. 그것은 값을 변경하지만, 새로운 주소에 쓰는 경우 .e.g'0x14'가 새로운베이스이므로'0x14380'에 쓰면 초기 타이머 수가 바뀌어야합니다. 그러나 글을 쓰고 난 후에도, 나는 info lapic 명령으로 출력이 똑같은 것으로 나타났습니다. – Amumu

+0

페이징에 관계없이 기본 주소는 처음에는 0xfee00000입니다 (실제 주소 임). 나는 현대 KVM이 APIC 기반을 옮기는 것을 거절하지만 QEMU의 완전한 사용자 공간 행동에 대해서는 확신하지 못한다. – ruthafjord