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

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

?? obj4lb.c

?? OXCC is a multipass, interpreting C compiler with several language extensions. It generates an Archi
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* obj4lb.c	-- fiddle with symbols in an a.out or coff format file 
** Copyright (C) 1995	Norman D. Culver	All rights reserved.
**
** COMPILE: (using djcc v1.12)
**		gcc -O2 -o obj4lb obj4lb.c
**		coff2exe -s go32.exe obj4lb
*/

#include <dos.h>
#include <limits.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdarg.h>
#include <memory.h>
#include <string.h>
#include <stdio.h>
#include <binimg.h>

#define coff_sym_is_fortrancommon(p) \
	((p->e_sclass == C_EXT) && (p->e_scnum == 0) && (p->e_value != 0))
#define coff_sym_is_undefined(p) \
	((p->e_scnum == 0) && (p->e_sclass == C_EXT))
#define coff_sym_is_global(p) \
	(p->e_sclass == C_EXT)

/* USEFUL DEFINITIONS */
#ifndef __GNUC__
typedef unsigned int u_int;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned long u_long;
#endif
typedef union {
  u_short val;
  u_char b[2];
} SVAL;

typedef union {
  u_long a0;
  void *a1;
  struct {
    SVAL offset;
    SVAL seg_addr;
  }a2;
} ADDR;

typedef struct _exports {
	struct _exports *fptr;
	char *name;
	int len;
} EXPORTS;

typedef struct _renames {
	struct _renames *fptr;
	char *oldname;
	int oldlen;
	char *newname;
	int newlen;
} RENAMES;

typedef struct _movdat {
	struct _movdat *fptr;
	unsigned long offset;
} MOVDAT, *PMOVDAT;

typedef struct relocation_info RELINFO;

#define round_up(size,amt) \
((size&(amt-1)) ? size+(amt-(size&(amt-1))) : size)

/* LOCAL VARIABLES */
static char infile[128];
static char outfile[128];
static char lb4file[128];
static struct exec header;
static FILE *ifd, *lb4fd, *ofd;
static EXPORTS exports;
static RENAMES renames;
static EXPORTS *lexports;
static RENAMES *lrenames;
static MOVDAT moves;
static MOVDAT *lmoves;
static int rename_diftot;
static long lowoffset;
static char *strtbl;
static char *nstrtbl;
static long strsize;
static long nstrsize;
static int nsyms;

/* INPUT DATA FROM THE .o FILE */

static NLIST *symtbl;
static char *text;
static RELINFO *text_relocs;
static int n_text_relocs;
static char *data;
static RELINFO *data_relocs;
static int n_data_relocs;

/* coff stuff */
typedef struct oxhdr {
	unsigned short info;
	unsigned short machine;
	unsigned start_addr;
	unsigned text_vaddr;
	unsigned text_size;
	unsigned text_fileaddr;
	unsigned data_vaddr;
	unsigned data_size;
	unsigned data_fileaddr;
	unsigned bss_vaddr;
	unsigned bss_size;
	unsigned image_size;
	unsigned text_reloc_fileaddr;
	unsigned text_reloc_size;
	unsigned text_reloc_cnt;
	unsigned data_reloc_fileaddr;
	unsigned data_reloc_size;
	unsigned data_reloc_cnt;
	unsigned symbols_fileaddr;
	unsigned symbols_size;
	unsigned symbols_cnt;
	unsigned strings_fileaddr;
	unsigned strings_size;
	unsigned section_headers_size;
} OXHDR, *POXHDR;

typedef struct {
	void *addr;
	long size;	
	unsigned long fileptr;
	long cnt;
} BUFS, *PBUFS;

static OXHDR xhdr;
static unsigned char scntype[128];
static PSCNHDR t,d,b,q,s;
static PBUFS sbf;
static PBUFS rbf;
static PBUFS lbf;
static PCOFF_SYMBOL coff_symtbl;
static short bss_section;

/* start of subroutines */

