Code Monkey home page Code Monkey logo

icebox's Introduction

IceBox

Build Status Build Status

Icebox is a Virtual Machine Introspection solution that enable you to stealthily trace and debug any process (kernel or user). It's based on project Winbagility.

Files which might be helpful:

Demo

demo

Project Organisation

  • fdp: Fast Debugging Protocol sources
  • icebox: Icebox sources
    • icebox: Icebox lib (core, os helpers, plugins...)
    • icebox_cmd: Program that test several features
    • samples: Bunch of examples
  • winbagility: stub to connect WinDBG to FDP
  • virtualbox: VirtualBox sources patched for FDP.

Getting Started

A full getting started was written here.

Otherwise, check our samples folder. You can build these samples with these instructions after you installed the requirements.

If your using a Windows guest you might want to set the environement variable _NT_SYMBOL_PATH to a folder that contains your guest's pdb. Please note that icebox setup will fail if it does not find your guest's kernel's pdb.

vm_resume:
vm_resume just pause then resume your VM.

cd icebox/bin/$ARCH/
./vm_resume <vm_name>

nt_writefile:
nt_writefile breaks when a process calls ntdll!NtWriteFile, and dumps what's written in a file on your host in the current directory.

cd icebox/bin/$ARCH/
./nt_writefile <vm_name> <process_name>

heapsan:
heapsan breaks ntdll memory allocations from a process and add padding before & after every pointer. It is still incomplete and doesn't do any checks yet.

cd icebox/bin/$ARCH/
./heapsan <vm_name> <process_name>

wireshark:
wireshark breaks when ndis driver reads or sends network packets and creates a wireshark trace (.pcapng). Each packet sent is associated to a callstack from kernel land to userland if necessary.

cd icebox/bin/$ARCH/
./wireshark <name> <path_to_capture_file>

icebox's People

Contributors

agatignol avatar bamiaux avatar clintrajaniemi avatar fimbure avatar fly1ngwolf avatar g4l4drim avatar laomaiweng avatar remynicol avatar silverf0x avatar trinity-1686a avatar whitehat42 avatar winbagility avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

icebox's Issues

System install of modified VirtualBox build

Hi,

I would like to install the modified VirtualBox system-wide.

Currently, the build instructions that your provide generate an archive as last step on Linux
tar -xjf tmp/VirtualBox.tar.bz2 -C linux.amd64.bin

As you may be familiar with the build system, do you know how can I install my virtualbox system-wide ?
Is there an equivalent of sudo make install to get it in /usr/local ?

Thanks.

FDP: segfault while reading physical memory in std::__atomic_base<bool>::store

Hi,

I'm facing a segfault while trying to read physical memory:

#0  std::__atomic_base<bool>::store (__m=std::memory_order_release, __i=false, this=0x370f1a00370f190) at /usr/include/c++/9/bits/atomic_base.h:397
#1  std::atomic<bool>::store (this=0x370f1a00370f190, __i=false, __m=std::memory_order_release) at /usr/include/c++/9/atomic:105
#2  0x00007ffff75a8be4 in (anonymous namespace)::ttas_spinlock_unlock (flag=0x370f1a00370f190) at FDP.cpp:97
#3  (anonymous namespace)::UnlockSHM (FDPShm=0x370f1a00370f190) at FDP.cpp:107
#4  RunCmdBuffer (pFDP=0x7ffff4bbf010, pDst=0x7ffff45bd04f, pSrc=0x7fffffffb9b0, szSize=24) at FDP.cpp:353
#5  0x00007ffff75a8d82 in FDP_ReadPhysicalMemoryInternal (pFDP=0x7ffff4bbf010, pDstBuffer=0x7ffff45bd04f "t", ReadSize=10485759, 
    PhysicalAddress=11534335) at FDP.cpp:399
#6  0x00007ffff75a8e1b in FDP_ReadPhysicalMemory (pFDP=0x7ffff4bbf010, 
    pDstBuffer=0x7ffff3bbd050 "\002\260\001\213~8\215M\370\210E\364\213E\364\211E\374\211]\370\213\207p\a", ReadSize=15728640, 
    PhysicalAddress=1048576) at FDP.cpp:413
#7  0x00007ffff769496e in fdp::FDP::read_physical_memory () from /lib/libmicrovmi.so
#8  0x00007ffff760d010 in <microvmi::driver::virtualbox::VBox as microvmi::api::Introspectable>::read_physical () from /lib/libmicrovmi.so
#9  0x00007ffff760b157 in microvmi_read_physical () from /lib/libmicrovmi.so
#10 0x00007ffff7e942e9 in DeviceMicrovmi_ReadContigious () from /home/mtarral/local/memprocfs/leechcore_device_microvmi.so
#11 0x00007ffff7c16260 in LcReadContigious_DeviceRead () from /home/mtarral/local/memprocfs/leechcore.so
#12 0x00007ffff7c1649d in LcReadContigious_Read () from /home/mtarral/local/memprocfs/leechcore.so
#13 0x00007ffff7c1670d in LcReadContigious_ReadScatterGather () from /home/mtarral/local/memprocfs/leechcore.so
#14 0x00007ffff7c16ca8 in LcReadScatter () from /home/mtarral/local/memprocfs/leechcore.so
#15 0x00007ffff7c1706e in LcRead () from /home/mtarral/local/memprocfs/leechcore.so
#16 0x00007ffff7ecde04 in VmmWinInit_DTB_FindValidate () from /home/mtarral/local/memprocfs/vmm.so
#17 0x00007ffff7eceae4 in VmmWinInit_TryInitialize () from /home/mtarral/local/memprocfs/vmm.so
#18 0x00007ffff7ecbc32 in VmmProcInitialize () from /home/mtarral/local/memprocfs/vmm.so
#19 0x00007ffff7eb04e6 in VMMDLL_InitializeEx () from /home/mtarral/local/memprocfs/vmm.so
#20 0x00007ffff7eb066d in VMMDLL_Initialize () from /home/mtarral/local/memprocfs/vmm.so
#21 0x000055555555894d in main ()

