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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? loader.c

?? 這是資料最全的有關(guān)匯編語(yǔ)言的示例源代碼
?? C
字號(hào):
/*****************************************************************************
 * FILE: loader.c							     *
 *									     *
 * DESC: loader for 32bit RSX compiled with EMX/GCC			     *
 *									     *
 * Copyright (C) 1994							     *
 *	Rainer Schnitker, Heeper Str. 283, 33607 Bielefeld		     *
 *	email: rainer@mathematik.uni-bielefeld.de			     *
 *									     *
 * See the files "README" and "COPYING" for further copyright and warranty   *
 * information. 							     *
 *									     *
 *****************************************************************************/

#include <dos.h>
#include "LOADER.H"

struct info {
    unsigned long  membytes;
    unsigned long  memaddress;
    unsigned long  text_start;
    unsigned long  data_start;
    unsigned long  bss_start;
    unsigned long  stack_start;
    unsigned long  init_brk;
    unsigned long  entry;
    unsigned short code16sel;
    unsigned short data16sel;
} info;

extern unsigned _psp;

WORD code32sel; 		/* RSX CS selector */
WORD data32sel; 		/* RSX DS selector */
DWORD stackp32; 		/* RSX satck pointer */

static void far *extdata;	/* DOS memory for RSX */
static unsigned segm;		/* segment address */
static char far * env_str;	/* env far pointer */
static char cline[260]; 	/* arguments */

static int n_strlen(char *str)
{
    char *s;
    for (s = str; *s; ++s);
    return (s - str);
}

static int f_strlen(char far *str)
{
    char far *s;
    for (s = str; *s; ++s);
    return ((int)(char near *)s - (int)(char near *)str);
}

static char *my_strcpy(char *string1, char *string2)
{
    char *dst = string1;
    while ((*dst = *string2) != 0)
	++dst, ++string2;
    return (string1);
}

static void error(char *s)
{
    dos_puts("loader v1.0 : (c) Rainer Schnitker\n\r$");
    dos_puts("rsx_32 loader error: $");
    dos_puts(s);
}

static int skip_exe_hdr(int filehandle, DWORD * headoff)
{
    struct exe_hdr exehdr;

    exehdr.signatur = 0;
    dos_read(filehandle, &exehdr, sizeof(WORD) * 3);

    if (exehdr.signatur == 0x5a4d) {	/* falls exe-kopf */
	*headoff += (DWORD) exehdr.high * 512L;
	if (exehdr.low)
	    *headoff += (DWORD) exehdr.low - 512L;
    }
    if (dos_lseek(filehandle, *headoff, SEEK_SET) != -1L)
	return 0;
    else {
	*headoff = 0;
	dos_lseek(filehandle, 0, SEEK_SET);
	return -1;
    }
}

static int argvenv(int argc, char **argv)
{
    DWORD far * vectors;	    /* building argv, env    */
    WORD len;			    /* current len of string */
    WORD stkp;			    /* current stack pos     */
    WORD count = 3;		    /* 0=argc 1=argv 2=env   */
    int i, envc = 0;
    static char npx_str[] = "RSX_x87=?";

    /* instead allocate memory, take some EMX space at DS:0x8000 */
    vectors = (DWORD far *) (((DWORD)segm << 16) | 0x8000);

    /* EMX program stack pointer */
    /* stack grows down from DS:0xFFFC */
    stkp = (WORD) stackp32;
    FP_SEG(extdata) = segm;
    FP_OFF(extdata) = stkp;

    /* store env strings in user stack, built vectors */
    for (; *env_str; ) {
	len = f_strlen(env_str) + 1;
	stkp -= len;
	stkp &= ~3;
	FP_OFF(extdata) = stkp;
	far_memcpy(extdata, env_str, len);
	vectors[count++] = (DWORD) stkp;
	env_str += len;
	envc ++;
    }
    /* put 387 status on env */
    i = npx_installed();
    npx_str[8] = (char) i + '0';
    len = sizeof(npx_str) + 1;
    stkp -= len;
    stkp &= ~3;
    FP_OFF(extdata) = stkp;
    far_memcpy(extdata, (char far *)npx_str, len);
    vectors[count++] = (DWORD) stkp;
    env_str += len;
    envc ++;

    vectors[count++] = 0L;	 /* last is a NULL pointer */

    /* store arg strings in user stack, built vectors */
    for (i = 0; i < argc; i++) {
	len = f_strlen(argv[i]) + 1;
	stkp -= len;
	stkp &= ~3;
	FP_OFF(extdata) = stkp;
	far_memcpy(extdata, (void far *) argv[i], len);
	vectors[count] = (DWORD) stkp;
	count++;
    }
    vectors[count++] = 0L;	 /* last is a NULL pointer */

    len = count * sizeof(long);
    stkp -= len;
    vectors[0] = argc;
    vectors[1] = stkp + (4 + envc) * sizeof(long);  /* & vectors[3+nenvp+1] */
    vectors[2] = stkp + 3 * sizeof(long);	    /* & vectors[3] */
    FP_OFF(extdata) = stkp;
    far_memcpy(extdata, vectors, len);

    stackp32 = stkp;		    /* save current pos! (for entry) */
    stackp32 += 3 * sizeof(long);
    return 0;
}


