From 6b2d2a2e030574e58df9f1d5ba6e09e7fdf7685b Mon Sep 17 00:00:00 2001 From: jdh8d <jdh8d@git.zephyr-software.com> Date: Fri, 12 May 2017 17:04:06 +0000 Subject: [PATCH] Updates for VGT Former-commit-id: 30aa1548b584864dfcf1f65b7d2c3b41b1b408ca --- .gitattributes | 1 + tools/cfar.sh | 2 +- ...obNos_probBilr_probP1_probHeaprand_zipr.sh | 5 +- ...tNoc_structP1Canaries_probHeaprand_zipr.sh | 4 +- .../cfar_configs/cfar_probNog_phase1_zipr.sh | 2 +- ...obNos_probBilr_probP1_probHeaprand_zipr.sh | 2 +- .../cfar_probNog_probSS_phase1_zipr.sh | 2 +- .../cfar_probNog_probSS_probDS_phase1_zipr.sh | 2 +- tools/cfar_configs/cfar_scfi_zipr.sh | 2 +- .../cfar_structNogOF_phase1_zipr.sh | 2 +- .../cfar_structNogOF_structSS_phase1_zipr.sh | 2 +- ...structNogOF_structSS_probDS_phase1_zipr.sh | 2 +- .../cfar_structNog_phase1_zipr.sh | 2 +- ...h_structNos_structNoc_probHeaprand_zipr.sh | 2 +- ...tNoc_structP1Canaries_probHeaprand_zipr.sh | 2 +- tools/generate_mvee_package.sh | 5 +- tools/vgt.sh | 491 ++++++++++++++++++ 17 files changed, 512 insertions(+), 18 deletions(-) create mode 100755 tools/vgt.sh diff --git a/.gitattributes b/.gitattributes index ebd379523..6cf0b633e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3894,6 +3894,7 @@ tools/signatures/sqlite.sigs -text tools/test_controller.sh -text tools/update_env_var.sh -text tools/validate.sh -text +tools/vgt.sh -text tools/zanalyze.sh -text tools/zipr_ce.sh -text web_server/.lighttpdpassword -text diff --git a/tools/cfar.sh b/tools/cfar.sh index dd56ac562..a7e9fb288 100755 --- a/tools/cfar.sh +++ b/tools/cfar.sh @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash source $(dirname $0)/ps_wrapper.source $0 diff --git a/tools/cfar_configs/cfar_partProbNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_partProbNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh index f67024ba7..c62b75136 100755 --- a/tools/cfar_configs/cfar_partProbNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh +++ b/tools/cfar_configs/cfar_partProbNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh @@ -3,9 +3,10 @@ source $(dirname $0)/../ps_wrapper.source $0 + file $2|grep "ELF 64-bit LSB executable" > /dev/null if [ $? = 0 ]; then - $PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step diehard=on --step noh=on --step nol=on + $PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step diehard=on --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp else - $PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step diehard=on --step noh=on --step nol=on + $PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step diehard=on --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp fi diff --git a/tools/cfar_configs/cfar_partStructNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_partStructNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh index beb2d3648..f63490618 100755 --- a/tools/cfar_configs/cfar_partStructNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh +++ b/tools/cfar_configs/cfar_partStructNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh @@ -4,7 +4,7 @@ source $(dirname $0)/../ps_wrapper.source $0 file $2|grep "ELF 64-bit LSB executable" > /dev/null if [ $? = 0 ]; then - $PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step diehard=on --step noh=on --step nol=on + $PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step diehard=on --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp else - $PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step diehard=on --step noh=on --step nol=on + $PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step diehard=on --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp fi diff --git a/tools/cfar_configs/cfar_probNog_phase1_zipr.sh b/tools/cfar_configs/cfar_probNog_phase1_zipr.sh index 8563eb45c..69fc2b9b8 100755 --- a/tools/cfar_configs/cfar_probNog_phase1_zipr.sh +++ b/tools/cfar_configs/cfar_probNog_phase1_zipr.sh @@ -2,5 +2,5 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_probNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_probNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh index 3ab21ad92..d88cf783b 100755 --- a/tools/cfar_configs/cfar_probNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh +++ b/tools/cfar_configs/cfar_probNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh @@ -2,4 +2,4 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_probNog_probSS_phase1_zipr.sh b/tools/cfar_configs/cfar_probNog_probSS_phase1_zipr.sh index 89616c28b..4a4cac3c6 100755 --- a/tools/cfar_configs/cfar_probNog_probSS_phase1_zipr.sh +++ b/tools/cfar_configs/cfar_probNog_probSS_phase1_zipr.sh @@ -1,4 +1,4 @@ #!/bin/bash -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step stack_stamp=on +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step stack_stamp=on --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_probNog_probSS_probDS_phase1_zipr.sh b/tools/cfar_configs/cfar_probNog_probSS_probDS_phase1_zipr.sh index f572105f6..1d2de7ad2 100755 --- a/tools/cfar_configs/cfar_probNog_probSS_probDS_phase1_zipr.sh +++ b/tools/cfar_configs/cfar_probNog_probSS_probDS_phase1_zipr.sh @@ -8,5 +8,5 @@ source $(dirname $0)/../ps_wrapper.source $0 # --imagename # -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step duck_season=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step stack_stamp=on +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step duck_season=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step stack_stamp=on --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_scfi_zipr.sh b/tools/cfar_configs/cfar_scfi_zipr.sh index 6b138a9fd..71ac65b24 100755 --- a/tools/cfar_configs/cfar_scfi_zipr.sh +++ b/tools/cfar_configs/cfar_scfi_zipr.sh @@ -2,4 +2,4 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step-option move_globals:--cfi --step selective_cfi=on --step-option selective_cfi:--multimodule --step-option fix_calls:--fix-all --backend zipr +$PEASOUP_HOME/tools/cfar.sh "$@" --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step-option move_globals:--cfi --step selective_cfi=on --step-option selective_cfi:--multimodule --step-option fix_calls:--fix-all --backend zipr --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_structNogOF_phase1_zipr.sh b/tools/cfar_configs/cfar_structNogOF_phase1_zipr.sh index f63e955f6..420e910f2 100755 --- a/tools/cfar_configs/cfar_structNogOF_phase1_zipr.sh +++ b/tools/cfar_configs/cfar_structNogOF_phase1_zipr.sh @@ -2,5 +2,5 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_structNogOF_structSS_phase1_zipr.sh b/tools/cfar_configs/cfar_structNogOF_structSS_phase1_zipr.sh index a8099d7d4..3a704adf9 100755 --- a/tools/cfar_configs/cfar_structNogOF_structSS_phase1_zipr.sh +++ b/tools/cfar_configs/cfar_structNogOF_structSS_phase1_zipr.sh @@ -2,5 +2,5 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step stack_stamp=on --structured_stack_stamp +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step stack_stamp=on --structured_stack_stamp --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_structNogOF_structSS_probDS_phase1_zipr.sh b/tools/cfar_configs/cfar_structNogOF_structSS_probDS_phase1_zipr.sh index 93359588f..93b9143e6 100755 --- a/tools/cfar_configs/cfar_structNogOF_structSS_probDS_phase1_zipr.sh +++ b/tools/cfar_configs/cfar_structNogOF_structSS_probDS_phase1_zipr.sh @@ -2,5 +2,5 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step duck_season=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step stack_stamp=on --structured_stack_stamp +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step duck_season=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step stack_stamp=on --structured_stack_stamp --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_structNog_phase1_zipr.sh b/tools/cfar_configs/cfar_structNog_phase1_zipr.sh index 010bf86bb..eec2dae76 100755 --- a/tools/cfar_configs/cfar_structNog_phase1_zipr.sh +++ b/tools/cfar_configs/cfar_structNog_phase1_zipr.sh @@ -2,4 +2,4 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_probHeaprand_zipr.sh index 28e9c6ecc..5f6830d2d 100755 --- a/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_probHeaprand_zipr.sh +++ b/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_probHeaprand_zipr.sh @@ -2,4 +2,4 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh index 010bf86bb..eec2dae76 100755 --- a/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh +++ b/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh @@ -2,4 +2,4 @@ source $(dirname $0)/../ps_wrapper.source $0 -$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on +$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp diff --git a/tools/generate_mvee_package.sh b/tools/generate_mvee_package.sh index 491c04098..fc536ec01 100755 --- a/tools/generate_mvee_package.sh +++ b/tools/generate_mvee_package.sh @@ -411,7 +411,7 @@ finalize_json() # remove host's portion of the path to get path on target - exe_dir=$(echo $full_exe_dir|sed "s/^$indir//") + exe_dir=$(echo $full_exe_dir|sed "s|^$indir||") echo " variant coming from $full_exe_dir " mkdir -p $new_variant_dir/bin @@ -500,7 +500,7 @@ finalize_json() variant_name="variant_${vs}_${seq}" - variant_config_contents="${variant_config_contents//<<EXEPATH>>/$new_variant_dir_ts\/bin}" + variant_config_contents="${variant_config_contents//<<EXEPATH>>/$new_variant_dir_ts/bin}" variant_config_contents="${variant_config_contents//<<VARIANTNUM>>/$variant_name}" variant_config_contents="${variant_config_contents//<<VARIANTINDEX>>/$seq}" variant_config_contents="${variant_config_contents//<<VARIANTDIR>>/$new_variant_dir_ts}" @@ -585,6 +585,7 @@ finalize_json() json_contents="${json_contents//<<SERVER>>/$server}" json_contents="${json_contents//<<ARGS>>/$args}" + echo "$json_contents" > $json.ugly echo "$json_contents" |json_pp > $json echo "Finalized $json as atd config." diff --git a/tools/vgt.sh b/tools/vgt.sh new file mode 100755 index 000000000..60bef314d --- /dev/null +++ b/tools/vgt.sh @@ -0,0 +1,491 @@ +#!/bin/bash + +source $(dirname $0)/ps_wrapper.source $0 + + + +declare -a configs +declare -A style_options + +is_natural() +{ + if [[ $1 =~ ^[0-9]+$ ]]; then + # echo Detected natural -- bash uses 0 as normal exit + return 0 + else + #echo Detected non-natural -- bash uses non-zero as err exit + return 1 + fi +} + +init_globals() +{ + do_marshaling=0 + do_duckseason=0 + variant_sets=1 + input_package="" + output_package="" + duck_json="" + config_label="" + verbose=0 + temp_dir="" +} + +usage_raw() +{ + echo "" + echo "Usage:" + echo "" + echo "$1 " + echo " --input-package <path> " + echo " --output-package <path> " + echo " --config <config> [options...]" + echo "" + echo "Options:" + echo "" + echo " --input-package <path> path to input package of replicants" + echo " -i <path> " + echo "" + echo " --temp-dir <path> path to temporary files needed to build output" + echo " -t <path> package -- caution! used in a cache-like way!" + echo "" + echo " --output-package <path> path to write a package of diverse variants" + echo " -o <path> " + echo "" + echo " --config <config> describe the configuration to use, e.g., 2structNoc+1probBilr" + echo " -c <path> " + echo "" + echo " --extra-style-flags <style>:<flags> pass along <flags> when creating variants of type <style>" + echo " -e <style>:<flags> if <style> is empty (i.e., the paramters starts with a : or has no :) " + echo " or has the value \"default\", <flags> is passed to all styles. " + echo " Can be repeated to add more flags." + echo " Possible values for <flags> is undocumented. See \$PS." + echo "" + echo " --marshaling <# variant sets> include checkpoint, recovery, and marshaling support for the " + echo " --marshalling <# variant sets> application and specify how many variant sets to use" + echo " -m <# variant sets> " + echo "" + echo " --duck-json <daffy.json> Specify the input file generated by daffy for this application." + echo " -d <daffy.json> " + echo "" + echo " --help, --usage, -h Display this message and exit." + echo " --verbose, -v Spew debug data" + echo "" + echo "Notes:" + echo " * Not all listed configurations will work on all programs. For example, stack samping (probSS or structSS) " + echo " is incompatible with exception handling. It's recommended you start with simpler configs for testing purposes." + echo " * This tool may take a long time. High CPU load indicates progress is being made." + echo " * Configurations are of the form:" + echo "" + echo " <#><style>+<#>style+..." + echo "" + echo " where <#> represents a positive, integer number of variants" + echo " and <style> represents how to configure those variants." + echo " For example, '2structNoc+1probBilr' means 2 structured variants with " + echo " non-overlapping code with 1 probablistic code layout variant." + echo "" + echo " * In configuration descriptions, Use the + notation when more than one variant style is desired." + echo " * Behavior when a configuration has a duplicate style is undefined. " + echo " * Possible style options are:" + ls -1 $PEASOUP_HOME/tools/cfar_configs/*.sh|sed "s:^.*cfar_: :g"|sed "s/\.sh$//g"| awk '{ print length, $0 }' | sort -n -s | cut -d" " -f2- + + exit 1 +} + +usage() +{ + usage_raw "$@" | less + exit 1 +} + +parse_args() +{ + program=$0 + init_globals + + short_opts="i:o:m:d:c:huvt:e:" + long_opts="--long do-marshaling: + --long do-marshalling: + --long config: + --long input-package: + --long temp-dir: + --long output-package: + --long duck-json: + --long extra-style-flags: + --long help + --long usage + --long verbose + " + + # solaris does not support long option names + if [ `uname -s` = "SunOS" ]; then + TEMP=`getopt $short_opts "$@"` + else + TEMP=`getopt -o $short_opts $long_opts -n 'vgt.sh' -- "$@"` + fi + + # error check # + if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit -1 ; fi + + # Note the quotes around `$TEMP': they are essential! + eval set -- "$TEMP" + + + # the configuration you'd like to protect for the application + while true ; do + case "$1" in + --do-marshaling|--do-marshalling|-m) + do_marshaling=1 + shift + variant_sets=$1 + shift + #echo Enabling marshaling with $variant_sets variant sets. + ;; + --duck-json|-d) + shift + duck_json=$1 + shift + ;; + --input-package|-i) + shift + input_package=$(echo "$1"|sed "s:/*$::") + shift + ;; + --temp-dir|-t) + shift + temp_dir=$1 + shift + ;; + --output-package|-o) + shift + output_package=$(echo "$1"|sed "s:/*$::") + shift + ;; + --config|-c) + shift + config_label=$1 + shift + ;; + --extra-style-flags|-e) + shift + extra_flag=$1 + style=${extra_flag%%:*} # delete longest (%%) string that matches regex :* starting at end of string (%) + flag=${extra_flag#*:} # delete shortest (##) string that matches regex *: starting at begining of string (#) + #echo "in extra-style-flags, style='$style'" + #echo "in extra-style-flags, flag='$flag'" + if [[ -z "$style" ]]; then + style_options["default"]="${style_options[default]} $flag" + else + style_options["$style"]="${style_options[$style]} $flag" + fi + shift + ;; + --verbose|-v) + verbose=1 + shift + ;; + --help|--usage|-h|-u) + usage $program + ;; + --) + break; + ;; + *) + echo "unknown option: $1" + exit 1 + ;; + esac + done +} + + +sanity_check_args() +{ + if [ "$do_marshaling" = "1" -a "$do_duckseason" = "1" ]; then + echo "--duck-season is incompatible with --do-marshaling" + exit 1 + fi + + if [ -z "$input_package" ]; then + echo "Must specify an input package of replicants. " + exit 1 + fi + if [ ! -d "$input_package" ]; then + echo "Input package does not exist: $input_package" + exit 1 + fi + + if [ ! -z "$output_package" ]; then + if [ ! -d $(dirname $(realpath "$output_package") ) ]; then + echo "Cannot make output package directory: $output_package" + exit 1 + fi + fi + + if ! is_natural "$variant_sets" ; then + echo "Variant set specifier ($variant_sets) is not an integer"; + exit 1 + fi + if [[ 0 -gt "$variant_sets" || 100 -lt "$variant_sets" ]] ; then + echo "Invalid number of variant sets. Must be 0 < #variant_sets < 100." + exit 1 + fi + + if [[ -z "$config_label" ]]; then + echo "Must specify a configuration to build" + exit 1 + fi + if [[ ! -f $input_package/monitor.conf ]]; then + echo "Cannot find monitor.conf in input package $input_package." + exit 1 + fi +} + +find_configs() +{ + + # configurations to provide for this variant set. + + local config_count=0 + for config in $(echo $config_label | sed "s|+| |g") + do + #echo Found config=$config + config_name=$(echo $config | sed "s|^[0-9]*||") + #echo Found config_name=$config_name + config_num=$(echo $config | sed "s|\(^[0-9]*\).*|\1|") + #echo Found config_num=$config_num + + # find any extra flags for this option + config_options="${style_options[$config_name]} ${style_options[default]}" + #echo config_options=$config_options + + if [[ ! -x $PEASOUP_HOME/tools/cfar_configs/cfar_$config_name.sh ]]; then + echo "Cannot find config named $config_name" + exit 1 + fi + if ! is_natural "$config_num"; then + echo "Found bad configuration number ($config_num) in config $config" + exit 1 + fi + + + configs[$config_count]="cfar_${config_name}.sh $config_num $config_options" + + config_count=$(expr $config_count + 1) + done + + # build options for package generation + gen_mvee_opts="" + + # check for marshaling support + if [[ $do_marshaling = 1 ]]; then + gen_mvee_opts="$gen_mvee_opts --include-cr" + fi + + # check for NOH xform. + if [[ "$config_label" =~ .*structNoh.* ]] || [[ "$config_label" =~ .*probNoh.* ]] || [[ "$config_label" =~ .*phase1* ]] ; then + gen_mvee_opts="$gen_mvee_opts --enablenoh" + fi + + if [[ "$config_label" =~ .*structNol.* ]] || [[ "$config_label" =~ .*probNol.* ]] || [[ "$config_label" =~ .*phase1* ]]; then + gen_mvee_opts="$gen_mvee_opts --enablenol" + fi + + if [[ $verbose = 1 ]]; then + echo gen_mvee_opts are $gen_mvee_opts + fi + + # FIXME + # need to pass duck_json to duck-season step. + # need image_name to duck-season step? + # need VGT flag for "extra PS options such as --step-option move_globals:-d --step-option move_globals:.interp" +} + +find_main_exe() +{ + # need to add --mainexe flag to gen_mvee_opts + mon_conf=$input_package/monitor.conf + main_alias=$(cat $mon_conf |jq '.variant.global.exec.path'|sed 's/"//g') + variant_name=$(cat $mon_conf | jq '.variant.sets.default[0]') # leave quotes + variant_alias=$(cat $mon_conf |jq '.variant.specs['"$variant_name"'].exec.alias'|grep "$main_alias="|sed 's/",//g'|sed 's/"//g'|sed "s/.*=//") + + main_exe=$(basename $variant_alias) + gen_mvee_opts="$gen_mvee_opts --mainexe $main_exe" + if [[ $verbose = 1 ]]; then + echo "main_exe name is $main_exe" + echo "gen_mvee_opts are $gen_mvee_opts" + fi + + +} + + +# ---- probably not changing these things. + +find_extra_preloads() +{ + mon_conf=$input_package/monitor.conf + preloads=$(cat $mon_conf|jq '.variant.global.exec.env'|grep LD_PRELOAD|sed 's|"||g'|sed "s|.*=||") + extra_preloads=" --extra_preloads $preloads" + + if [[ $verbose = 1 ]]; then + echo extra_preloads=$extra_preloads + fi +} + + + +find_executable_files() +{ + # inputs to the script. + + # which files to protect + #files="KUDYN_00006_GCC_64" + files=$(find $input_package -exec file {} \; |grep -i elf |cut -d":" -f1) + + if [[ $verbose = 1 ]]; then + echo exe_elf_files=$files + fi + +} + +find_class() +{ + # which class this atd. + # class=$(echo $files |sed "s/_CLANG_64//"|sed "s/_GCC_64//" ) + mon_conf=$input_package/monitor.conf + class=$(cat $mon_conf|jq '.atd.class'|sed 's|"||g'|sed "s|.*=||") + if [[ $class = "null" ]]; then + echo "Warning! Input package does not specify an atd.class setting. Assuming NO_POLLS..." + class="NO_POLLS" + fi + if [[ $verbose = 1 ]]; then + echo class=$class + fi +} + +find_application_name() +{ + # which server is this? + mon_conf=$input_package/monitor.conf + server=$(cat $mon_conf|jq '.atd.server'|sed 's|"||g'|sed "s|.*=||") + if [[ $server = "null" ]]; then + echo "Error! Input package does not specify an atd.server setting." + exit 1 + fi + if [[ $verbose = 1 ]]; then + echo server=$server + fi +} + +find_command_line() +{ + # args for the server? + # changed output log to /dev/null so it's not chckpointed, as documented on apogee wiki + # args=' "-p", "8888", "-d", "/tmp/www", "-D", "-c", "/cgi-bin/**", "-l", "/dev/null", "-i", "/testing/results/thttpd.pid" ' + mon_conf=$input_package/monitor.conf + args=$(cat $mon_conf |jq '.variant.global.exec.argv'|grep -v -e '\[' -e '\]' ) + + if [[ $args = "null" ]]; then + echo "Error! Input package does not specify .variant.global.exec.argv" + exit 1 + fi + if [[ $verbose = 1 ]]; then + echo argv="$args" + fi +} + + +find_temp_dir() +{ + if [[ -z "$temp_dir" ]]; then + # where to put intermediate results. + outdir=$input_package-temp.$$ + else + outdir=$temp_dir + fi +} + + +find_output_dir() +{ + if [[ -z "$output_package" ]]; then + finaldir=${input_package}-${config_label}-UVATA1-$(date "+%d_%m_%Y") + else + finaldir=$output_package + fi + if [ -d $finaldir ]; then + echo "$finaldir already exists; aborting...." + exit 1 + else + if ! mkdir $finaldir ; then + echo "Error creating output directory" + exit 1 + fi + fi +} + +generate_variants() +{ + for variant_set_no in $(seq 1 $variant_sets) + do + echo Creating variant set $variant_set_no + myoutdir=$outdir/vs-$variant_set_no + #create outdir + mkdir -p $myoutdir + + #for each config + for config in "${configs[@]}" + do + echo Creating variants for $config + + # and for each file + for file in $files + do + # parse the script/num variants from the config + script=$(echo $config|cut -d" " -f1) + numvariants=$(echo $config|cut -d" " -f2) + options=$(echo $config|cut -d" " -f3-) + + # run cfar.sh + $PEASOUP_HOME/tools/cfar_configs/$script $numvariants $file $myoutdir $options + + if [[ $? != 0 ]]; then + echo "Protection failed." + exit 1 + fi + + done + done + done + echo Variant generation complete. +} + +generate_package() +{ + # generate a config. + $PEASOUP_HOME/tools/generate_mvee_package.sh --indir "$outdir" --outdir "$finaldir" --class "$class" --server "$server" --args "$args" $gen_mvee_opts $extra_preloads + + # FIXME: can't find this used, although I know it is. + #cp $CFAR_EMT_PLUGINS/debug/libdebug.so $finaldir +} + + +main() +{ + parse_args "$@" + sanity_check_args + find_output_dir + find_configs + find_extra_preloads + find_executable_files + find_class + find_application_name + find_command_line + find_temp_dir + find_main_exe + generate_variants + generate_package +} + +main "$@" -- GitLab