亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stktrace.c

?? TCPIP源代碼C語言版本
?? C
字號:
/* This file contains code to print function/arg stack tracebacks
 * at run time, which is extremely useful for finding heap free() errors.
 */

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <string.h>
#include <time.h>
#include "global.h"
#include "proc.h"

struct symtab {
	struct symtab *next;
	unsigned short seg;
	unsigned short offs;
	char *name;
};
static struct symtab *Symtab;
static void rdsymtab(int unused,void *name,void *p);
static void clrsymtab(void);
static struct symtab *findsym(void (*)());
static int scompare();
static void paddr(void (*pc)());

static unsigned short Codeseg;

void
stktrace()
{
	int i,j;
	unsigned short far *context;
	unsigned short far *cnext;
	unsigned short far *ctmp;
	void (*pc)();
	int nargs;
	struct proc *rdproc;
	struct symtab *sp;
	extern char **_argv;
	char *mapname;
	char *cp;
	FILE *fp,*outsave;
	time_t t;

	/* Temporarily redirect stdout to file */
	if((fp = fopen("stktrace.out","at")) == NULL)
		return;	/* Give up */
	outsave = Curproc->output;
	Curproc->output = fp;

	time(&t);
	printf("stktrace from proc %s at %s",Curproc->name,ctime(&t));
	Codeseg = _psp + 0x10;
#ifdef	notdef
	printf("Code base segment: %x\n",Codeseg);
#endif
	/* Construct name of map file */
	mapname = malloc(strlen(_argv[0]) + 5);
	strcpy(mapname,_argv[0]);
	if((cp = strrchr(mapname,'.')) != NULL)
		*cp = '\0';
	strcat(mapname,".map");

	/* Read the symbol table in another process to avoid overstressing
	 * the stack in this one
	 */
	rdproc = newproc("rdsymtab",512,rdsymtab,1,mapname,NULL,0);
	kwait(rdproc);
	free(mapname);

	context = MK_FP(_SS,_BP);
	pc = stktrace;

	for(i=0;i<20;i++){
		paddr(pc);
		sp = findsym(pc);
		if(sp != NULL)
			printf(" %s+%x",sp->name,FP_OFF(pc) - sp->offs);

		if(FP_OFF(context) == 0){
			/* No context left, we're done */
			putchar('\n');
			break;
		}
		cnext = MK_FP(FP_SEG(context),*context);
		/* Compute number of args to display */
		if(FP_OFF(cnext) != 0){
			nargs = cnext - context - (1 + sizeof(pc)/2);
			if(nargs > 20)
				nargs = 20; /* limit to reasonable number */
		} else {
			/* No higher level context, so just print an
			 * arbitrary fixed number of args
			 */
			nargs = 6;
		}		
		/* Args start after saved BP and return address */
		ctmp = context + 1 + sizeof(pc)/2;
		printf("(");
		for(j=0;j<nargs;j++){
			fprintf(fp,"%x",*ctmp);
			if(j < nargs-1)
				putchar(' ');
			else
				break;
			ctmp++;
		}
		printf(")\n");
#ifdef	notdef
		if(strcmp(cp,"_main") == 0)
			break;
#endif

#ifdef	LARGECODE
		pc = MK_FP(context[2],context[1]);
#else
		pc = (void (*)())MK_FP(FP_SEG(pc),context[1]);
#endif
		context = cnext;
	}
	clrsymtab();
	fclose(fp);
	Curproc->output = outsave;
}
static struct symtab *
findsym(pc)
void (*pc)();
{
	struct symtab *sp,*spprev;
	unsigned short seg,offs;
	
#ifdef	LARGECODE
	seg = FP_SEG(pc) - Codeseg;
#else
	seg = 0;	/* Small code, no segment */
#endif
	offs = FP_OFF(pc);
	spprev = NULL;
	for(sp = Symtab;sp != NULL;spprev = sp,sp = sp->next){
		if(sp->seg > seg || (sp->seg == seg && sp->offs > offs)){
			break;
		}
	}
	return spprev;
}
static void
clrsymtab()
{
	struct symtab *sp,*spnext;

	for(sp = Symtab;sp != NULL;sp = spnext){
		spnext = sp->next;
		free(sp->name);
		free(sp);
	}
	Symtab = NULL;
}
static void
rdsymtab(unused,name,p)
int unused;
void *name;
void *p;
{
	char *buf;
	FILE *fp;
	unsigned short seg;
	unsigned short offs;
	struct symtab *sp;
	struct symtab **spp;
	int size = 0;
	int i;

	if((fp = fopen(name,"rt")) == NULL){
		printf("can't read %s\n",name);
		return;
	}
	buf = (char *)malloc(128);
	while(fgets(buf,128,fp),!feof(fp)){
		rip(buf);
		if(strcmp(buf,"  Address         Publics by Value") == 0)
			break;
	}
	if(feof(fp)){
		printf("Can't find header line in %s\n",name);
		free(buf);
		return;
	}
	Symtab = NULL;
	while(fgets(buf,128,fp),!feof(fp)){
		rip(buf);
		if(sscanf(buf,"%x:%x",&seg,&offs) != 2)
			continue;
		sp = (struct symtab *)malloc(sizeof(struct symtab));
		sp->offs = offs;
		sp->seg = seg;
		sp->name = strdup(buf+17);
		sp->next = Symtab;
		Symtab = sp;
		size++;
	}
	fclose(fp);
	free(buf);
#ifdef	notdef
	printf("Symbols read: %d\n",size);
#endif
	/* Sort the symbols using the quicksort library function */
	spp = malloc(size*sizeof(struct symtab *));
	for(i=0,sp = Symtab;sp != NULL;i++,sp = sp->next)
		spp[i] = sp;
	qsort(spp,size,sizeof(struct symtab *),scompare);
	/* Now put them back in the linked list */
	Symtab = NULL;
	for(i=size-1;i >= 0;i--){
		sp = spp[i];
		sp->next = Symtab;
		Symtab = sp;
	}
	free(spp);
#ifdef	notdef
	for(sp = Symtab;sp != NULL;sp = sp->next)
		printf("%x:%x	%s\n",sp->seg,sp->offs,sp->name);
#endif
}
static int
scompare(a,b)
struct symtab **a,**b;
{
	if((*a)->seg > (*b)->seg)
		return 1;
	if((*a)->seg < (*b)->seg)
		return -1;
	if((*a)->offs > (*b)->offs)
		return 1;
	if((*a)->offs < (*b)->offs)
		return -1;
	return 0;
}
/* Print a code address according to the memory model */
static void
paddr(pc)
void (*pc)();
{
#ifdef	LARGECODE
	printf("%04x:%04x",FP_SEG(pc) - Codeseg,FP_OFF(pc));
#else
	printf("%04x",FP_OFF(pc);
#endif	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费高清在线观看| 国产精品久久久久影院| 久久久久久黄色| 亚洲男人都懂的| 日本成人中文字幕| 国产精品99久久久久久似苏梦涵 | 亚洲免费在线视频一区 二区| 国产精品女人毛片| 精品不卡在线视频| 日韩欧美国产系列| 亚洲女女做受ⅹxx高潮| 五月天中文字幕一区二区| 午夜精品成人在线| 成人av在线一区二区| 国产欧美日韩亚州综合| 91高清在线观看| 欧美电视剧在线观看完整版| 国产精品久久一卡二卡| 日欧美一区二区| 成人性生交大合| 欧美女孩性生活视频| 日本一区二区三区dvd视频在线| 一二三四社区欧美黄| 国产一区二区三区香蕉| 欧美伊人久久久久久午夜久久久久| 欧美成人精品3d动漫h| 91一区一区三区| 日本一区二区三区dvd视频在线| 国产另类ts人妖一区二区| 一本一道综合狠狠老| 久久久久久99久久久精品网站| 一区二区三区精品视频在线| 国产成人精品三级| 欧美tickling挠脚心丨vk| 亚洲午夜一区二区| 成人自拍视频在线| 精品久久人人做人人爰| 欧美性猛交一区二区三区精品| 精品国内二区三区| 日韩黄色免费网站| 日本国产一区二区| 亚洲国产精品精华液ab| 久久精品国产免费看久久精品| 91福利国产成人精品照片| 欧美激情一区二区三区| 精品中文av资源站在线观看| 7878成人国产在线观看| 亚洲精品成人少妇| 99re在线视频这里只有精品| 国产日韩欧美不卡在线| 久久综合综合久久综合| 欧美日韩国产精品成人| 亚洲日本在线观看| 成人福利视频网站| 国产嫩草影院久久久久| 精品在线视频一区| 欧美一二区视频| 亚洲h在线观看| 欧美伊人精品成人久久综合97 | 亚洲伊人伊色伊影伊综合网| 懂色av一区二区夜夜嗨| 精品国产3级a| 激情综合五月婷婷| 欧美精品一区二区三区蜜桃| 欧美a级一区二区| 91精品国产91久久综合桃花| 肉色丝袜一区二区| 欧美男同性恋视频网站| 性欧美疯狂xxxxbbbb| 欧美日本国产视频| 亚洲国产一区视频| 欧美日韩国产首页| 婷婷久久综合九色综合绿巨人| 欧美欧美欧美欧美| 午夜电影一区二区| 欧美日韩1区2区| 免费日本视频一区| 精品美女一区二区三区| 国模套图日韩精品一区二区| 久久综合九色综合97婷婷| 国产成人免费视频精品含羞草妖精| 久久精品一二三| 国产毛片一区二区| 国产精品大尺度| 欧洲精品在线观看| 日产精品久久久久久久性色| 欧美草草影院在线视频| 国产精品影视天天线| 国产精品视频在线看| 在线观看日韩国产| 日本成人中文字幕在线视频| 精品久久久久一区二区国产| 丁香婷婷深情五月亚洲| 亚洲人成网站精品片在线观看 | 偷拍日韩校园综合在线| 日韩一区二区免费视频| 国产剧情一区二区| 亚洲欧洲精品成人久久奇米网| 91色九色蝌蚪| 日韩电影在线一区二区三区| 亚洲精品在线观看视频| 成人妖精视频yjsp地址| 一区二区三区在线免费观看| 欧美理论片在线| 国内偷窥港台综合视频在线播放| 日本一区二区成人| 欧美日韩一区二区三区四区| 久久精品999| 国产精品护士白丝一区av| 欧美日韩亚洲高清一区二区| 韩国午夜理伦三级不卡影院| 亚洲欧美综合网| 91精品国产综合久久久久久久| 国产精品综合二区| 一区二区三区四区蜜桃| 日韩美一区二区三区| av中文字幕在线不卡| 丝袜美腿一区二区三区| 国产精品美女www爽爽爽| 欧美久久久久久久久久| 高清国产一区二区| 视频一区二区三区在线| 国产精品色一区二区三区| 欧美日本精品一区二区三区| 国产成人精品免费网站| 日韩精品一区第一页| 中文字幕不卡在线观看| 91精品欧美福利在线观看| 国产成人综合精品三级| 亚洲va天堂va国产va久| 国产精品天干天干在线综合| 91精品欧美久久久久久动漫 | 亚洲香蕉伊在人在线观| 国产清纯白嫩初高生在线观看91 | 青青国产91久久久久久| 中文字幕亚洲一区二区va在线| 91精品婷婷国产综合久久性色 | 亚洲成人免费av| 国产精品理论在线观看| 日韩视频一区二区三区| 91久久免费观看| 成人在线综合网| 麻豆精品视频在线| 亚洲大片精品永久免费| 一区视频在线播放| 久久综合狠狠综合久久综合88| 色婷婷综合久久久| 成人免费视频国产在线观看| 久久国产三级精品| 亚洲成人7777| 伊人一区二区三区| 中文字幕第一区综合| 精品捆绑美女sm三区| 欧美一区二区三区四区在线观看| 欧美综合一区二区| 色婷婷狠狠综合| 成人福利视频网站| 懂色一区二区三区免费观看| 蜜桃久久久久久| 日韩综合在线视频| 午夜影院久久久| 亚洲一区在线看| 亚洲精品成人天堂一二三| 中文字幕一区二区三区四区| 国产日韩精品一区| 久久九九久久九九| 久久久久一区二区三区四区| 欧美一级高清片| 日韩欧美一区在线| 3d动漫精品啪啪| 欧美日韩高清一区二区不卡| 欧美色图片你懂的| 欧美影院一区二区| 欧美视频一区在线| 欧美日韩高清一区二区| 欧美唯美清纯偷拍| 欧美区一区二区三区| 欧美日韩极品在线观看一区| 欧美影视一区在线| 欧美乱熟臀69xxxxxx| 欧美高清视频一二三区| 欧美精品v国产精品v日韩精品| 在线亚洲高清视频| 欧美特级限制片免费在线观看| 在线观看区一区二| 欧美精品久久99| 日韩一区二区精品葵司在线| 精品欧美乱码久久久久久| 久久综合久久综合亚洲| 国产欧美一区二区精品久导航| 国产欧美综合色| 亚洲欧洲日韩av| 亚洲综合免费观看高清完整版在线| 亚洲一区二区在线免费观看视频| 亚洲一区二区三区在线| 日韩vs国产vs欧美| 国产一区二区伦理| eeuss影院一区二区三区| 在线日韩av片| 91精品国产综合久久久久久漫画|