static int read_in(int fhandle, DWORD address, long size)
{
#define READ_MAX 0xFF00

    void far *dosmemp;
    WORD word_size;

    FP_OFF(dosmemp) = 0;

    while (size != 0L) {
	FP_SEG(dosmemp) = (WORD) (address >> 4);
	word_size = (size >> 16) ? READ_MAX : (WORD) size;
	dos_read_far(fhandle, dosmemp, word_size);
	address += (DWORD) READ_MAX;
	size -= (DWORD) word_size;
    }

    return 0;
}

static int load_protected_program(char *filename)
{
    GNUOUT aout_hdr;
    DWORD sizetext, sizedata, sizestack;
    DWORD headoff;
    int fhandle;

    if ((fhandle = dos_open(filename, DO_RDONLY | DO_DENYWR)) == -1) {
	error("open rsx32 error\r\n$");
	return 1;
    }

    headoff = 0;
    skip_exe_hdr(fhandle, &headoff);

    /* read gnu aout header */
    dos_read(fhandle, &aout_hdr, sizeof(aout_hdr));

    /* test header */
    if ((WORD) aout_hdr.a_info != 0x10b) {
	error("illegal a.out header\r\n$");
	dos_close(fhandle);
	return 2;
    }

    sizetext = (aout_hdr.a_text + SEGMENT_SIZE - 1L) & ~(SEGMENT_SIZE - 1L);
    sizedata = aout_hdr.a_data + ((aout_hdr.a_bss + 4095L) & ~4095L);
    sizestack = 64 * 1024L;

    info.text_start = N_TXTADDR(x);
    info.data_start = info.text_start + sizetext;
    info.bss_start = info.data_start + aout_hdr.a_data;

    info.membytes = sizestack + sizetext + sizedata;
    info.entry = aout_hdr.a_entry;
    info.init_brk = info.data_start + sizedata;
    stackp32 = info.text_start - 4L;

    /* MEMORY per DOS besorgen */
    if (!DosReallocParagraph(_psp, (WORD)(info.membytes>>4))) {
	error("realloc memory error\r\n$");
	return 3;
    }
    segm = _psp;

    info.memaddress = (DWORD)segm << 4;

    /* read in code */
    dos_lseek(fhandle, headoff + N_TXTOFF(aout_hdr), SEEK_SET);
    if (read_in(fhandle, info.memaddress + info.text_start, aout_hdr.a_text))
	return 1;

    /* read in data */
    dos_lseek(fhandle, headoff + N_DATOFF(aout_hdr), SEEK_SET);
    if (read_in(fhandle, info.memaddress + info.data_start, aout_hdr.a_data))
	return 1;

    dos_close(fhandle);

    /* zero bss segment */
    if (aout_hdr.a_bss) {
	FP_SEG(extdata) = (WORD) ((info.memaddress + info.bss_start) >> 4);
	FP_OFF(extdata) = (WORD) ((info.memaddress + info.bss_start) & 0xFL);
	far_bzero(extdata, (WORD) aout_hdr.a_bss);
    }
    return 0;
}

