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

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

?? update.c

?? linux下基于c++的處理器仿真平臺。具有處理器流水線
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*update.c - implementation of the elf_update(3) function.Copyright (C) 1995 - 2003 Michael Riepe <michael@stud.uni-hannover.de>This library is free software; you can redistribute it and/ormodify it under the terms of the GNU Library General PublicLicense as published by the Free Software Foundation; eitherversion 2 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNULibrary General Public License for more details.You should have received a copy of the GNU Library General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/#include <private.h>#ifndef lintstatic const char rcsid[] = "@(#) $Id: update.c,v 1.24 2003/05/12 13:36:19 michael Exp $";#endif /* lint */#if HAVE_MMAP#include <sys/mman.h>#endif /* HAVE_MMAP */static const unsigned short __encoding = ELFDATA2LSB + (ELFDATA2MSB << 8);#define native_encoding (*(unsigned char*)&__encoding)#define rewrite(var,val,f)	\    do{if((var)!=(val)){(var)=(val);(f)|=ELF_F_DIRTY;}}while(0)#define align(var,val)		\    do{if((val)>1){(var)+=(val)-1;(var)-=(var)%(val);}}while(0)#define max(a,b)		((a)>(b)?(a):(b))static off_tscn_data_layout(Elf_Scn *scn, unsigned v, unsigned type, size_t *algn, unsigned *flag) {    Elf *elf = scn->s_elf;    Elf_Data *data;    int layout = (elf->e_elf_flags & ELF_F_LAYOUT) == 0;    size_t scn_align = 1;    size_t len = 0;    Scn_Data *sd;    size_t fsize;    if (!(sd = scn->s_data_1)) {	/* no data in section */	*algn = scn_align;	return (off_t)len;    }    /* load data from file, if any */    if (!(data = elf_getdata(scn, NULL))) {	return (off_t)-1;    }    elf_assert(data == &sd->sd_data);    for (; sd; sd = sd->sd_link) {	elf_assert(sd->sd_magic == DATA_MAGIC);	elf_assert(sd->sd_scn == scn);	if (!valid_version(sd->sd_data.d_version)) {	    return (off_t)-1;	}	fsize = sd->sd_data.d_size;	if (fsize && type != SHT_NOBITS && valid_type(sd->sd_data.d_type)) {	    if (elf->e_class == ELFCLASS32) {		fsize = _elf32_xltsize(&sd->sd_data, v, ELFDATA2LSB, 1);	    }#if __LIBELF64	    else if (elf->e_class == ELFCLASS64) {		fsize = _elf64_xltsize(&sd->sd_data, v, ELFDATA2LSB, 1);	    }#endif /* __LIBELF64 */	    else {		elf_assert(valid_class(elf->e_class));		seterr(ERROR_UNIMPLEMENTED);		return (off_t)-1;	    }	    if (fsize == (size_t)-1) {		return (off_t)-1;	    }	}	if (layout) {	    align(len, sd->sd_data.d_align);	    scn_align = max(scn_align, sd->sd_data.d_align);	    rewrite(sd->sd_data.d_off, (off_t)len, sd->sd_data_flags);	    len += fsize;	}	else {	    len = max(len, sd->sd_data.d_off + fsize);	}	*flag |= sd->sd_data_flags;    }    *algn = scn_align;    return (off_t)len;}static size_tscn_entsize(const Elf *elf, unsigned version, unsigned stype) {    Elf_Type type;    switch ((type = _elf_scn_type(stype))) {	case ELF_T_BYTE:	    return 0;	case ELF_T_VDEF:	case ELF_T_VNEED:	    return 0;	/* What else can I do?  Thank you, Sun! */	default:	    return _fsize(elf->e_class, version, type);    }}static off_t_elf32_layout(Elf *elf, unsigned *flag) {    int layout = (elf->e_elf_flags & ELF_F_LAYOUT) == 0;    Elf32_Ehdr *ehdr = (Elf32_Ehdr*)elf->e_ehdr;    size_t off = 0;    unsigned version;    unsigned encoding;    size_t align_addr;    size_t entsize;    unsigned shnum;    Elf_Scn *scn;    *flag = elf->e_elf_flags | elf->e_phdr_flags;    if ((version = ehdr->e_version) == EV_NONE) {	version = EV_CURRENT;    }    if (!valid_version(version)) {	seterr(ERROR_UNKNOWN_VERSION);	return -1;    }    if ((encoding = ehdr->e_ident[EI_DATA]) == ELFDATANONE) {	encoding = native_encoding;    }    if (!valid_encoding(encoding)) {	seterr(ERROR_UNKNOWN_ENCODING);	return -1;    }    entsize = _fsize(ELFCLASS32, version, ELF_T_EHDR);    elf_assert(entsize);    rewrite(ehdr->e_ehsize, entsize, elf->e_ehdr_flags);    off = entsize;    align_addr = _fsize(ELFCLASS32, version, ELF_T_ADDR);    elf_assert(align_addr);    if (elf->e_phnum) {	entsize = _fsize(ELFCLASS32, version, ELF_T_PHDR);	elf_assert(entsize);	if (layout) {	    align(off, align_addr);	    rewrite(ehdr->e_phoff, off, elf->e_ehdr_flags);	    off += elf->e_phnum * entsize;	}	else {	    off = max(off, ehdr->e_phoff + elf->e_phnum * entsize);	}    }    else {	entsize = 0;	if (layout) {	    rewrite(ehdr->e_phoff, 0, elf->e_ehdr_flags);	}    }    rewrite(ehdr->e_phnum, elf->e_phnum, elf->e_ehdr_flags);    rewrite(ehdr->e_phentsize, entsize, elf->e_ehdr_flags);    for (scn = elf->e_scn_1, shnum = 0; scn; scn = scn->s_link, ++shnum) {	Elf32_Shdr *shdr = &scn->s_shdr32;	size_t scn_align = 1;	off_t len;	elf_assert(scn->s_index == shnum);	*flag |= scn->s_scn_flags;	if (scn->s_index == SHN_UNDEF) {	    rewrite(shdr->sh_entsize, 0, scn->s_shdr_flags);	    if (layout) {		rewrite(shdr->sh_offset, 0, scn->s_shdr_flags);		rewrite(shdr->sh_size, 0, scn->s_shdr_flags);		rewrite(shdr->sh_addralign, 0, scn->s_shdr_flags);	    }	    *flag |= scn->s_shdr_flags;	    continue;	}	if (shdr->sh_type == SHT_NULL) {	    *flag |= scn->s_shdr_flags;	    continue;	}	len = scn_data_layout(scn, version, shdr->sh_type, &scn_align, flag);	if (len == -1) {	    return -1;	}	/*	 * Never override the program's choice.	 */	if (shdr->sh_entsize == 0) {	    entsize = scn_entsize(elf, version, shdr->sh_type);	    if (entsize > 1) {		rewrite(shdr->sh_entsize, entsize, scn->s_shdr_flags);	    }	}	if (layout) {	    align(off, scn_align);	    rewrite(shdr->sh_offset, off, scn->s_shdr_flags);	    rewrite(shdr->sh_size, (size_t)len, scn->s_shdr_flags);	    rewrite(shdr->sh_addralign, scn_align, scn->s_shdr_flags);	    if (shdr->sh_type != SHT_NOBITS) {		off += (size_t)len;	    }	}	else if ((size_t)len > shdr->sh_size) {	    seterr(ERROR_SCN2SMALL);	    return -1;	}	else {	    Elf_Scn *scn2;	    size_t end1, end2;	    end1 = shdr->sh_offset;	    if (shdr->sh_type != SHT_NOBITS) {		end1 += shdr->sh_size;	    }	    if (shdr->sh_offset < off) {		/*		 * check for overlapping sections		 */		for (scn2 = elf->e_scn_1; scn2; scn2 = scn2->s_link) {		    if (scn2 == scn) {			break;		    }		    end2 = scn2->s_shdr32.sh_offset;		    if (scn2->s_shdr32.sh_type != SHT_NOBITS) {			end2 += scn2->s_shdr32.sh_size;		    }		    if (end1 > scn2->s_shdr32.sh_offset		     && end2 > shdr->sh_offset) {			seterr(ERROR_SCN_OVERLAP);			return -1;		    }		}	    }	    if (off < end1) {		off = end1;	    }	}	*flag |= scn->s_shdr_flags;    }    if (shnum) {	entsize = _fsize(ELFCLASS32, version, ELF_T_SHDR);	elf_assert(entsize);	if (layout) {	    align(off, align_addr);	    rewrite(ehdr->e_shoff, off, elf->e_ehdr_flags);	    off += shnum * entsize;	}	else {	    off = max(off, ehdr->e_shoff + shnum * entsize);	}    }    else {	entsize = 0;	if (layout) {	    rewrite(ehdr->e_shoff, 0, elf->e_ehdr_flags);	}    }    if (shnum >= SHN_LORESERVE) {	Elf_Scn *scn = elf->e_scn_1;	Elf32_Shdr *shdr = &scn->s_shdr32;	elf_assert(scn->s_index == 0);	rewrite(shdr->sh_size, shnum, scn->s_shdr_flags);	*flag |= scn->s_shdr_flags;	shnum = 0;    }    rewrite(ehdr->e_shnum, shnum, elf->e_ehdr_flags);    rewrite(ehdr->e_shentsize, entsize, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_MAG0], ELFMAG0, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_MAG1], ELFMAG1, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_MAG2], ELFMAG2, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_MAG3], ELFMAG3, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_CLASS], ELFCLASS32, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_DATA], encoding, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_VERSION], version, elf->e_ehdr_flags);    rewrite(ehdr->e_version, version, elf->e_ehdr_flags);    *flag |= elf->e_ehdr_flags;    return off;}#if __LIBELF64static off_t_elf64_layout(Elf *elf, unsigned *flag) {    int layout = (elf->e_elf_flags & ELF_F_LAYOUT) == 0;    Elf64_Ehdr *ehdr = (Elf64_Ehdr*)elf->e_ehdr;    size_t off = 0;    unsigned version;    unsigned encoding;    size_t align_addr;    size_t entsize;    unsigned shnum;    Elf_Scn *scn;    *flag = elf->e_elf_flags | elf->e_phdr_flags;    if ((version = ehdr->e_version) == EV_NONE) {	version = EV_CURRENT;    }    if (!valid_version(version)) {	seterr(ERROR_UNKNOWN_VERSION);	return -1;    }    if ((encoding = ehdr->e_ident[EI_DATA]) == ELFDATANONE) {	encoding = native_encoding;    }    if (!valid_encoding(encoding)) {	seterr(ERROR_UNKNOWN_ENCODING);	return -1;    }    entsize = _fsize(ELFCLASS64, version, ELF_T_EHDR);    elf_assert(entsize);    rewrite(ehdr->e_ehsize, entsize, elf->e_ehdr_flags);    off = entsize;    align_addr = _fsize(ELFCLASS64, version, ELF_T_ADDR);    elf_assert(align_addr);    if (elf->e_phnum) {	entsize = _fsize(ELFCLASS64, version, ELF_T_PHDR);	elf_assert(entsize);	if (layout) {	    align(off, align_addr);	    rewrite(ehdr->e_phoff, off, elf->e_ehdr_flags);	    off += elf->e_phnum * entsize;	}	else {	    off = max(off, ehdr->e_phoff + elf->e_phnum * entsize);	}    }    else {	entsize = 0;	if (layout) {	    rewrite(ehdr->e_phoff, 0, elf->e_ehdr_flags);	}    }    rewrite(ehdr->e_phnum, elf->e_phnum, elf->e_ehdr_flags);    rewrite(ehdr->e_phentsize, entsize, elf->e_ehdr_flags);    for (scn = elf->e_scn_1, shnum = 0; scn; scn = scn->s_link, ++shnum) {	Elf64_Shdr *shdr = &scn->s_shdr64;	size_t scn_align = 1;	off_t len;	elf_assert(scn->s_index == shnum);	*flag |= scn->s_scn_flags;	if (scn->s_index == SHN_UNDEF) {	    rewrite(shdr->sh_entsize, 0, scn->s_shdr_flags);	    if (layout) {		rewrite(shdr->sh_offset, 0, scn->s_shdr_flags);		rewrite(shdr->sh_size, 0, scn->s_shdr_flags);		rewrite(shdr->sh_addralign, 0, scn->s_shdr_flags);	    }	    *flag |= scn->s_shdr_flags;	    continue;	}	if (shdr->sh_type == SHT_NULL) {	    *flag |= scn->s_shdr_flags;	    continue;	}	len = scn_data_layout(scn, version, shdr->sh_type, &scn_align, flag);	if (len == -1) {	    return -1;	}	/*	 * Never override the program's choice.	 */	if (shdr->sh_entsize == 0) {	    entsize = scn_entsize(elf, version, shdr->sh_type);	    if (entsize > 1) {		rewrite(shdr->sh_entsize, entsize, scn->s_shdr_flags);	    }	}	if (layout) {	    align(off, scn_align);	    rewrite(shdr->sh_offset, off, scn->s_shdr_flags);	    rewrite(shdr->sh_size, (size_t)len, scn->s_shdr_flags);	    rewrite(shdr->sh_addralign, scn_align, scn->s_shdr_flags);	    if (shdr->sh_type != SHT_NOBITS) {		off += (size_t)len;	    }	}	else if ((size_t)len > shdr->sh_size) {	    seterr(ERROR_SCN2SMALL);	    return -1;	}	else {	    Elf_Scn *scn2;	    size_t end1, end2;	    end1 = shdr->sh_offset;	    if (shdr->sh_type != SHT_NOBITS) {		end1 += shdr->sh_size;	    }	    if (shdr->sh_offset < off) {		/*		 * check for overlapping sections		 */		for (scn2 = elf->e_scn_1; scn2; scn2 = scn2->s_link) {		    if (scn2 == scn) {			break;		    }		    end2 = scn2->s_shdr64.sh_offset;		    if (scn2->s_shdr64.sh_type != SHT_NOBITS) {			end2 += scn2->s_shdr64.sh_size;		    }		    if (end1 > scn2->s_shdr64.sh_offset		     && end2 > shdr->sh_offset) {			seterr(ERROR_SCN_OVERLAP);			return -1;		    }		}	    }	    if (off < end1) {		off = end1;	    }	}	*flag |= scn->s_shdr_flags;    }    if (shnum) {	entsize = _fsize(ELFCLASS64, version, ELF_T_SHDR);	elf_assert(entsize);	if (layout) {	    align(off, align_addr);	    rewrite(ehdr->e_shoff, off, elf->e_ehdr_flags);	    off += shnum * entsize;	}	else {	    off = max(off, ehdr->e_shoff + shnum * entsize);	}    }    else {	entsize = 0;	if (layout) {	    rewrite(ehdr->e_shoff, 0, elf->e_ehdr_flags);	}    }    if (shnum >= SHN_LORESERVE) {	Elf_Scn *scn = elf->e_scn_1;	Elf64_Shdr *shdr = &scn->s_shdr64;	elf_assert(scn->s_index == 0);	rewrite(shdr->sh_size, shnum, scn->s_shdr_flags);	*flag |= scn->s_shdr_flags;	shnum = 0;    }    rewrite(ehdr->e_shnum, shnum, elf->e_ehdr_flags);    rewrite(ehdr->e_shentsize, entsize, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_MAG0], ELFMAG0, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_MAG1], ELFMAG1, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_MAG2], ELFMAG2, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_MAG3], ELFMAG3, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_CLASS], ELFCLASS64, elf->e_ehdr_flags);    rewrite(ehdr->e_ident[EI_DATA], encoding, elf->e_ehdr_flags);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产毛片精品视频| 久久国产精品99久久人人澡| 精品国内片67194| 56国语精品自产拍在线观看| 欧美日韩精品一区视频| 欧美日韩在线不卡| 欧美日韩美少妇| 91精品国产综合久久香蕉的特点 | 成人免费三级在线| 韩日av一区二区| 国产一区二区在线观看免费| 久久精品国产99国产| 秋霞午夜av一区二区三区| 九色porny丨国产精品| 韩国欧美国产1区| 成人av综合一区| 欧美在线|欧美| 91精品国产黑色紧身裤美女| 欧美一区二区在线看| 欧美mv日韩mv国产网站app| 久久久久久久精| 综合久久久久综合| 舔着乳尖日韩一区| 国产精品中文有码| 日本久久电影网| 欧美一区二区在线免费观看| 久久婷婷国产综合精品青草| 中文字幕的久久| 日韩电影在线一区二区三区| 国产一区二区不卡在线| 一本大道久久a久久综合婷婷| 在线欧美日韩精品| 精品对白一区国产伦| 亚洲色图清纯唯美| 精品一区二区三区影院在线午夜| 国产91丝袜在线观看| 欧亚一区二区三区| 久久久久久久综合色一本| 亚洲精选一二三| 韩日av一区二区| 91成人免费网站| 久久新电视剧免费观看| 亚洲尤物视频在线| 国产激情视频一区二区三区欧美| 在线精品亚洲一区二区不卡| 日韩精品一区二区三区中文精品| 综合久久国产九一剧情麻豆| 奇米一区二区三区av| 91免费视频观看| 久久精品一区二区三区av| 亚洲超碰97人人做人人爱| 成人av在线电影| 精品国产1区2区3区| 丝袜美腿高跟呻吟高潮一区| 99re66热这里只有精品3直播 | 日韩成人一区二区三区在线观看| 成人一区在线观看| 欧美xxxxx裸体时装秀| 玉足女爽爽91| 91在线观看免费视频| 国产亚洲综合色| 国产在线播精品第三| 91精品国产一区二区人妖| 亚洲一区av在线| 色琪琪一区二区三区亚洲区| 国产精品久久久久久久浪潮网站| 九色porny丨国产精品| 日韩一区二区在线看| 五月天亚洲精品| 欧美日韩一级视频| 一级特黄大欧美久久久| 色偷偷久久人人79超碰人人澡| 国产精品乱码久久久久久| 国产成人亚洲精品狼色在线| www久久精品| 国模冰冰炮一区二区| 亚洲精品在线免费播放| 国内精品视频一区二区三区八戒| 欧美大度的电影原声| 美女爽到高潮91| 久久―日本道色综合久久| 国产一区二区精品在线观看| 精品久久久久久久人人人人传媒 | 中文字幕一区二区三区在线不卡| 懂色av一区二区三区蜜臀| 国产午夜精品久久久久久免费视 | 日本一区中文字幕| 日韩视频免费观看高清完整版 | 国产午夜精品一区二区三区视频 | 日韩欧美你懂的| 久久成人久久爱| 国产日韩欧美电影| www.久久久久久久久| 樱桃视频在线观看一区| 欧美肥大bbwbbw高潮| 激情久久五月天| 亚洲视频一二区| 欧美一三区三区四区免费在线看| 精品无码三级在线观看视频| 国产亚洲欧美激情| 色先锋久久av资源部| 免费欧美在线视频| 亚洲男女一区二区三区| 欧美日韩国产bt| 国产在线精品一区二区不卡了| 亚洲国产高清aⅴ视频| 欧美系列在线观看| 国产在线视频一区二区| 亚洲免费观看高清完整版在线观看熊| 欧美美女一区二区在线观看| 狠狠色丁香婷婷综合| 亚洲精品老司机| 久久一留热品黄| 欧美色精品天天在线观看视频| 精品写真视频在线观看| 亚洲视频每日更新| 欧美不卡一二三| 欧美三级资源在线| 成人午夜私人影院| 青青草一区二区三区| 亚洲欧美偷拍另类a∨色屁股| 日韩一区二区三区视频在线观看| 不卡一区中文字幕| 国内外成人在线| 日韩精品亚洲一区二区三区免费| 国产欧美一区二区三区鸳鸯浴| 欧美日韩中文精品| 91在线观看视频| 波多野结衣中文字幕一区| 九一久久久久久| 免费美女久久99| 午夜精品免费在线观看| 亚洲色图欧美激情| 国产精品色在线| 国产人妖乱国产精品人妖| 欧美一区日本一区韩国一区| 91官网在线免费观看| 成人国产电影网| 国产成人自拍在线| 欧美电影在哪看比较好| 成人午夜在线播放| 国产精品 欧美精品| 美女诱惑一区二区| 欧美aⅴ一区二区三区视频| 亚洲主播在线观看| 一区二区三区高清| 一区二区三国产精华液| 亚洲丝袜另类动漫二区| 亚洲欧洲色图综合| 亚洲色图视频网| 一区二区三区在线免费观看| 亚洲人成小说网站色在线 | 一本一道波多野结衣一区二区| 国产风韵犹存在线视精品| 国产一区二区三区免费看| 加勒比av一区二区| 国产精品 日产精品 欧美精品| 国产在线精品一区二区不卡了| 极品尤物av久久免费看| 国产精品一区二区在线观看不卡 | 91精品国产一区二区三区 | 粉嫩蜜臀av国产精品网站| 国产老妇另类xxxxx| 国产成人免费xxxxxxxx| 床上的激情91.| 91免费看视频| 欧美日韩免费电影| 欧美成人r级一区二区三区| 亚洲精品在线观看网站| 国产片一区二区三区| 国产精品灌醉下药二区| 亚洲女同一区二区| 午夜精品久久久久久久99樱桃| 美日韩一区二区三区| 国产aⅴ综合色| 色婷婷精品久久二区二区蜜臂av| 色一情一乱一乱一91av| 欧美老肥妇做.爰bbww| 精品国产乱码久久久久久老虎| 久久看人人爽人人| 亚洲靠逼com| 久久成人免费电影| 色综合久久综合| 日韩欧美激情一区| 综合在线观看色| 精品午夜一区二区三区在线观看| 成人av高清在线| 欧美无乱码久久久免费午夜一区 | 国产精品18久久久久久vr| 97se亚洲国产综合自在线观| 欧美精品777| 国产精品看片你懂得| 日韩成人伦理电影在线观看| 国产大片一区二区| 制服.丝袜.亚洲.中文.综合| 美日韩一级片在线观看| 成人午夜电影网站| 欧美一区二区观看视频| 最新国产成人在线观看| 捆绑调教美女网站视频一区|