static void *
xmalloc (long n)
{
void *p;

  p = calloc (1,(size_t)n);
  if (n > 0 && p == 0)
  {
    puts ("obj4lb: virtual memory exhausted");
    exit (1);
  }
  return p;
}
static int
isglobal(char *str)
{
EXPORTS *l = &exports;

	while(l->fptr)
	{
		l = l->fptr;
		if(!strcmp(str, l->name))
			return 1;
	}
	return 0;
}
static RENAMES *
isrenamed(char *str)
{
RENAMES *r = &renames;

	while(r->fptr)
	{
		r = r->fptr;
		if(!strcmp(str, r->oldname))
			return r;
	}
	return NULL;
}
static void
aout_get_rid_of_fortrancommon(NLIST *sp, int symidx, int setglobal)
{/* move fortrancommon symbols to the bss segment */
u_long bssbase = N_BSSADDR(header);
u_long bssoffset = round_up(header.a_bss, sizeof(int));
u_long symbsize = sp->n_value;
u_long bssaddr = bssbase + bssoffset;
RELINFO *r;
int i;
void *ldata;

	sp->n_value = bssaddr;
	if(setglobal)
		sp->n_type = N_BSS|N_EXT;
	else
		sp->n_type = N_BSS;
	header.a_bss = bssoffset + symbsize;

	/* adjust all relocs which refence this variable */
	for(i = 0, r=text_relocs; i < n_text_relocs; ++i, ++r)
	{
		if(r->r_extern && r->r_symbolnum == symidx)
		{
			ldata = &text[r->r_address];
			r->r_extern = 0;
			r->r_symbolnum = N_BSS;
			if(r->r_length == 2)
				*((long *)ldata) += bssaddr;
			else
			{
				puts("4lb: non 32bit reloc encountered");
				exit(1);
			}
		}
	}
	for(i = 0, r=data_relocs; i < n_data_relocs; ++i, ++r)
	{
		if(r->r_extern && r->r_symbolnum == symidx)
		{
			ldata = &data[r->r_address];
			r->r_extern = 0;
			r->r_symbolnum = N_BSS;
			if(r->r_length == 2)
				*((long *)ldata) += bssaddr;
			else
			{
				puts("4lb: non 32bit reloc encountered");
				exit(1);
			}
		}
	}
}
static void
aout_adjust_symbol(long oldoffset, long newoffset, int setglobal)
{
NLIST *sp;
int i;

	for(i = 0, sp = symtbl; i < nsyms; ++i, ++sp)
	{
		if(sp->n_un.n_strx == oldoffset)
		{/* newoffset is set negative to avoid reuse */
			sp->n_un.n_strx = newoffset | 0x80000000;
			if(sym_is_fortrancommon(sp))
				aout_get_rid_of_fortrancommon(sp, i, setglobal);
			else if(setglobal)
				sp->n_type |= N_EXT;
			else if(!sym_is_undefined(sp))
				sp->n_type &= ~N_EXT;
			return;
		}
	}
}
static void
coff_get_rid_of_fortrancommon(COFF_SYMBOL *sp, int symidx, int setglobal)
{/* move fortrancommon symbols to the bss segment */
PCOFF_HDR p = (PCOFF_HDR)&header;
u_long bssbase = b->s_vaddr;
u_long bssoffset = round_up(b->s_size, sizeof(int));
u_long symbsize = sp->e_value;
u_long bssaddr = bssbase + bssoffset;
int i, j;

	sp->e_value = bssaddr;
	sp->e_scnum = bss_section;
	if(setglobal)
		sp->e_sclass = C_EXT;
	else
		sp->e_sclass = C_STAT;
	b->s_size = round_up(bssoffset + symbsize, sizeof(int));

	/* adjust all relocs which reference this variable */
	for(i = 0; i < p->f_nscns; ++i)
	{
	COFF_RELOC *r;

		if((r = rbf[i].addr))
		{
		int cnt = rbf[i].cnt;
		char *scndata = sbf[i].addr;
		unsigned long s_vaddr = s[i].s_vaddr;

			for(j = 0; j < cnt; ++j, ++r)
			{
				if(r->r_symndx == symidx)
				{
				void *ldata = &scndata[r->u.r_vaddr - s_vaddr];
					if(r->r_type == 0x0006)
					{
						*((long *)ldata) += bssaddr - symbsize;
					}
					else if(r->r_type == 0x0007)
					{
						puts("4lb: type 7 reloc encountered");
						exit(1);
					}
					else if(r->r_type == 0x0014)
					{
						puts("4lb: pcrel comdef encountered");
						exit(1);
					}
					else
					{
						puts("4lb: non 32bit reloc encountered");
						exit(1);
					}
				}
			}
		}
	}
}
static void
coff_adjust_symbol(long oldoffset, long newoffset, int setglobal)
{
COFF_SYMBOL *sp;
int i;

	for(i = 0, sp = coff_symtbl; i < nsyms; ++i, ++sp)
	{
		if(sp->e.e.e_offset == oldoffset)
		{/* newoffset is set negative to avoid reuse */
			sp->e.e.e_offset = newoffset | 0x80000000;
			if(coff_sym_is_fortrancommon(sp))
				coff_get_rid_of_fortrancommon(sp, i, setglobal);
			else if(setglobal)
				sp->e_sclass = C_EXT;
			else if(!coff_sym_is_undefined(sp))
			{
				if(coff_sym_is_global(sp))
					sp->e_sclass = C_STAT;
			}
		}
		if(sp->e_numaux)
		{/* ignore aux records */
			i += sp->e_numaux;
			sp += sp->e_numaux;
		}
	}
}
static void
adjust_strings(int format_fudge)
{/* HERE'S THE BEEF -- WRITE A NEW STRING TABLE AND ADJUST SYMTAB */
long istroff = lowoffset;
long ostroff = lowoffset;
char *ip, *ep, *op;
int i;

	nstrsize = strsize + rename_diftot;
	nstrtbl = xmalloc(nstrsize+12);
	ip = strtbl+lowoffset;
	op = nstrtbl+lowoffset;
	ep = ip + strsize;

	while(ip < ep)
	{/* scan over each of the strings in the old string table */
	int global;
	int	istrlen = strlen(ip);
	int olen;
	RENAMES *r;
		if(istrlen > 0)
		{
			if((r = isrenamed(ip)))
			{/* change the string on output */
				strcpy(op, r->newname);
				op += r->newlen+1;
				olen = r->newlen+1;
				global = isglobal(r->newname);
			}
			else
			{/* use the old string on output */
				strcpy(op, ip);
				op += istrlen+1;
				olen = istrlen+1;
				global = isglobal(ip);
			}
			if(coff_symtbl)
				coff_adjust_symbol(istroff, ostroff, global);
			else
				aout_adjust_symbol(istroff, ostroff, global);
			ostroff += olen;
		}
		ip += istrlen+1;
		istroff += istrlen+1;
	}
	nstrsize = ostroff + format_fudge;
	/* reset the negative values for offsets */
	if(coff_symtbl)
	{
	COFF_SYMBOL *sp;
		for(i = 0, sp = coff_symtbl; i < nsyms; ++i, ++sp)
		{
			if(sp->e.e.e_offset & 0x80000000)
				sp->e.e.e_offset &= 0x7fffffff;
			if(sp->e_numaux)
			{/* ignore aux records */
				i += sp->e_numaux;
				sp += sp->e_numaux;
			}
		}
	}
	else
	{
	NLIST *sp;
		for(i = 0, sp = symtbl; i < nsyms; ++i, ++sp)
		{
		  if(sp->n_un.n_strx & 0x80000000)
			  sp->n_un.n_strx &= 0x7fffffff;
		}
	}
}
static int
aout_read_symbols ()
{
int i;
NLIST *sp;

  nsyms = header.a_syms / sizeof (NLIST);
  if (nsyms == 0)
    return 1;

  symtbl = (NLIST *)xmalloc (header.a_syms);

  fseek (ifd, N_SYMOFF (header), 0);
  fread ((char *)symtbl, sizeof(NLIST), nsyms, ifd);

  fseek (ifd, N_STROFF(header), 0);
  fread ((char *)&strsize, sizeof strsize, 1, ifd);

  strtbl = xmalloc (strsize);
  fseek (ifd, N_STROFF (header), 0);
  fread ((char *)strtbl, (int)strsize, 1, ifd);

  lowoffset = 2000000;
  for (i = 0, sp = symtbl; i < nsyms; i++, sp++)
  {
    if (sp->n_un.n_strx != 0)
		if(sp->n_un.n_strx < lowoffset)
			lowoffset = sp->n_un.n_strx;
  }
}
static void
aout_read_text_and_data()
{
  text = xmalloc(header.a_text);
  data = xmalloc(header.a_data);

  if(header.a_text > 0)
  {
    fseek(ifd, N_TXTOFF(header), 0);
    fread(text, (u_int)header.a_text, 1, ifd);
  }
  if(header.a_data > 0)
  {
    fseek(ifd, N_DATOFF(header), 0);
    fread(data, (u_int)header.a_data, 1, ifd);
  }
}
static int
relcomp(const void *a,const void *b)
{
  return (int)((long)((RELINFO*)a)->r_address-(long)((RELINFO*)b)->r_address);
}
static void
aout_read_relocs()
{
int i;
RELINFO *reloc;

  n_text_relocs = header.a_trsize / sizeof (RELINFO); 
  n_data_relocs = header.a_drsize / sizeof (RELINFO);

  if(n_text_relocs > 0)
  {
    text_relocs = xmalloc(header.a_trsize); 
    fseek(ifd, N_TRELOFF(header), 0);
    fread((char *)text_relocs, (u_int)header.a_trsize, 1, ifd);
    qsort (text_relocs, n_text_relocs, sizeof (RELINFO), relcomp);
  }

  if(n_data_relocs > 0)
  {
    data_relocs = xmalloc(header.a_drsize);	
    fseek(ifd, N_DRELOFF(header), 0);
    fread((char *)data_relocs, (u_int)header.a_drsize, 1, ifd);
    qsort (data_relocs, n_data_relocs, sizeof (RELINFO),relcomp);
  }
}