I initialized FDP with:

The last call in FDP is here

My memory dump example is still working though:
Capture d’écran de 2021-09-06 13-57-44

But this time I'm trying to bridge libmicrovmi with MemProcFS.

I wanted to check with you if this was a bug somewhere in FDP ?

Thanks !

arch problem

I found that this project just support 32 bit guest machine arch, but how to enable support for 64 bit guest machine?

Buffer overflow on too many break-points

If you set a break-point on the same address numerous times the python process crashes. This happens e.g. when you set a bp from a callback function:

addr_1 = 0x...
addr_2 = 0x...

def cb_1(): print('1')

def cb_2():
    with vm.break_on_physical(addr_1, cb_1)
        ...

with vm.break_on_physical(addr_2, cb_2)
    ...

# guest is calling addr_2 and addr_1 fiercely

The solution is rather obvious - one must keep track of addresses that already have a bp set and prevent duplicate bps. However, I thought SIGSEGV is not intended behavior so I did a little investigation.

Long story short, the buffer in struct Worker gets overflown and the co_thread pointer gets malformed. A following call to co_switch is going to kill the python process.

Ensuring resumed VM upon asynchronious termination/signaling of IceBox (python)

Suppose we have an example inspired by the getting started post.

with vm.break_on(addr, print_hit):
    while True:
        vm.exec() # blocks here

The objective is to asynchronously stop the while True loop. This can be achieved using processes or threads.

A thread solution could look like this:

# master thread
stop = False # shared
t = start_worker_thread()
do_my_stuff()
stop = True
t.join()
# worker thread
...
with vm.break_on(addr, print_hit):
    while not stop:
        vm.resume()
        vm.wait_for(3000)     # timeout 3s

