labels and self-modifying code
duk at vu44.UUCP
duk at vu44.UUCP
Sat Sep 8 08:52:24 AEST 1984
Who needs assembler when you can use C to write illegible, self-modifying
code. The program below, slightly adapted from a program by Jack Jansen,
compiles and "works" on our PDP11/44 running Unix V7.
--------------------------------------------------------------------------
#include <stdio.h>
main() {
func(0);
func(1);
}
func(arg) int arg; {
int *jumptab[2];
goto endofit; /* cannot use &label before it's defined */
lab0:
printf("Lab 0\n");
return;
lab1:
printf("Lab 1\n");
return;
lab2:
"Lab 2\n";
endofit:
jumptab[0] = lab0;
jumptab[1] = lab1;
*(jumptab[0] + 1) = *(lab2 + 1);
goto jumptab[arg];
}
--------------------------------------------------------------------------
You shouldn't give any of the options -i, -n (evidently), or -O to cc.
When you give the -O flag, the optimizer throws the labels away since they
are not used (it *thinks* the're not used!), and then later ld can't find them.
Duk Bekema
More information about the Comp.lang.c
mailing list