현재 x86 명령어 세트 아키텍처 (ISA)에 대한 동적 명령어 대체에 대한 연구를하고 있습니다. 지금까지는 RISC-V 기반 프로세서 아키텍처에 대해서만 수행했습니다. FPGA에 합성 할 수있는 공용 도메인 x86 구현이 없기 때문에 지금은 시각화를 고수해야합니다.명령어 대체의 관점에서 QEMU와 KVM의 상호 작용
실험 설정은 다음과 같습니다 : qemu-user-mode에서 게스트 응용 프로그램 (gcc로 컴파일되고 외부 라이브러리가 없음)이 실행됩니다. (나는이 게시물을 실제로 매우 도움이된다 : QEMU - Code Flow [ Instruction cache and TCG]) 전체 시스템은 Fedora 25 Linux 운영 체제에서 실행되고 최신 git-sources에서 빌드됩니다.
가 일부 지침입니다 (내 자신의 코드 분석)가 내부적으로 거기에서
static AddressParts gen_lea_modrm_0(CPUX86State *env, DisasContext *s, int modrm)
에 파견, 나는 명령이 클래스에 무슨 일이 일어나고 있는지 알 수 없습니다.
gen_nop_modrm(env, s, modrm); (translate.c:8108)
호출 방법입니다.
내 기본 목표는 동일한 명령어의 연속 실행을 다시 지연시키기 위해 명령어가 인식 된 후 명령어를 추가하는 것입니다.
KVM 기반 QEMU 실행 방법에 대해 읽었습니다. 분명히, 일종의 하이퍼 비전이 가능합니다 (심지어 USB 거래의 경우 : https://www.blackhat.com/docs/eu-14/materials/eu-14-Schumilo-Dont-Trust-Your-USB-How-To-Find-Bugs-In-USB-Device-Drivers-wp.pdf). 아키텍처는 매우 복잡하지만 아주 간단합니다. 이러한 gen_lea_modrm 방법에 의해 잡힌 처리 지침, 얼마나
- :
나는에 관심이 있어요.
- 순전히 KVM을 통해 전달되는 명령어를 볼 수 있습니까?
- 번역 버퍼 (tb)는 청크로 묶여 있습니다 (이해하는 한) 지침을 삽입하기 위해 버퍼를 확장 할 수 있습니까?
- 이 할 수있는 빌드 - 시설 있는가 명령 - 프로파일 난 그렇게 철저하게 내가 가진 검색 조건 검색
합니다. 모든 종류의 힌트, 팁 또는 제안은 실제로 도움이되고 감사하게 될 것입니다.
좋습니다.
먼저 자세한 설명을 주셔서 감사합니다. 실제로 TCG 기반 실행과 KVM 기반 실행의 차이점을 알고있었습니다. 그러나 정확한 라인이 어디에 있는지 확실하지 않았습니다. Thx 지금까지. 게스트 - 바이너리 해석/실행에 관해서. 나는 (이 호출자가 gen_nop_modrm (env, s, modrm)이기 때문에)이 클래스의 명령이 NOP와 일치 할 것이라고 가정했다. 마지막으로, 서브 루틴은 정렬이 다음 명령 (insn에 대한 포인터 등)에 대해 정확한지 확인합니다. 귀하의 의견을 바탕으로, 감독 된 실행과 같은 것을 파헤쳐 야합니다. – Kennerd