static int real_to_protected(WORD mode)
{
    static WORD DPMIdata_para_needed;
    static WORD DPMIdata_segm_address;
    WORD DPMIflags, DPMIversion;
    BYTE processor;
    DWORD PM_jump;		/* switch to protmode jump */

    if (GetDpmiEntryPoint(&PM_jump, &DPMIdata_para_needed,
			  &DPMIflags, &DPMIversion, &processor)) {
	error("No DPMI-host found!\r\n$");
	return -1;
    }
    if (mode == 1 && !(DPMIflags & 1)) {
	error("32bit programs not supported by Host\r\n$");
	return -1;
    }
    if (DPMIdata_para_needed) { /* get DPMI ring 0 stack */
	DPMIdata_segm_address = GetDpmiHostParagraph(DPMIdata_para_needed);
	if (!DPMIdata_segm_address) {
	    error("Can't alloc memory for the DPMI-host-stack\r\n$");
	    return -1;
	}
    }
    if (DpmiEnterProtectedMode(PM_jump, mode, DPMIdata_segm_address)) {
	error("can't switch to Protected Mode\r\n$");
	return -1;
    }

    if (DPMIdata_para_needed)
	LockLinRegion((DWORD) DPMIdata_segm_address << 4,
		      (DWORD) DPMIdata_para_needed << 4);

    /* Now we are in Protected Mode */
    info.code16sel = GetCS();
    info.data16sel = GetDS();

    return 0;
}

static void init_descriptors()
{
    AllocLDT(2, &(code32sel));
    data32sel = code32sel + SelInc();

    SetBaseAddress(code32sel, info.memaddress);
    SetBaseAddress(data32sel, info.memaddress);
    SetAccess(code32sel, APP_CODE_SEL, DEFAULT_BIT | GRANULAR_BIT);
    SetAccess(data32sel, APP_DATA_SEL, DEFAULT_BIT | GRANULAR_BIT);
    SetLimit(code32sel, info.membytes - 1);
    SetLimit(data32sel, info.membytes - 1);
}

static void get_cmdline_from_psp(unsigned psp_segm)
{
    int z, env_seg;
    char far *cmdl;

    /* get envoronment segment from PSP */
    env_seg = *(int far *) (((DWORD) psp_segm << 16) | 0x2c);

    /* build far pointer to environment */
    cmdl = (char far *) ((DWORD) env_seg << 16);

    /* save environment pointer */
    env_str = (char far *) ((DWORD) env_seg << 16);

    /* skip env-strings ; last has two 0-bytes */
    for (;;) {
	if (*cmdl == '\0' && *(cmdl+1) == '\0')
	    break;
	cmdl++;
    }

    cmdl += 4;
    /* copy arg0 */
    for (z = 0; z < sizeof(cline); z++) {
	cline[z] = *cmdl;
	if (cline[z] == '\0')
	    break;
	cmdl++;
    }
    cline[z++] = ' ';

    /* build cmdline far pointer from PSP */
    cmdl = (char far *) ((DWORD) psp_segm << 16 | 0x81);

    /* copy arg1,arg2,... */
    for ( ; z < sizeof(cline) ; z++) {
	cline[z] = *cmdl;
	if (cline[z] == 13)
	    break;
	cmdl++;
    }
    cline[z] = '\0';
}

static void build_args(int *argn, char ***argvp, int stub_opt)
{
    static char extra[] = "!RSX";
    static char *argvec[20];

    int argc, src, dst, bs, quote;
    char *q;

    argc = 0;
    dst = src = 0;

    if (stub_opt)
	argvec[argc++] = extra;

    while (cline[src] == ' ' || cline[src] == '\t' || cline[src] == '\n')
	++src;
    do {
	if (cline[src] == 0)
	    q = NULL;
	else {
	    q = cline + dst;
	    bs = 0;
	    quote = 0;
	    for (;;) {
		if (cline[src] == '"') {
		    while (bs >= 2) {
			cline[dst++] = '\\';
			bs -= 2;
		    }
		    if (bs & 1)
			cline[dst++] = '"';
		    else
			quote = !quote;
		    bs = 0;
		} else if (cline[src] == '\\')
		    ++bs;
		else {
		    while (bs != 0) {
			cline[dst++] = '\\';
			--bs;
		    }
		    if (cline[src] == 0 ||
			((cline[src] == ' ' || cline[src] == '\t') && !quote))
			break;
		    cline[dst++] = cline[src];
		}
		++src;
	    }
	    while (cline[src] == ' ' || cline[src] == '\t'
		   || cline[src] == '\n')
		++src;
	    cline[dst++] = 0;
	}
	argvec[argc++] = q;
    } while (q != NULL);

    *argn = argc - 1;
    *argvp = (char **) &(argvec[0]);
}

