⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strip.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include <a.out.h>#include <signal.h>char	*tname;char	*mktemp();struct exec head;int 	a_magic[] = {A_MAGIC1, A_MAGIC2, A_MAGIC3, A_MAGIC4, 0};int	status;int	tf;main(argc, argv)char *argv[];{	register i;	signal(SIGHUP, SIG_IGN);	signal(SIGINT, SIG_IGN);	signal(SIGQUIT, SIG_IGN);	tname = mktemp("/tmp/sXXXXX");	close(creat(tname, 0600));	tf = open(tname, 2);	if(tf < 0) {		printf("cannot create temp file\n");		exit(2);	}	for(i=1; i<argc; i++) {		strip(argv[i]);		if(status > 1)			break;	}	close(tf);	unlink(tname);	exit(status);}strip(name)char *name;{	register f;	long size;	int i;	f = open(name, 0);	if(f < 0) {		printf("cannot open %s\n", name);		status = 1;		goto out;	}	read(f, (char *)&head, sizeof(head));	for(i=0;a_magic[i];i++)		if(a_magic[i] == head.a_magic) break;	if(a_magic[i] == 0) {		printf("%s not in a.out format\n", name);		status = 1;		goto out;	}	if(head.a_syms == 0 && (head.a_flag&1) != 0) {		printf("%s already stripped\n", name);		goto out;	}	size = (long)head.a_text + head.a_data;	head.a_syms = 0;	head.a_flag |= 1;	lseek(tf, (long)0, 0);	write(tf, (char *)&head, sizeof(head));	if(copy(name, f, tf, size)) {		status = 1;		goto out;	}	size += sizeof(head);	close(f);	f = creat(name, 0666);	if(f < 0) {		printf("%s cannot recreate\n", name);		status = 1;		goto out;	}	lseek(tf, (long)0, 0);	if(copy(name, tf, f, size))		status = 2;out:	close(f);}copy(name, fr, to, size)char *name;long size;{	register s, n;	char buf[512];	while(size != 0) {		s = 512;		if(size < 512)			s = size;		n = read(fr, buf, s);		if(n != s) {			printf("%s unexpected eof\n", name);			return(1);		}		n = write(to, buf, s);		if(n != s) {			printf("%s unexpected write eof\n", name);			return(1);		}		size -= s;	}	return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -