s2e-block: грязные сектора при закрытии:11104 Идентификатор конечного узла 0 (экземплярный слот 0)

Я попытался протестировать OpenVSwitch с помощью S2E. Скрипт установки OpenVSwitch я написал в bootstrap.sh. Образ на виртуальной машине qemu такой же, как образ на хост-машине, поэтому исполняемый файл, скомпилированный на хост-машине, также должен выполняться на виртуальной машине. Итак, после того, как я установил OpenVSwitch и запустил ovsdb-server и ovs-vsctl, ovs-vswitchd должен успешно работать, но я получил следующую ошибку:

      18 [State 0] BaseInstructions: Killing state 0
18 [State 0] Terminating state: State was terminated by opcode
            message: "bootstrap terminated"
            status: 0x0
18 [State 0] TestCaseGenerator: generating test case at address 0x40717d
18 [State 0] TestCaseGenerator: All states were terminated
qemu-system-x86_64: terminating on signal 15 from pid 42128 (/home/lz/s2e/install/bin/qemu-system-x86_64)
s2e-block: dirty sectors on close:11104
Terminating node id 0 (instance slot 0)

bootstrap.sh и скрипт установки ovs-install.sh выглядят следующим образом:

bootstrap.sh

      #!/bin/bash
#
# This file was automatically generated by s2e-env at 2022-09-29 14:22:53.271106
#
# This bootstrap script is used to control the execution of the target program
# in an S2E guest VM.
#
# When you run launch-s2e.sh, the guest VM calls s2eget to fetch and execute
# this bootstrap script. This bootstrap script and the S2E config file
# determine how the target program is analyzed.
#

set -x



mkdir -p guest-tools32
TARGET_TOOLS32_ROOT=guest-tools32


mkdir -p guest-tools64
TARGET_TOOLS64_ROOT=guest-tools64



# 64-bit tools take priority on 64-bit architectures
TARGET_TOOLS_ROOT=${TARGET_TOOLS64_ROOT}



# To save the hassle of rebuilding guest images every time you update S2E's guest tools,
# the first thing that we do is get the latest versions of the guest tools.
function update_common_tools {
    local OUR_S2ECMD

    OUR_S2ECMD=${S2ECMD}

    # First, download the common tools


    for TOOL in ${COMMON_TOOLS}; do
        ${OUR_S2ECMD} get ${TARGET_TOOLS_ROOT}/${TOOL}
        if [ ! -f ${TOOL} ]; then
          ${OUR_S2ECMD} kill 0 "Could not get ${TOOL} from the host. Make sure that guest tools are installed properly."
          exit 1
        fi
        chmod +x ${TOOL}
    done
}

function update_target_tools {
    for TOOL in $(target_tools); do
        ${S2ECMD} get ${TOOL} ${TOOL}
        chmod +x ${TOOL}
    done
}

function prepare_target {
    # Make sure that the target is executable
    chmod +x "$1"
}





function get_ramdisk_root {
  echo '/tmp/'
}

function copy_file {
  SOURCE="$1"
  DEST="$2"

  cp ${SOURCE} ${DEST}

}

# This prepares the symbolic file inputs.
# This function takes as input a seed file name and makes its content symbolic according to the symranges file.
# It is up to the host to prepare all the required symbolic files. The bootstrap file does not make files
# symbolic on its own.
function download_symbolic_file {
  SYMBOLIC_FILE="$1"
  RAMDISK_ROOT="$(get_ramdisk_root)"

  ${S2ECMD} get "${SYMBOLIC_FILE}"
  if [ ! -f "${SYMBOLIC_FILE}" ]; then
    ${S2ECMD} kill 1 "Could not fetch symbolic file ${SYMBOLIC_FILE} from host"
  fi

  copy_file "${SYMBOLIC_FILE}" "${RAMDISK_ROOT}"

  SYMRANGES_FILE="${SYMBOLIC_FILE}.symranges"

  ${S2ECMD} get "${SYMRANGES_FILE}" > /dev/null

  # Make the file symbolic
  if [ -f "${SYMRANGES_FILE}" ]; then
     export S2E_SYMFILE_RANGES="${SYMRANGES_FILE}"
  fi


  # The symbolic file will be split into symbolic variables of up to 4k bytes each.
  ${S2ECMD} symbfile 4096 "${RAMDISK_ROOT}${SYMBOLIC_FILE}" > /dev/null

}