The solution does not work, because the wait_for function is not exported to python and looking at the source codes it is apparent, that the function is going to block until a break point is hit (which I can't assume).

The solution with processes almost works:

# master process
p = start_worker_process()
do_my_stuff()
p.terminate()     # send a SIGTERM signal
p.join()
# worker process
...
signal.signal(signal.SIGTERM, cleanup_routine)    # set a SIGTERM handler
with vm.break_on(addr, print_hit):
    while True:
        vm.exec()    # blocks here

def cleanup_routine(signum, frame):
        vm.release()
        exit(0)

The worker process can receive SIGTERM in multiple scenarios. If it was received while waiting for break point, then the VM is not blocked and everything works well. However, if the signal was received during execution of a break point call-back function then the VM is blocked and needs to be resumed (see cleanup_routine).

The problem with this solution is that when I override a handler for SIGTERM , the signal is never delivered. I also tried sending (various) signals with kill command but no luck. If the handler is not overridden, then the library prints some logs and terminates (as expected).

The objective here is to stop the introspection and ensure the VM is running. The signals/threads/processes are only some failed attempts and maybe they are not necessary at all. Please, what should I do?

PS.: I use some synchronization primitives to ensure the worker entered the while True loop before the master sends a signal. Also, a solution where the master waits until the worker's call-back function has finished is acceptable.

add memory writes

Need to handle cases when memory is not present in physical memory

virtualbox compile error

D:\repo\icebox\third_party\virtualbox>cscript configure.vbs --with-MinGW-w64=D:/Tools/msys64/mingw64 --with-libSDL=%SDL_LIB% --with-openssl=%OPENSSL_DIR% --with-openssl32=%OPENSSL32_DIR% --with-qt5=%QT_DIR%/qtbase --with-python=c:/Python38 --with-libcurl=%CURL_DIR%/builds/libcurl-vc10-x64-release-dll-ipv6-sspi-winssl --with-libcurl32=%CURL_DIR%/builds/libcurl-vc10-x86-release-dll-ipv6-sspi-winssl
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

Shell inheritance test: OK
Source path: OK
Checking for kBuild...
Target architecture: amd64.
Host architecture: amd64.
Found kBuild: D:/repo/icebox/third_party/virtualbox/kBuild
Found kBuild binaries: D:/repo/icebox/third_party/virtualbox/kBuild/bin/win.x86
Checking for Windows DDK v7.1...
Found Windows DDK v7.1: D:/Tools/WinDDK/7600.16385.1
Checking for Visual C++...
error: Executing '' (which we believe to be the Visual C++ compiler driver) failed.

But someone said how to fix the issue:
https://forums.virtualbox.org/viewtopic.php?f=10&t=84382

This problem is caused by LANGUAGE difference of Visual C++ Compiler.

I'm a Chinese, so the compiler info is written by Chinese , but the configure.vbs uses English text info to check the compiler version.

What I've done is that I edited the configure.vbs in LINE 1067

if (InStr(1, g_strShellOutput, "编译器 16.") <= 0) _
And (InStr(1, g_strShellOutput, "编译器 17.") <= 0) then
'MsgError "The Visual C++ compiler we found ('" & strPathVC & "') isn't 10.0 or 11.0. Check the build requirements."
MsgError "g_strShellOutput is " & g_strShellOutput
exit sub
end if

'
' Ok, emit build config variables.
'
if InStr(1, g_strShellOutput, "编译器 16.") > 0 then
CfgPrint "PATH_TOOL_VCC100 := " & g_strPathVCC


In Chinese, "编译器" means compiler, after this alter, I have successfully passes the compiler check.

install.cmd error:

Hi , i tried to install with install.cmd
But i got failed error.
What to do ?

D:\Tools\icebox\vbox>install.cmd
...
...
...
USB uninstallation succeeded!

  • test -f D:/Tools/icebox/vbox/NetFltUninstall.exe
  • D:/Tools/icebox/vbox/NetFltUninstall.exe
    NetFlt is not installed currently
    uninstalled successfully
  • test -f D:/Tools/icebox/vbox/NetLwfUninstall.exe
  • D:/Tools/icebox/vbox/NetLwfUninstall.exe
    NetLwf is not installed currently
    uninstalled successfully
  • test -f D:/Tools/icebox/vbox/SUPUninstall.exe
  • D:/Tools/icebox/vbox/SUPUninstall.exe
    SUPUninstall.exe: info: uninstalled successfully
  • test != -u -a != --uninstall
  • INSTALLERS=SUPInstall.exe USBInstall.exe
  • cmd.exe /c ver
  • VER=
    Microsoft Windows [Version 10.0.18363.778]
  • echo
    Microsoft Windows [Version 10.0.18363.778]
  • kmk_sed -e s/^.[[^0-9] (.*)]/\1/ -e /^$/d
  • VER=10.0.18363.778
  • INSTALLERS=SUPInstall.exe USBInstall.exe NetLwfInstall.exe
  • test -f D:/Tools/icebox/vbox/SUPInstall.exe
  • D:/Tools/icebox/vbox/SUPInstall.exe
    SUPInstall.exe: error: installation failed. rc=VERR_LDR_IMAGE_HASH
    D:\Tools\icebox\vbox>

BTW , I got Windows 10 Pro N and Test Mode enabled for unsigned drivers.

Complicated build

Hi , i have tried to compile source as what you said from steps
below:
https://github.com/thalium/icebox/blob/master/doc/BUILD.gen.md#job-vbox_vmm-msvc

But these steps not really working.
It would be good to make "Docker" for build automation.

I fixed it by these steps:

set QT_DIR=D:\Tools\Qt\5.12.3
set OPENSSL_DIR=D:\Tools\OpenSSL-Win64
set OPENSSL32_DIR=D:\Tools\OpenSSL-Win32
set CURL_DIR=D:\Tools\curl-7.69.1
set PYTHON_DIR=D:\Tools\Anaconda3
set SDL_LIB=D:\Tools\SDL-1.2.15

set LIB=D:\Tools\MSSDK\Windows\v7.1\Lib\x64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64
set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio

cscript configure.vbs --with-MinGW-w64="D:/Tools/VBox/mingw64" --with-MinGW32="D:/msys64/mingw32/i686-w64-mingw32" --with-libSDL="D:/Tools/SDL-1.2.15/x64" --with-openssl=%OPENSSL_DIR% --with-openssl32=%OPENSSL32_DIR% --with-qt5=%QT_DIR%/qtbase --with-python=c:/Python38 --with-libcurl=%CURL_DIR%/builds/libcurl-vc10-x64-release-dll-ipv6-sspi-winssl --with-libcurl32=%CURL_DIR%/builds/libcurl-vc10-x86-release-dll-ipv6-sspi-winssl --with-vc="C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC" --with-openssl32="D:/Tools/VBox/vc-common-src/Common/Lib/openssl/10.0/x86"
env
kmk
kmk VBoxVMM VBOX_WITHOUT_HARDENING=1 VBOX_WITH_ADDITIONS= VBOX_WITH_TESTCASES= VBOX_WITH_TESTSUITE=
echo %INCLUDE%
kmk VBoxVMM VBOX_WITHOUT_HARDENING=1 VBOX_WITH_ADDITIONS= VBOX_WITH_TESTCASES= VBOX_WITH_TESTSUITE=
set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include;D:\Tools\MSSDK\Windows\v7.1\Include
set LIB=D:\Tools\MSSDK\Windows\v7.1\Lib\x64;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64
kmk VBoxVMM VBOX_WITHOUT_HARDENING=1 VBOX_WITH_ADDITIONS= VBOX_WITH_TESTCASES= VBOX_WITH_TESTSUITE=

Dont forget to include this include ammintrin.h
to D:\Tools\MSSDK\Windows\v7.1\Include

/****

  • Copyright (C) 2007-2008 Advanced Micro Devices Inc. All rights reserved.
  • The information and source code contained herein is the exclusive
  • property of Advanced Micro Devices and may not be disclosed, examined
  • or reproduced in whole or in part without explicit written authorization
  • from the company.
  • ammintrin.h - Definitions for AMD-specific intrinsics

****/

#pragma once
#ifndef __midl
#ifndef _INCLUDED_AMM
#define _INCLUDED_AMM

#if defined(_M_CEE_PURE)
#error ERROR: This file is not supported in the pure mode!
#else

#if defined __cplusplus
extern "C" { /* Intrinsics use C name-mangling. */
#endif

/*

  • Vector integer comparison control macros
    */

#define _MM_PCOMCTRL_LT 0
#define _MM_PCOMCTRL_LE 1
#define _MM_PCOMCTRL_GT 2
#define _MM_PCOMCTRL_GE 3
#define _MM_PCOMCTRL_EQ 4
#define _MM_PCOMCTRL_NEQ 5
#define _MM_PCOMCTRL_FALSE 6
#define _MM_PCOMCTRL_TRUE 7

/*

  • MACRO functions for vector integer comparisons
    */

#define _mm_comlt_epu8(v1, v2) _mm_com_epu8(v1, v2, _MM_PCOMCTRL_LT)
#define _mm_comle_epu8(v1, v2) _mm_com_epu8(v1, v2, _MM_PCOMCTRL_LE)
#define _mm_comgt_epu8(v1, v2) _mm_com_epu8(v1, v2, _MM_PCOMCTRL_GT)
#define _mm_comge_epu8(v1, v2) _mm_com_epu8(v1, v2, _MM_PCOMCTRL_GE)
#define _mm_comeq_epu8(v1, v2) _mm_com_epu8(v1, v2, _MM_PCOMCTRL_EQ)
#define _mm_comneq_epu8(v1, v2) _mm_com_epu8(v1, v2, _MM_PCOMCTRL_NEQ)
#define _mm_comfalse_epu8(v1, v2) _mm_com_epu8(v1, v2, _MM_PCOMCTRL_FALSE)
#define _mm_comtrue_epu8(v1, v2) _mm_com_epu8(v1, v2, _MM_PCOMCTRL_TRUE)

#define _mm_comlt_epu16(v1, v2) _mm_com_epu16(v1, v2, _MM_PCOMCTRL_LT)
#define _mm_comle_epu16(v1, v2) _mm_com_epu16(v1, v2, _MM_PCOMCTRL_LE)
#define _mm_comgt_epu16(v1, v2) _mm_com_epu16(v1, v2, _MM_PCOMCTRL_GT)
#define _mm_comge_epu16(v1, v2) _mm_com_epu16(v1, v2, _MM_PCOMCTRL_GE)
#define _mm_comeq_epu16(v1, v2) _mm_com_epu16(v1, v2, _MM_PCOMCTRL_EQ)
#define _mm_comneq_epu16(v1, v2) _mm_com_epu16(v1, v2, _MM_PCOMCTRL_NEQ)
#define _mm_comfalse_epu16(v1, v2) _mm_com_epu16(v1, v2, _MM_PCOMCTRL_FALSE)
#define _mm_comtrue_epu16(v1, v2) _mm_com_epu16(v1, v2, _MM_PCOMCTRL_TRUE)

#define _mm_comlt_epu32(v1, v2) _mm_com_epu32(v1, v2, _MM_PCOMCTRL_LT)
#define _mm_comle_epu32(v1, v2) _mm_com_epu32(v1, v2, _MM_PCOMCTRL_LE)
#define _mm_comgt_epu32(v1, v2) _mm_com_epu32(v1, v2, _MM_PCOMCTRL_GT)
#define _mm_comge_epu32(v1, v2) _mm_com_epu32(v1, v2, _MM_PCOMCTRL_GE)
#define _mm_comeq_epu32(v1, v2) _mm_com_epu32(v1, v2, _MM_PCOMCTRL_EQ)
#define _mm_comneq_epu32(v1, v2) _mm_com_epu32(v1, v2, _MM_PCOMCTRL_NEQ)
#define _mm_comfalse_epu32(v1, v2) _mm_com_epu32(v1, v2, _MM_PCOMCTRL_FALSE)
#define _mm_comtrue_epu32(v1, v2) _mm_com_epu32(v1, v2, _MM_PCOMCTRL_TRUE)

#define _mm_comlt_epu64(v1, v2) _mm_com_epu64(v1, v2, _MM_PCOMCTRL_LT)
#define _mm_comle_epu64(v1, v2) _mm_com_epu64(v1, v2, _MM_PCOMCTRL_LE)
#define _mm_comgt_epu64(v1, v2) _mm_com_epu64(v1, v2, _MM_PCOMCTRL_GT)
#define _mm_comge_epu64(v1, v2) _mm_com_epu64(v1, v2, _MM_PCOMCTRL_GE)
#define _mm_comeq_epu64(v1, v2) _mm_com_epu64(v1, v2, _MM_PCOMCTRL_EQ)
#define _mm_comneq_epu64(v1, v2) _mm_com_epu64(v1, v2, _MM_PCOMCTRL_NEQ)
#define _mm_comfalse_epu64(v1, v2) _mm_com_epu64(v1, v2, _MM_PCOMCTRL_FALSE)
#define _mm_comtrue_epu64(v1, v2) _mm_com_epu64(v1, v2, _MM_PCOMCTRL_TRUE)

#define _mm_comlt_epi8(v1, v2) _mm_com_epi8(v1, v2, _MM_PCOMCTRL_LT)
#define _mm_comle_epi8(v1, v2) _mm_com_epi8(v1, v2, _MM_PCOMCTRL_LE)
#define _mm_comgt_epi8(v1, v2) _mm_com_epi8(v1, v2, _MM_PCOMCTRL_GT)
#define _mm_comge_epi8(v1, v2) _mm_com_epi8(v1, v2, _MM_PCOMCTRL_GE)
#define _mm_comeq_epi8(v1, v2) _mm_com_epi8(v1, v2, _MM_PCOMCTRL_EQ)
#define _mm_comneq_epi8(v1, v2) _mm_com_epi8(v1, v2, _MM_PCOMCTRL_NEQ)
#define _mm_comfalse_epi8(v1, v2) _mm_com_epi8(v1, v2, _MM_PCOMCTRL_FALSE)
#define _mm_comtrue_epi8(v1, v2) _mm_com_epi8(v1, v2, _MM_PCOMCTRL_TRUE)

#define _mm_comlt_epi16(v1, v2) _mm_com_epi16(v1, v2, _MM_PCOMCTRL_LT)
#define _mm_comle_epi16(v1, v2) _mm_com_epi16(v1, v2, _MM_PCOMCTRL_LE)
#define _mm_comgt_epi16(v1, v2) _mm_com_epi16(v1, v2, _MM_PCOMCTRL_GT)
#define _mm_comge_epi16(v1, v2) _mm_com_epi16(v1, v2, _MM_PCOMCTRL_GE)
#define _mm_comeq_epi16(v1, v2) _mm_com_epi16(v1, v2, _MM_PCOMCTRL_EQ)
#define _mm_comneq_epi16(v1, v2) _mm_com_epi16(v1, v2, _MM_PCOMCTRL_NEQ)
#define _mm_comfalse_epi16(v1, v2) _mm_com_epi16(v1, v2, _MM_PCOMCTRL_FALSE)
#define _mm_comtrue_epi16(v1, v2) _mm_com_epi16(v1, v2, _MM_PCOMCTRL_TRUE)

#define _mm_comlt_epi32(v1, v2) _mm_com_epi32(v1, v2, _MM_PCOMCTRL_LT)
#define _mm_comle_epi32(v1, v2) _mm_com_epi32(v1, v2, _MM_PCOMCTRL_LE)
#define _mm_comgt_epi32(v1, v2) _mm_com_epi32(v1, v2, _MM_PCOMCTRL_GT)
#define _mm_comge_epi32(v1, v2) _mm_com_epi32(v1, v2, _MM_PCOMCTRL_GE)
#define _mm_comeq_epi32(v1, v2) _mm_com_epi32(v1, v2, _MM_PCOMCTRL_EQ)
#define _mm_comneq_epi32(v1, v2) _mm_com_epi32(v1, v2, _MM_PCOMCTRL_NEQ)
#define _mm_comfalse_epi32(v1, v2) _mm_com_epi32(v1, v2, _MM_PCOMCTRL_FALSE)
#define _mm_comtrue_epi32(v1, v2) _mm_com_epi32(v1, v2, _MM_PCOMCTRL_TRUE)

#define _mm_comlt_epi64(v1, v2) _mm_com_epi64(v1, v2, _MM_PCOMCTRL_LT)
#define _mm_comle_epi64(v1, v2) _mm_com_epi64(v1, v2, _MM_PCOMCTRL_LE)
#define _mm_comgt_epi64(v1, v2) _mm_com_epi64(v1, v2, _MM_PCOMCTRL_GT)
#define _mm_comge_epi64(v1, v2) _mm_com_epi64(v1, v2, _MM_PCOMCTRL_GE)
#define _mm_comeq_epi64(v1, v2) _mm_com_epi64(v1, v2, _MM_PCOMCTRL_EQ)
#define _mm_comneq_epi64(v1, v2) _mm_com_epi64(v1, v2, _MM_PCOMCTRL_NEQ)
#define _mm_comfalse_epi64(v1, v2) _mm_com_epi64(v1, v2, _MM_PCOMCTRL_FALSE)
#define _mm_comtrue_epi64(v1, v2) _mm_com_epi64(v1, v2, _MM_PCOMCTRL_TRUE)

/* SSE5 intrinsics */

/* Float/double multiply-accumulate */
__m128 _mm_macc_ps(__m128, __m128, __m128);
__m128d _mm_macc_pd(__m128d, __m128d, __m128d);
__m128 _mm_macc_ss(__m128, __m128, __m128);
__m128d _mm_macc_sd(__m128d, __m128d, __m128d);
__m128 _mm_maddsub_ps(__m128, __m128, __m128);
__m128d _mm_maddsub_pd(__m128d, __m128d, __m128d);
__m128 _mm_msubadd_ps(__m128, __m128, __m128);
__m128d _mm_msubadd_pd(__m128d, __m128d, __m128d);
__m128 _mm_msub_ps(__m128, __m128, __m128);
__m128d _mm_msub_pd(__m128d, __m128d, __m128d);
__m128 _mm_msub_ss(__m128, __m128, __m128);
__m128d _mm_msub_sd(__m128d, __m128d, __m128d);
__m128 _mm_nmacc_ps(__m128, __m128, __m128);
__m128d _mm_nmacc_pd(__m128d, __m128d, __m128d);
__m128 _mm_nmacc_ss(__m128, __m128, __m128);
__m128d _mm_nmacc_sd(__m128d, __m128d, __m128d);
__m128 _mm_nmsub_ps(__m128, __m128, __m128);
__m128d _mm_nmsub_pd(__m128d, __m128d, __m128d);
__m128 _mm_nmsub_ss(__m128, __m128, __m128);
__m128d _mm_nmsub_sd(__m128d, __m128d, __m128d);

/* Integer multiply-accumulate */
__m128i _mm_maccs_epi16(__m128i, __m128i, __m128i);
__m128i _mm_macc_epi16(__m128i, __m128i, __m128i);
__m128i _mm_maccsd_epi16(__m128i, __m128i, __m128i);
__m128i _mm_maccd_epi16(__m128i, __m128i, __m128i);
__m128i _mm_maccs_epi32(__m128i, __m128i, __m128i);
__m128i _mm_macc_epi32(__m128i, __m128i, __m128i);
__m128i _mm_maccslo_epi32(__m128i, __m128i, __m128i);
__m128i _mm_macclo_epi32(__m128i, __m128i, __m128i);
__m128i _mm_maccshi_epi32(__m128i, __m128i, __m128i);
__m128i _mm_macchi_epi32(__m128i, __m128i, __m128i);
__m128i _mm_maddsd_epi16(__m128i, __m128i, __m128i);
__m128i _mm_maddd_epi16(__m128i, __m128i, __m128i);

/* Horizontal add/subtract */
__m128i _mm_haddw_epi8(__m128i);
__m128i _mm_haddd_epi8(__m128i);
__m128i _mm_haddq_epi8(__m128i);
__m128i _mm_haddd_epi16(__m128i);
__m128i _mm_haddq_epi16(__m128i);
__m128i _mm_haddq_epi32(__m128i);
__m128i _mm_haddw_epu8(__m128i);
__m128i _mm_haddd_epu8(__m128i);
__m128i _mm_haddq_epu8(__m128i);
__m128i _mm_haddd_epu16(__m128i);
__m128i _mm_haddq_epu16(__m128i);
__m128i _mm_haddq_epu32(__m128i);
__m128i _mm_hsubw_epi8(__m128i);
__m128i _mm_hsubd_epi16(__m128i);
__m128i _mm_hsubq_epi32(__m128i);

/* Vector conditional moves */
__m128i _mm_cmov_si128(__m128i, __m128i, __m128i);
__m128i _mm_perm_epi8(__m128i, __m128i, __m128i);

/* Vector shifts and rotates */
__m128i _mm_rot_epi8(__m128i, __m128i);
__m128i _mm_rot_epi16(__m128i, __m128i);
__m128i _mm_rot_epi32(__m128i, __m128i);
__m128i _mm_rot_epi64(__m128i, __m128i);
__m128i _mm_roti_epi8(__m128i, int);
__m128i _mm_roti_epi16(__m128i, int);
__m128i _mm_roti_epi32(__m128i, int);
__m128i _mm_roti_epi64(__m128i, int);
__m128i _mm_shl_epi8(__m128i, __m128i);
__m128i _mm_shl_epi16(__m128i, __m128i);
__m128i _mm_shl_epi32(__m128i, __m128i);
__m128i _mm_shl_epi64(__m128i, __m128i);
__m128i _mm_sha_epi8(__m128i, __m128i);
__m128i _mm_sha_epi16(__m128i, __m128i);
__m128i _mm_sha_epi32(__m128i, __m128i);
__m128i _mm_sha_epi64(__m128i, __m128i);

/* Vector integer comparisons */

__m128i _mm_com_epu8(__m128i, __m128i, int);
__m128i _mm_com_epu16(__m128i, __m128i, int);
__m128i _mm_com_epu32(__m128i, __m128i, int);
__m128i _mm_com_epu64(__m128i, __m128i, int);
__m128i _mm_com_epi8(__m128i, __m128i, int);
__m128i _mm_com_epi16(__m128i, __m128i, int);
__m128i _mm_com_epi32(__m128i, __m128i, int);
__m128i _mm_com_epi64(__m128i, __m128i, int);

/* Precision control */

__m128 _mm_frcz_ps(__m128);
__m128d _mm_frcz_pd(__m128d);
__m128 _mm_frcz_ss(__m128, __m128);
__m128d _mm_frcz_sd(__m128d, __m128d);

/* Control values for permute2 intrinsics /
#define _MM_PERMUTE2_COPY 0 /
just copy the selected value /
/
Note that using the constant 1 would have the same effect as 0 /
#define _MM_PERMUTE2_ZEROIF1 2 /
zero selected value if src3 bit is 1 /
#define _MM_PERMUTE2_ZEROIF0 3 /
zero selected value if src3 bit is 3 */

/* Permutation */
__m128 _mm_permute2_ps(__m128, __m128, __m128i, int);
__m128d _mm_permute2_pd(__m128d, __m128d, __m128i, int);

/* YMM versions */
__m256 _mm256_macc_ps(__m256, __m256, __m256);
__m256d _mm256_macc_pd(__m256d, __m256d, __m256d);
__m256 _mm256_maddsub_ps(__m256, __m256, __m256);
__m256d _mm256_maddsub_pd(__m256d, __m256d, __m256d);
__m256 _mm256_msubadd_ps(__m256, __m256, __m256);
__m256d _mm256_msubadd_pd(__m256d, __m256d, __m256d);
__m256 _mm256_msub_ps(__m256, __m256, __m256);
__m256d _mm256_msub_pd(__m256d, __m256d, __m256d);
__m256 _mm256_nmacc_ps(__m256, __m256, __m256);
__m256d _mm256_nmacc_pd(__m256d, __m256d, __m256d);
__m256 _mm256_nmsub_ps(__m256, __m256, __m256);
__m256d _mm256_nmsub_pd(__m256d, __m256d, __m256d);
__m256i _mm256_cmov_si256(__m256i, __m256i, __m256i);
__m256 _mm256_frcz_ps(__m256);
__m256d _mm256_frcz_pd(__m256d);
__m256 _mm256_permute2_ps(__m256, __m256, __m256i, int);
__m256d _mm256_permute2_pd(__m256d, __m256d, __m256i, int);

/* LWP intrinsics */
void __llwpcb(void *);
void *__slwpcb();
void __lwpval32(unsigned int, unsigned int, unsigned int);
void __lwpval64(unsigned __int64, unsigned int, unsigned int);
unsigned char __lwpins32(unsigned int, unsigned int, unsigned int);
unsigned char __lwpins64(unsigned __int64, unsigned int, unsigned int);

#if defined __cplusplus
}; /* End "C" /
#endif /
__cplusplus */

#endif /* _M_CEE_PURE /
#endif /
INCLUDED_AMM /
#endif /
__midl */

vboxdrv module compilation failed

Hi,

I'm building Icebox on my host, Ubuntu 19.10, and I had a failure at the step where I have to compile the kernel module:

$APT_UPDATE && $APT_INSTALL acpica-tools build-essential g++-multilib gcc-multilib libcap-dev libcurl4-openssl-dev libdevmapper-dev libidl-dev libelf-dev libopus-dev libpam0g-dev libqt5x11extras5-dev libsdl1.2-dev libsdl2-dev libssl-dev libvpx-dev libxml2-dev libxmu-dev linux-headers-$(uname -r) linux-libc-dev makeself p7zip-full python-dev qt5-default qttools5-dev-tools xsltproc > /dev/null
cd third_party/virtualbox/include
ln -s ../../../src/FDP
cd ..
./configure --disable-hardening --disable-docs --disable-java
source env.sh
kmk VBOX_WITH_ADDITIONS= VBOX_WITH_TESTCASES= VBOX_WITH_TESTSUITE= VBOX_DO_STRIP=1
cd out/linux.amd64/release/bin/src
make <-- fails here
make install

Output

=== Building 'vboxdrv' module ===
make[1] : on entre dans le répertoire « /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv »
make V= CONFIG_MODULE_SIG= -C /lib/modules/5.3.0-19-generic/build SUBDIRS=/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv SRCROOT=/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv -j12 modules
make[2] : on entre dans le répertoire « /usr/src/linux-headers-5.3.0-19-generic »
Makefile:227: ================= WARNING ================
Makefile:228: 'SUBDIRS' will be removed after Linux 5.3
Makefile:229: 
Makefile:230: If you are building an individual subdirectory
Makefile:231: in the kernel tree, you can do like this:
Makefile:232: $ make path/to/dir/you/want/to/build/
Makefile:233: (Do not forget the trailing slash)
Makefile:234: 
Makefile:235: If you are building an external module,
Makefile:236: Please use 'M=' or 'KBUILD_EXTMOD' instead
Makefile:237: ==========================================
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/linux/SUPDrv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/SUPDrv.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/SUPDrvGip.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/SUPDrvSem.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/SUPDrvTracer.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/SUPLibAll.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/alloc-r0drv.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/initterm-r0drv.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/memobj-r0drv.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/mpnotification-r0drv.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/powernotification-r0drv.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/assert-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/alloc-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/initterm-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memobj-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/mp-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/mpnotification-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/process-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/rtStrFormatKernelAddress-r0drv-linux.o
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/linux/SUPDrv-linux.o: warning: objtool: VBoxDrvLinuxIOCtl_5_2_22()+0x96: call to VBoxHost_RTR0MemUserCopyFrom() with UACCESS enabled
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/semevent-r0drv-linux.o
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/SUPDrvTracer.o: warning: objtool: .text+0x7: indirect jump found in RETPOLINE build
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/SUPDrvTracer.o: warning: objtool: supdrvTracerProbeFireStub() is missing an ELF size annotation
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/semeventmulti-r0drv-linux.o
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/semfastmutex-r0drv-linux.o
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memobj-r0drv-linux.c: In function ‘rtR0MemObjLinuxDoMmap’:
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memobj-r0drv-linux.c:214:58: error: ‘MAP_SHARED’ undeclared (first use in this function); did you mean ‘VM_SHARED’?
  214 |         ulAddr = vm_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0);
      |                                                          ^~~~~~~~~~
      |                                                          VM_SHARED
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memobj-r0drv-linux.c:214:58: note: each undeclared identifier is reported only once for each function it appears in
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c: In function ‘VBoxHost_RTR0MemUserIsValidAddr’:
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c:69:55: error: macro "access_ok" passed 3 arguments, but takes just 2
   69 |     bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1);
      |                                                       ^
