ftp.nice.ch/pub/next/unix/hack/hackkit.2.N.bs.tar.gz#/freebies/source/deobjc.c

This is deobjc.c in view mode; [Download] [Up]

/*	deobjc - remove the call to objc-init from a Mach program.

	Written by Bill Spitzak.

	Current algorithim is to search for the first arrangmement of:

   		beq +6
		bsrl _objcInit
		clrl _errno

	replaces the beq and bsrl with nop's.  Of course the locations of
	_objcInit and _errno can change, so only the instructions are looked
	for.
*/

#define NOP 0x4e71

#define BUFFSIZE 0x1000	/* must be big enough to contain pointer */
char buf[BUFFSIZE];

main(int argc,char **argv)
{
    int fd,len;
    short unsigned *ptr;

    if (argc < 2) {
	puts("Remove call to _objcInit from a compiled program.\n");
	exit(1);
	}

    fd = open(argv[1],2);
    if (fd < 0) {
	printf("Can't open '%s' for read/write\n",argv[1]);
	exit(1);
	}

    len = read(fd,buf,BUFFSIZE);
    ptr = (short unsigned *)(buf+0x200); /* skip Mach header */
    for (;;) {
	if (ptr >= (short unsigned *)(buf+len)) {
	    printf("No match for the code found.\n");
	    break;
	    }
	if (*ptr==0x6706 && *(ptr+1)==0x61FF && *(ptr+4)==0x42B9) {
	    *ptr = *(ptr+1) = *(ptr+2) = *(ptr+3) = NOP;
	    printf("Patching at 0x%x\n",(void *)ptr-(void *)buf);
	    lseek(fd,0,0);
	    write(fd,buf,len);
	    break;
	    }
	ptr++;
	}
    close(fd);
    }

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.