int main(void)
{
    int argc;
    char **argv;
    char exe_name[130];

    get_cmdline_from_psp(_psp);
    build_args(&argc, &argv, 0);
    my_strcpy(exe_name, argv[0]);

    if (argc == 2 && argv[1][0]=='-' && argv[1][1] == '/' && argv[1][6] == '/') {
	unsigned newpsp;
	int i;
	char s;
	newpsp = 0;
	for ( i=2 ; i<=5 ; i++) {
	    s = argv[1][i];
	    if (s >= 'A')
		s -= ('A' - 10);
	    else
		s -= '0';
	    newpsp <<= 4;
	    newpsp |= s;
	}
	get_cmdline_from_psp(newpsp);
	build_args(&argc, &argv, 1);
    }

    if (argc > 7 && argv[1][0]=='!' && argv[1][1] == 'p' && argv[1][5] == 'y') {
	unsigned newpsp;
	int i;
	char s;
	newpsp = 0;
	for ( i=0 ; i<=3 ; i++) {
	    s = argv[7][i];
	    if (s >= 'a')
		s -= ('a' - 10);
	    else if (s >= 'A')
		s -= ('A' - 10);
	    else
		s -= '0';
	    newpsp <<= 4;
	    newpsp |= s;
	}
	get_cmdline_from_psp(newpsp);
	build_args(&argc, &argv, 1);
    }

    if (load_protected_program(exe_name))
	return(1);

    if (argvenv(argc, argv))
	return (1);

    if (real_to_protected(1))
	return (1);

    init_descriptors();
    jmp_to_user();
    return 0;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品一区二区夜色 | 色悠悠久久综合| 国产制服丝袜一区| 免费人成黄页网站在线一区二区 | 一本大道久久精品懂色aⅴ| 成人性视频免费网站| 国内精品不卡在线| 久久av老司机精品网站导航| 久久激情五月激情| 国产麻豆精品久久一二三| 老色鬼精品视频在线观看播放| 亚洲va在线va天堂| 日韩精品国产精品| 免费欧美日韩国产三级电影| 日本成人在线网站| 免费成人在线观看视频| 黑人巨大精品欧美一区| 国产呦精品一区二区三区网站| 国产在线播放一区| 成人黄色电影在线| 色综合色狠狠综合色| 色天使久久综合网天天| 91成人免费在线视频| 欧美日韩一区三区四区| 91精品在线麻豆| 精品99一区二区| 日本一区二区三区久久久久久久久不| 国产精品久久久久婷婷| 亚洲另类一区二区| 手机精品视频在线观看| 久久99精品久久久久久国产越南| 日韩免费性生活视频播放| 精品久久人人做人人爰| 国产精品欧美久久久久一区二区| 中文字幕亚洲成人| 洋洋成人永久网站入口| 日本女优在线视频一区二区| 国产一区二区三区免费播放| 99视频有精品| 日韩亚洲欧美中文三级| 久久久久久久久久久电影| 亚洲色图视频网| 日韩电影在线观看一区| 国产精品一区在线观看乱码 | 欧美无砖砖区免费| 日韩精品一区二区三区在线观看 | 久久91精品国产91久久小草| 国产精品伊人色| 91久久精品一区二区三区| 91精品国产免费久久综合| 国产欧美日韩一区二区三区在线观看| 亚洲三级在线播放| 久久精品国产亚洲5555| 91浏览器在线视频| 日韩免费在线观看| 亚洲一区二区免费视频| 国产精品自拍网站| 欧美日韩中字一区| 中文字幕欧美日韩一区| 日韩电影在线免费| 97精品国产露脸对白| 欧美成人精品福利| 亚洲综合av网| 国产999精品久久久久久绿帽| 欧美三级乱人伦电影| 中文字幕 久热精品 视频在线| 无吗不卡中文字幕| 高清不卡一区二区在线| 91精品久久久久久久91蜜桃| 福利一区福利二区| 欧美一区二区私人影院日本| 中文字幕亚洲精品在线观看 | 日韩欧美你懂的| 亚洲欧美日韩国产一区二区三区| 精品一区二区三区免费观看| 欧美日韩一区二区在线观看 | xf在线a精品一区二区视频网站| 亚洲三级电影网站| 国内精品第一页| 日韩一区二区三区四区五区六区| 亚洲日本中文字幕区| 国产风韵犹存在线视精品| 日韩亚洲欧美高清| 亚洲福中文字幕伊人影院| 91亚洲精品一区二区乱码| 久久久无码精品亚洲日韩按摩| 日韩高清在线电影| 欧洲中文字幕精品| 一区二区三区四区亚洲| eeuss鲁片一区二区三区在线看| www成人在线观看| 日韩av网站在线观看| 在线日韩一区二区| 亚洲视频一区二区免费在线观看| 国产二区国产一区在线观看| 亚洲精品一区二区三区福利| 日本vs亚洲vs韩国一区三区二区| 欧美色爱综合网| 亚洲一二三区在线观看| 在线中文字幕一区二区| 亚洲综合丝袜美腿| 亚洲欧洲日韩一区二区三区| 国产盗摄精品一区二区三区在线| 精品国精品国产| 免费不卡在线视频| 日韩视频在线你懂得| 奇米亚洲午夜久久精品| 91精品国产综合久久久久久 | 在线免费亚洲电影| 亚洲一级二级在线| 欧美日韩一本到| 香蕉久久夜色精品国产使用方法| 欧美日韩电影在线| 美女视频黄频大全不卡视频在线播放| 欧美一级午夜免费电影| 久久国产尿小便嘘嘘尿| 久久品道一品道久久精品| 国产精品一区二区不卡| 国产精品久久影院| 欧美中文字幕一区二区三区 | 国产一区二区电影| 国产亚洲福利社区一区| 岛国精品在线观看| 一区二区欧美国产| 欧美精品久久久久久久多人混战 | 欧美午夜片在线看| 五月婷婷综合激情| 精品美女被调教视频大全网站| 精品亚洲aⅴ乱码一区二区三区| 2023国产一二三区日本精品2022| 国产精品18久久久久久vr| 国产精品伦理一区二区| 色天天综合色天天久久| 爽好久久久欧美精品| 精品99999| 97se狠狠狠综合亚洲狠狠| 五月天婷婷综合| 久久久亚洲午夜电影| av亚洲产国偷v产偷v自拍| 亚洲二区在线视频| 欧美不卡激情三级在线观看| 国产成人啪免费观看软件| 亚洲日穴在线视频| 日韩欧美色综合网站| 成人福利在线看| 日韩精品一二三四| 国产欧美一区视频| 色婷婷久久综合| 日韩国产精品久久久久久亚洲| 久久久久久久久久久99999| 99国产精品久久久久久久久久久| 亚洲成人免费av| www国产精品av| 91福利资源站| 国产盗摄一区二区| 亚洲成av人片一区二区三区| 久久久99精品久久| 在线观看日韩av先锋影音电影院| 免费在线视频一区| 亚洲视频一二三区| 精品电影一区二区三区| youjizz国产精品| 奇米影视在线99精品| 日韩美女视频一区二区| 欧美电影免费观看高清完整版在 | 日本一区二区三级电影在线观看| 欧美亚洲尤物久久| 粉嫩aⅴ一区二区三区四区五区| 日韩激情视频网站| 亚洲色图欧美激情| 26uuu色噜噜精品一区二区| 欧美日免费三级在线| 成人自拍视频在线观看| 免播放器亚洲一区| 亚洲精品第一国产综合野| 久久久亚洲高清| 日韩一卡二卡三卡四卡| 欧美性生交片4| 91同城在线观看| 风间由美一区二区av101| 乱一区二区av| 精品视频1区2区3区| 国产高清无密码一区二区三区| 亚洲aaa精品| 亚洲精品国产精品乱码不99 | 狠狠色狠狠色合久久伊人| 亚洲精品成人悠悠色影视| 久久久噜噜噜久久中文字幕色伊伊 | 久久网这里都是精品| 欧美精品久久久久久久多人混战 | 欧美午夜精品免费| 成人av高清在线| 国产99一区视频免费| 美国毛片一区二区| 日本亚洲一区二区| 午夜精品123| 三级欧美在线一区| 亚洲国产精品视频| 亚洲影院理伦片| 亚洲成人动漫一区|