VirtualBox

1946 단어

원본 수정


src/VBox/VMM/VMMAll/IOMAllMMIONew.cpp 주석은 다음과 같은 코드를 삭제합니다
#ifdef VBOX_STRICT
    if (pRange->fFlags & IOMMMIO_FLAGS_DBGSTOP_ON_COMPLICATED_WRITE)
    {
# ifdef IN_RING3
        LogRel(("IOM: Complicated write %#x byte at %RGp to %s, initiating debugger intervention
", cbValue, GCPhys, R3STRING(pRange->pszDesc))); rc = DBGFR3EventSrc(pVM, DBGFEVENT_DEV_STOP, RT_SRC_POS, "Complicated write %#x byte at %RGp to %s
", cbValue, GCPhys, R3STRING(pRange->pszDesc)); if (rc == VERR_DBGF_NOT_ATTACHED) rc = VINF_SUCCESS; # else return VINF_IOM_R3_MMIO_WRITE; # endif } #endif

include/iprt/assert.h 주석 RTBREAKPOINT에서 assert를 삭제하면 알 수 없는 다운이 발생할 수 있으므로 원본 파일의 assert 호출을 직접 삭제하는 것이 좋습니다
#define RTAssertDebugBreak()    do { RT_BREAKPOINT(); } while (0)

Config.kmk gcov 오픈, afl 말뚝 오픈
VBOX_GCC_SANITIZER_FLAGS:= \
    -fprofile-arcs -ftest-coverage 

src/VBox/Devices/Makefile.kmk, device 부분에만 말뚝 꽂기
VBoxDD_CFLAGS.debug+=-use-afl
VBoxDD_CXXFLAGS.debug+=-use-afl
VBoxDD_LDFLAGS.debug+=-use-afl

include/iprt/mangling.h 다음 코드 삭제
:bad
s/^\(.*\)$/error: Missing # define \1 /
:bad-pad
/^.\{0,70\}$/ { s/$/ /; bbad-pad; }
s/define \([^ ]*\) \([ ]*\)$/define \1 \2RT_MANGLER(\1)/
p
q 1

편역하다


./configure --disable-hardening --disable-docs source ./env.sh kmk BUILD_TYPE=debug VBOX_WITH_GCC_SANITIZER=1

설치하다.


cd out/linux.x86/release/bin/src make sudo make install cd .. sudo depmod sudo modprobe -r vboxdrv sudo modprobe vboxdrv

실행


sudo ASAN_OPTIONS='detect_leaks=0' ./VirtualBox

추출 덮어쓰기


IDA loadfile
sudo/home/hades/tools/DynamoRIO-Linux-8.0.0-1/bin64/drrun -t drcov -- ../VirtualBox

좋은 웹페이지 즐겨찾기