-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcdevolver.sh
More file actions
executable file
·125 lines (109 loc) · 4.17 KB
/
cdevolver.sh
File metadata and controls
executable file
·125 lines (109 loc) · 4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash
# cdevolver.sh - a script to repeatedly compile and decompile a c file,
# progressively turning it into garbage
#
# USAGE: cdevolver.sh [API KEY] [ITERATION COUNT] [C FILE]
#
# This script is from here: https://github.com/happyacro/devolver
#
# The script was written to generate a joke for a book called HAPPY:/ACRO.
#
# License: Apache License (https://en.wikipedia.org/wiki/Apache_License)
#
# Copyright (c) 2017, Coder Cowboy, LLC. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# * 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# The views and conclusions contained in the software and documentation are those
# of the authors and should not be interpreted as representing official policies,
# either expressed or implied.
API_KEY=${1}
ITERATION_COUNT=${2}
C_FILE=${3}
if [ -z "${1}" -o -z "${2}" -o -z "${3}" ]; then
echo "USAGE: ${0} [API KEY] [ITERATION COUNT] [C FILE]"
exit 1
fi
echo "Welcome to cdevolver. This is a terrible idea. Why are you doing this?"
echo ""
echo "This script is from here: https://github.com/happyacro/devolver"
echo ""
echo "The script was written to generate a joke for a book called HAPPY:/ACRO."
echo ""
echo "API Key: ${API_KEY}"
echo "Iteration Count: ${ITERATION_COUNT}"
echo "Input file: ${C_FILE}"
echo ""
function report_on_file() {
FILE="${1}"
FILE_SIZE=`cat "${FILE}" | wc -c | sed 's/.*[^\0-9]//'`
LINE_COUNT=`cat "${FILE}" | wc -l | sed 's/.*[^\0-9]//'`
echo "${FILE} is ${FILE_SIZE} bytes and ${LINE_COUNT} lines."
}
function do_the_magic() {
INPUT_FILE="${1}"
OUTPUT_FILE="${2}"
BINARY_FILE=`basename "${OUTPUT_FILE}" .c`
report_on_file "${INPUT_FILE}"
echo "Compiling ${INPUT_FILE} to ${BINARY_FILE}"
gcc -m32 "${INPUT_FILE}" -o "${BINARY_FILE}"
if [ 1 = ${?} ]; then
echo "Couldn't compile ${INPUT_FILE}, stopping."
exit 1
fi
echo "Attempting to run ${BINARY_FILE}"
./"${BINARY_FILE}"
ERROR_CODE=${?}
if [ 1 = ${ERROR_CODE} ]; then
echo "${BINARY_FILE} exited with an error code of ${?}, continuing anyway"
fi
echo "Calling RetDec (http://www.retdec.com) to decompile ${BINARY_FILE}"
./decompiler.sh -k ${API_KEY} ./"${BINARY_FILE}"
if [ 1 = ${?} ]; then
echo "Couldn't decompile ${BINARY_FILE}, stopping."
exit 1
fi
if [ ! -e "${OUTPUT_FILE}" ]; then
echo "Strange, decompile script didn't exit with error, but expected output file '${OUTPUT_FILE}' doesn't exist? Stopping."
exit 1
else
echo "${BINARY_FILE} was decompiled to ${OUTPUT_FILE}"
report_on_file "${OUTPUT_FILE}"
fi
}
COUNTER=0
CURRENT_FILE="${C_FILE}"
while [ ${COUNTER} -lt ${ITERATION_COUNT} ]; do
OUTPUT_FILE="`basename ${C_FILE} .c`${COUNTER}.c"
echo "Running iteration #${COUNTER}, current file: ${CURRENT_FILE}, output file: ${OUTPUT_FILE}"
do_the_magic "${CURRENT_FILE}" "${OUTPUT_FILE}"
CURRENT_FILE="${OUTPUT_FILE}"
let COUNTER=COUNTER+1
echo "Finished iteration #${COUNTER}, sleeping for 60s"
echo ""
sleep 60
done
echo "Final file: ${OUTPUT_FILE}"
report_on_file "${OUTPUT_FILE}"
echo ""
echo "File contents: "
cat "${OUTPUT_FILE}"
echo ""
exit 0