function download_symbolic_files {
  for f in "$@"; do
    download_symbolic_file "${f}"
  done
}



# This function executes the target program given in arguments.
#
# There are two versions of this function:
#    - without seed support
#    - with seed support (-s argument when creating projects with s2e_env)
function execute {
    local TARGET

    TARGET="$1"
    shift

    execute_target "${TARGET}" "$@"
}



###############################################################################
# This section contains target-specific code

function make_seeds_symbolic {
    echo 1
}

# This function executes the target program.
# You can customize it if your program needs special invocation,
# custom symbolic arguments, etc.
function execute_target {
    local TARGET

    TARGET="$1"
    shift
    #wo tian jia de
    sudo ./install_ovs.sh


    S2E_SO="${TARGET_TOOLS64_ROOT}/s2e.so"



    # ovs-vswitchd is dynamically linked, so s2e.so has been preloaded to
    # provide symbolic arguments to the target if required. You can do so by
    # using the ``S2E_SYM_ARGS`` environment variable as required
    S2E_SYM_ARGS="" LD_PRELOAD="${S2E_SO}" "${TARGET}" "$@" > /dev/null 2> /dev/null

}

# Nothing more to initialize on Linux
function target_init {
    # Start the LinuxMonitor kernel module
    sudo modprobe s2e
}

# Returns Linux-specific tools
function target_tools {

    echo "${TARGET_TOOLS32_ROOT}/s2e.so" "${TARGET_TOOLS64_ROOT}/s2e.so"

}

S2ECMD=./s2ecmd
COMMON_TOOLS="s2ecmd"

###############################################################################


update_common_tools
update_target_tools



# Don't print crashes in the syslog. This prevents unnecessary forking in the
# kernel
sudo sysctl -w debug.exception-trace=0

# Prevent core dumps from being created. This prevents unnecessary forking in
# the kernel
ulimit -c 0

# Ensure that /tmp is mounted in memory (if you built the image using s2e-env
# then this should already be the case. But better to be safe than sorry!)
if ! mount | grep "/tmp type tmpfs"; then
    sudo mount -t tmpfs -osize=10m tmpfs /tmp
fi

# Need to disable swap, otherwise there will be forced concretization if the
# system swaps out symbolic data to disk.
sudo swapoff -a



target_init

# Download the target file to analyze
${S2ECMD} get "ovs-vswitchd"
#wo tian jia de
#${S2ECMD} get "ovsdb-server"
#${S2ECMD} get "ovs-vsctl"

${S2ECMD} get "openvswitch-3.0.0.tar.gz"
${S2ECMD} get "install_ovs.sh"


download_symbolic_files



# Run the analysis



    TARGET_PATH='./ovs-vswitchd'




prepare_target "${TARGET_PATH}"
#wo tian jia de
#prepare_target "./ovsdb-server"
#prepare_target "./ovs-vsctl"
prepare_target "openvswitch-3.0.0.tar.gz"
prepare_target "install_ovs.sh"



execute "${TARGET_PATH}" --pidfile --detach --log-file

ovs-install.sh

      #!/bin/bash
tar zxvf openvswitch-3.0.0.tar.gz
cd openvswitch-3.0.0
./configure 
make -j4
sudo make install
export PATH=$PATH:/usr/local/share/openvswitch/scripts
sudo mkdir -p /usr/local/etc/openvswitch
sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
#/usr/local/share/openvswitch/scripts/ovs-ctl --no-ovs-vswitchd start
sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach
sudo ovs-vsctl --no-wait init
#sudo ovs-vswitchd --pidfile --detach 

Кто-нибудь может сказать мне, как это исправить? Или OpenVSwitch просто не тестируется S2E?

0 ответов

Другие вопросы по тегам