static int
movcmp(char *s1, char *s2)
{
int i = E_SYMNMLEN;
	while(i--)
	{
		if(*s1++ != *s2++)
			return 1;
	}
	return 0;
}
static unsigned long
mark_moved(PCOFF_SYMBOL sp)
{
MOVDAT *m = &moves;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区久久| 久久精品国产网站| 国产精品久久久久四虎| 精品少妇一区二区三区免费观看| 欧美另类高清zo欧美| 欧美中文字幕久久| 欧美三级日本三级少妇99| 欧美在线一二三四区| 欧美视频一区二区三区| 91麻豆精品国产91久久久久久久久| 欧美三级电影网| 欧美一区二区三区爱爱| 久久午夜羞羞影院免费观看| 久久久久久97三级| 国产精品久久久久久久久果冻传媒| 国产精品成人网| 亚洲综合小说图片| 蜜臀va亚洲va欧美va天堂 | 国产三级欧美三级日产三级99| 日韩二区三区四区| 石原莉奈在线亚洲三区| 精品一区二区三区在线播放视频| 激情欧美一区二区三区在线观看| 国产成人福利片| 91麻豆免费观看| 欧美精选午夜久久久乱码6080| 精品国产123| 亚洲欧美怡红院| 毛片av一区二区| 97超碰欧美中文字幕| 777a∨成人精品桃花网| 国产偷国产偷亚洲高清人白洁| 亚洲女爱视频在线| 国产在线不卡一区| 欧美性猛交xxxx乱大交退制版| 精品久久久久香蕉网| 亚洲日本成人在线观看| 青青草97国产精品免费观看| 成人免费精品视频| 日韩亚洲欧美高清| 亚洲精品视频一区| 国产精品综合一区二区三区| 在线观看日韩国产| 中文字幕五月欧美| 久久99久久99| 欧美日韩一区二区在线视频| 久久午夜羞羞影院免费观看| 亚洲线精品一区二区三区 | 色综合久久久久久久| 欧美mv日韩mv| 热久久国产精品| 色综合天天天天做夜夜夜夜做| 欧美成人一区二区三区| 亚洲午夜成aⅴ人片| av不卡免费在线观看| 久久综合色婷婷| 久久精品噜噜噜成人88aⅴ| 91黄色免费网站| 综合久久久久久| 国产成人精品一区二区三区四区 | 欧美疯狂性受xxxxx喷水图片| 国产精品电影一区二区| 国产传媒一区在线| 精品久久人人做人人爽| 美腿丝袜亚洲色图| 日韩一区二区在线观看| 日韩精品国产精品| 欧美日韩国产经典色站一区二区三区 | 久久久不卡网国产精品二区| 一区二区欧美视频| 91香蕉视频黄| 亚洲日本va午夜在线影院| 成人av免费观看| 中文字幕在线观看一区二区| 国产99久久久国产精品| 久久精品视频免费观看| 国产电影一区在线| 国产日韩v精品一区二区| 国产乱国产乱300精品| 久久久电影一区二区三区| 成人午夜免费电影| 亚洲欧美日韩在线播放| 欧美三级中文字幕| 日本sm残虐另类| 国产亚洲一区二区三区四区| 国产精品一区一区三区| 综合自拍亚洲综合图不卡区| 在线观看一区二区视频| 视频一区中文字幕| 久久久久国产精品免费免费搜索| 国产丶欧美丶日本不卡视频| 专区另类欧美日韩| 欧美日韩免费电影| 国产综合色视频| 中文字幕一区免费在线观看 | 日韩欧美电影一二三| 久久国产综合精品| 中文在线一区二区| 欧美亚洲精品一区| 久久成人免费日本黄色| 国产精品久久久久精k8| 欧美日韩国产一区| 韩国精品免费视频| 一区二区在线观看免费 | 国产自产2019最新不卡| 国产精品久久一级| 69久久99精品久久久久婷婷 | 韩日av一区二区| 亚洲欧美综合网| 日韩视频在线一区二区| 99久久精品一区二区| 日韩电影在线一区二区三区| 亚洲精品在线免费观看视频| 99久久精品情趣| 久久电影网电视剧免费观看| 亚洲视频资源在线| 日韩欧美一卡二卡| 在线精品视频免费观看| 国产精品一区二区三区乱码| 亚洲国产一二三| 亚洲国产精品高清| 欧美mv日韩mv国产| 欧美视频一区二| 91一区二区三区在线观看| 激情综合色播激情啊| 亚洲国产wwwccc36天堂| 国产精品天干天干在线综合| 欧美一卡二卡在线观看| 在线亚洲欧美专区二区| 国产成人av自拍| 日本成人在线网站| 亚洲在线一区二区三区| 亚洲国产精品99久久久久久久久| 精品欧美久久久| 日韩精品一区二区三区在线观看| 在线免费亚洲电影| av不卡免费在线观看| 成人精品国产免费网站| 国产尤物一区二区| 国产一区二区在线免费观看| 男人的j进女人的j一区| 天涯成人国产亚洲精品一区av| 亚洲人成亚洲人成在线观看图片| 国产精品乱码人人做人人爱 | 日韩欧美黄色影院| 欧美福利一区二区| 欧美三级视频在线观看| 日本久久电影网| 91久久国产综合久久| 日本黄色一区二区| 色综合天天视频在线观看| 91在线播放网址| 日本乱码高清不卡字幕| 欧美三级日韩三级国产三级| 欧美日韩视频在线第一区| 欧美日韩中字一区| 欧美日韩一级大片网址| 欧美日韩不卡一区| 日韩午夜小视频| 精品福利一区二区三区免费视频| 精品国产一区二区三区忘忧草 | 免费成人在线观看| 美美哒免费高清在线观看视频一区二区| 亚洲不卡一区二区三区| 免费不卡在线观看| 国产麻豆精品theporn| 国产精品99久久久久久久女警| 国产精品一区一区三区| 色综合婷婷久久| 88在线观看91蜜桃国自产| 久久在线免费观看| 中文字幕在线不卡视频| 亚洲高清免费观看高清完整版在线观看 | 亚洲一区在线播放| 青椒成人免费视频| 成人综合在线观看| 欧美日韩三级一区| 国产女人水真多18毛片18精品视频| 国产精品夫妻自拍| 五月综合激情网| 国产成人在线视频免费播放| 色综合中文字幕国产 | 狠狠色狠狠色综合系列| 成人精品亚洲人成在线| 在线观看视频欧美| 26uuu欧美| 一区二区三区在线免费| 裸体一区二区三区| 99久久久国产精品| 精品欧美乱码久久久久久1区2区| 中文字幕欧美一区| 美脚の诱脚舐め脚责91| 色偷偷88欧美精品久久久| 精品粉嫩超白一线天av| 亚洲女厕所小便bbb| 国内成人精品2018免费看| 色噜噜夜夜夜综合网| 久久品道一品道久久精品| 五月天一区二区三区| 99久久精品国产毛片|