In file included from ./include/linux/uaccess.h:11,
                 from ./arch/x86/include/asm/fpu/xstate.h:5,
                 from ./arch/x86/include/asm/pgtable.h:26,
                 from ./include/linux/mm.h:99,
                 from /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/the-linux-kernel.h:98,
                 from /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c:31:
./arch/x86/include/asm/uaccess.h:93: note: macro "access_ok" defined here
   93 | #define access_ok(addr, size)     \
      | 
  CC [M]  /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/semmutex-r0drv-linux.o
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c:69:16: error: ‘access_ok’ undeclared (first use in this function)
   69 |     bool fRc = access_ok(VERIFY_READ, (void *)R3Ptr, 1);
      |                ^~~~~~~~~
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.c:69:16: note: each undeclared identifier is reported only once for each function it appears in
make[3]: *** [scripts/Makefile.build:290: /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memobj-r0drv-linux.o] Error 1
make[3]: *** Attente des tâches non terminées....
make[3]: *** [scripts/Makefile.build:290: /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o] Error 1
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/mp-r0drv-linux.c: In function ‘VBoxHost_RTMpOnAll’:
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/mp-r0drv-linux.c:280:12: error: void value not ignored as it ought to be
  280 |         rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* wait */);
      |            ^
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/mp-r0drv-linux.c: In function ‘VBoxHost_RTMpOnOthers’:
/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/mp-r0drv-linux.c:330:8: error: void value not ignored as it ought to be
  330 |     rc = smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */);
      |        ^
