--- /dev/null
+#!/bin/sh
+
+if [ $# -lt 2 ]; then
+ echo "usage: $0 <executable> <method> <args>"
+ echo "will produce <executable>.trace"
+fi
+
+EXECFILE=$1
+EXECMETHOD=$2
+
+shift 2
+
+cat <<END > $EXECFILE.tmp
+
+set step-mode on
+
+file $EXECFILE
+break $EXECMETHOD
+
+run $*
+
+while 1==1
+
+if \$pc != \$pc
+printf "==== ?\\n"
+end
+
+printf "\\n====BEGIN $EXECMETHOD\\n"
+
+printf "==== "
+x/i \$pc
+
+up
+set \$nfp = \$fp
+down
+
+while \$fp != \$nfp
+stepi
+printf "==== "
+x/i \$pc
+end
+
+printf "\\n====END $EXECMETHOD\\n"
+
+continue
+
+end
+
+quit
+
+END
+
+gdb < $EXECFILE.tmp > $EXECFILE.trace
+
+mv $EXECFILE.trace $EXECFILE.output
+
+awk -- '\
+/^====BEGIN/ {ll = ("begin " $2);} \
+/^==== / {print ll; ll = (" " substr($0, 5));} \
+/^====END/ {print "end", $2;}
+' $EXECFILE.output > $EXECFILE.trace
+
+echo instructions: `grep "^ " $EXECFILE.trace | wc -l`
+echo trace output: $EXECFILE.trace
+
+#rm $EXECFILE.tmp $EXECFILE.output
#include <stdlib.h>
#include <string.h>
-extern unsigned char *asmb(unsigned char *s);
+extern unsigned char *asmb(unsigned char *a);
unsigned char *asmb_ref(unsigned char *s)
{
unsigned long i;
for (i=0; s[i]; i++) {
- unsigned char c = s[i];
- c += (c >= 'A' && c <= 'Z') ? 'a'-'A' : 0;
+ unsigned char c=s[i];
+ c += (c>='A' && c<='Z') ? 'a'-'A' : 0;
s[i] = c;
}
return s;
}
-int main(int argc, char **argv) {
- char *input1[]={"asdfA\0BCDEFGHKL5", "foofuuMUHkk\0AAAA",
- "AbC\0AAAAAAAAAAAA", "BLA|MUHMKUH|KAA\0",
- "ASDFASDFasdfasdfaBC\0AAAABBBBCCCC",
- "ASDFASDFasdfasdfaBC0AAAABBBBCCCCmuhKA\0asASDFasdf"
- /* 8 16 20 24 28 32 36 40 48 */
- };
- int len[] = {16,16,
- 16,16,
- 32,
- 48};
- char *output1;
- char *output2;
- char *input2;
- char *input3;
- int i, j;
+#define NUM_TESTCASES 12
+int main() {
+ char *input[NUM_TESTCASES]={"asdfABCDEFGHKL54",
+ "foofuuMUHkk",
+ "AbC",
+ "BLA|MUHMKUH|KA",
+ "ASDFNERABHDFKHDFKLGJAHGLKAHGLKASHGEARNAKLVNLVAANLSADJVHASDLGH",
+ "asdfABCDEFGHKL544",
+ "asdfA\0BCDEFGHKL5",
+ "foofuuMUHkk\0AAAA",
+ "AbC\0AAAAAAAAAAAA",
+ "BLA|MUHMKUH|KAA\0",
+ "ASDFASDFasdfasdfaBC\0AAAABBBBCCCC",
+ "ASDFASDFasdfasdfaBC0AAAABBBBCCCCmuhKA\0asASDFasdf"
+ };
+ int len[NUM_TESTCASES] = {16,
+ 11,
+ 3,
+ 14,
+ 60,
+ 17,
+ 16,
+ 16,
+ 16,
+ 16,
+ 32,
+ 48
+ };
+ char *output_our, *output_ref;
+ char *input_our, *input_ref;
- for(i = 0; i < 6; i++) {
- input2 = strdup(input1[i]);
- input3 = strdup(input1[i]);
- output1 = (char *)asmb_ref((unsigned char *)(input2));
- output2 = (char *)asmb((unsigned char *)(input3));
+ int i,j;
+ for(i = 0; i < NUM_TESTCASES; i++) {
+ input_our = strndup(input[i], len[i]);
+ input_ref = strndup(input[i], len[i]);
- printf("\n");
-#if 0
- if(memcmp(output1,output2, len[i])) {
-#else
- if(strncmp(output1,output2, len[i])) {
-#endif
- j = 0;
- printf("Testfall falsch; Input war: \"%s\"\n", input1[i]);
- printf("erwartet:\n\t\"%s\"\ntatsaechliches Ergebnis:\n\t\"%s\"\n", output1, output2);
-#if 0
- printf("0x");
- for(j = 0; j < 16; j++)
- printf("%02X", output2[j]);
+ output_our = asmb(input_our);
+ output_ref = asmb_ref(input_ref);
+ if(memcmp(output_our,output_ref, len[i]) != 0) {
+ printf("Testfall falsch! \n Input: \n");
+ for(j = 0; j <= len[i]; j++) {
+ printf("%02X ",input[j]);
+ }
+ printf("\nerwartet: \n");
+ for(j = 0; j <= len[i]; j++) {
+ printf("%02X ",output_ref[j]);
+ }
+ printf("\ntatsaechliches Ergebnis: \n");
+ for(j = 0; j <= len[i]; j++) {
+ printf("%02X ",output_our[j]);
+ }
printf("\n");
-#endif
- } else {
- printf("Testfall \"%s\" passt.\n", output1);
}
-
- free(input2);
- free(input3);
+ else {
+ printf("Testfall korrekt\n");
+ }
+ free(input_our);
+ free(input_ref);
}
-
return 0;
}
+