This is s.c in view mode; [Download] [Up]
#include <stdio.h> #include <filehdr.h> #include <aouthdr.h> #include <scnhdr.h> #include <reloc.h> #include <syms.h> int a[100]; main(argc, argv) int argc; char *argv[]; { FILE *fp; struct scnhdr section; int tsize, dsize, bsize, text_start; char *text, *malloc(); char command[128]; fp = fopen(argv[1], "r"); fseek(fp, sizeof(struct filehdr), 0); fread(§ion, sizeof(struct scnhdr), 1, fp); tsize = section.s_size; text_start = section.s_scnptr; fread(§ion, sizeof(struct scnhdr), 1, fp); dsize = section.s_size; fread(§ion, sizeof(struct scnhdr), 1, fp); bsize - section.s_size; fclose(fp); printf("size: %d+%d+%d = %d\n", tsize, dsize, bsize, tsize + dsize + bsize); text = malloc(tsize + dsize + bsize); sprintf(command, "ild %s %d %s tmp", argv[0], (int)text, argv[1]); printf("%s\n", command); if (system(command) != 0) { fprintf(stderr, "Can't relocate.\n"); exit(1); } fp = fopen("tmp", "r"); fseek(fp, text_start, 0); fread(text, 1, tsize + dsize, fp); fclose(fp); a[10] = 123; (*(int (*)())text)(); } dummy() { printf("What?\n"); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.