make[3]: *** [scripts/Makefile.build:290: /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/r0drv/linux/mp-r0drv-linux.o] Error 1
make[2]: *** [Makefile:1653: _module_/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv] Error 2
make[2] : on quitte le répertoire « /usr/src/linux-headers-5.3.0-19-generic »
make[1]: *** [/home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv/Makefile.include.footer:101: vboxdrv] Error 2
make[1] : on quitte le répertoire « /home/wenzel/Projets/icebox/third_party/virtualbox/out/linux.amd64/release/bin/src/vboxdrv »
make: *** [Makefile:49: all] Error 2

I'm not sure what is going on here, since there are multiple compilation failures.

I built this on icebox master, pulled 30 minutes ago.

Thanks.

Failed to build kernel modules: build_in_tmp not found

Hi,

I tried to follow the build procedure described in BUILD

And after unpacking the tarball, I have the following content:
Capture d’écran de 2019-08-23 20-05-48

However, when I tried to load the kernel modules with sudo ./vboxdrv.sh start, it fails at the build stage:
Capture d’écran de 2019-08-23 20-07-00

The directory linux.amd64.bin/src/build_in_tmp is not found.

Did i miss a step ?
I am using Vagrant and Ansible to setup Icebox, you can review the virtualbox main task
responsible for building Virtualbox here:
https://github.com/Wenzel/vagrant-icebox/blob/master/ansible/roles/virtualbox/tasks/main.yml

Best regards,
Mathieu

Windows 1 core insanely slow

Hi , i have installed icebox on Windows host.
It only supports 1 core.And its insanely slow to make analysis.
When will you support multiple cores ?

Question

Do I have to set _NT_SYMBOL_PATH in guest or in host? :)
nt: unable to find kernel -- what does it mean?

Missing includes in FDP.h to be self-sufficient

Hi,

I just noticed that FDP.h is not self-sufficient as a header, since it uses types that it doesn't declare:

/usr/local/include/FDP_enum.h:37:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP_enum.h:46:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP_enum.h:57:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP_enum.h:68:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP_enum.h:124:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP.h:50:9: error: unknown type name 'uint64_t'
/usr/local/include/FDP.h:51:9: error: unknown type name 'uint64_t'
/usr/local/include/FDP.h:56:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP.h:57:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP.h:58:9: error: unknown type name 'uint8_t'
/usr/local/include/FDP.h:59:9: error: unknown type name 'uint8_t'
/usr/local/include/FDP.h:60:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP.h:61:9: error: unknown type name 'uint32_t'
/usr/local/include/FDP.h:62:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP.h:63:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP.h:64:9: error: unknown type name 'uint32_t'
/usr/local/include/FDP.h:65:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP.h:66:9: error: unknown type name 'uint16_t'
/usr/local/include/FDP.h:67:9: error: unknown type name 'uint32_t'
fatal error: too many errors emitted, stopping now [-ferror-limit=]
/usr/local/include/FDP_enum.h:37:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP_enum.h:46:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP_enum.h:57:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP_enum.h:68:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP_enum.h:124:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP.h:50:9: error: unknown type name 'uint64_t', err: true
/usr/local/include/FDP.h:51:9: error: unknown type name 'uint64_t', err: true
/usr/local/include/FDP.h:56:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP.h:57:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP.h:58:9: error: unknown type name 'uint8_t', err: true
/usr/local/include/FDP.h:59:9: error: unknown type name 'uint8_t', err: true
/usr/local/include/FDP.h:60:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP.h:61:9: error: unknown type name 'uint32_t', err: true
/usr/local/include/FDP.h:62:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP.h:63:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP.h:64:9: error: unknown type name 'uint32_t', err: true
/usr/local/include/FDP.h:65:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP.h:66:9: error: unknown type name 'uint16_t', err: true
/usr/local/include/FDP.h:67:9: error: unknown type name 'uint32_t', err: true

Basically it just misses

  • inttypes.h
  • stdbool.h

If you care too fix these small issue.

Thanks.

How to use as Python in C++ ?

I want to use these library for C++ , so i can port it to java.
Is there any C++ Library how to use icebox ?

Also , can i use this icebox with android ?
any example for that ?

/////////////////// Need C++ Equavilent /////////////////////////////
import icebox

attach to 'win10' VM

vm = icebox.attach("win10")

control vm execution

vm.resume()
vm.pause()
vm.step_once()

read/write registers

rax, rbx, ..., rbp, rip

print(hex(vm.registers.rip))

rax = vm.registers.rax
vm.registers.rax += 1
vm.registers.rax = rax

read/write MSR registers

print(hex(vm.msr.lstar))

/////////////////// Need C++ Equavilent /////////////////////////////

cannot find smp_lock.h

while compiling virtualbox kernel module the make report errors:
linux/smp_lock.h: No such file or directory.
Ubuntu 20.04.1 kernel 5.11.0-27-generic

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.