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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? elf.c

?? motorola自己開發(fā)的針對coldfire 5272的Dbug bootloader程序
?? C
字號:
/*
 * File:		elf.c
 * Purpose:		Data definitions and routines for downloading ELF files.
 *
 * Notes:
 *
 */

#include "src/include/dbug.h"
#include "src/uif/uif.h"

/********************************************************************/

typedef uint32	Elf32_Addr;
typedef uint32	Elf32_Word;
typedef uint16	Elf32_Half;
typedef uint32	Elf32_Off;
typedef int32	Elf32_Sword;

#define EI_NIDENT 16

#define ELF_IDENT			(0x7F454C46)	/* _ELF */
#define ELF_ETYPE_RELO		(1)
#define ELF_ETYPE_EXEC		(2)
#define ELF_EMACHINE_68K	(6)
#define ELF_EMACHINE_PPC	(20)
#define ELF_EVERSION		(1)

typedef struct
{
	unsigned char	e_ident[EI_NIDENT];
	Elf32_Half		e_type;
	Elf32_Half		e_machine;
	Elf32_Word		e_version;
	Elf32_Addr		e_entry;
	Elf32_Off		e_phoff;
	Elf32_Off		e_shoff;
	Elf32_Word		e_flags;
	Elf32_Half		e_ehsize;
	Elf32_Half		e_phentsize;
	Elf32_Half		e_phnum;
	Elf32_Half		e_shentsize;
	Elf32_Half		e_shnum;
	Elf32_Half		e_shstrndx;
} Elf32_Ehdr;

typedef struct
{
	Elf32_Word		p_type;
	Elf32_Off		p_offset;
	Elf32_Addr		p_vaddr;
	Elf32_Addr		p_paddr;
	Elf32_Word		p_filesz;
	Elf32_Word		p_memsz;
	Elf32_Word		p_flags;
	Elf32_Word		p_align;
} Elf32_Phdr;

typedef struct
{
	Elf32_Word		sh_name;
	Elf32_Word		sh_type;
	Elf32_Word		sh_flags;
	Elf32_Addr		sh_addr;
	Elf32_Off		sh_offset;
	Elf32_Word		sh_size;
	Elf32_Word		sh_link;
	Elf32_Word		sh_info;
	Elf32_Word		sh_addralign;
	Elf32_Word		sh_entsize;
} Elf32_Shdr;

#define SHT_NULL		(0)
#define SHT_PROGBITS	(1)
#define SHT_SYMTAB		(2)
#define SHT_STRTAB		(3)
#define SHT_RELA		(4)
#define SHT_NOBITS		(8)

typedef struct
{
	Elf32_Addr		r_offset;
	Elf32_Word		r_info;
	Elf32_Sword		r_addend;
} Elf32_Rel;

typedef struct
{
	Elf32_Word		st_name;
	Elf32_Addr		st_value;
	Elf32_Word		st_size;
	unsigned char	st_info;
	unsigned char	st_other;
	Elf32_Half		st_shndx;
} Elf32_Sym;

#define STB_LOCAL	(0)
#define STB_GLOBAL	(1)
#define STB_WEAK	(2)

#define STT_NOTYPE	(0)
#define STT_OBJECT	(1)
#define STT_FUNC	(2)
#define STT_SECTION	(3)
#define STT_FILE	(4)

#define SHN_UNDEF	(0)
#define SHN_ABS		(0xfff1)
#define SHN_COMMON	(0xfff2)

/********************************************************************/

#ifndef ELF_MAX_HDR
#define ELF_MAX_HDR (20)
#endif

static volatile int elf_bytes_read;
static int symndx, strndx;
static Elf32_Ehdr elfhdr;
static Elf32_Shdr scnhdr[ELF_MAX_HDR];
static uint32 scn_foffset;

/********************************************************************/
static void
elf_read (char *buf, int size)
{
	int i;

	for (i = 0; i < size; i++)
	{
		buf[i] = (char)board_dlio_getchar();
		++elf_bytes_read;
	}
}

/********************************************************************/
static void
elf_read_scndata (Elf32_Ehdr *elfhdr)
{
	Elf32_Shdr *scn;
	Elf32_Sym syment;
	char c, *p;
	int i, j, offset, symloaded = FALSE;
	uint32 foffset;
	char buffer[100];

	while (TRUE)
	{
		/*
		 * Locate next sequential section using sh_offset
		 */
		foffset = (uint32)~0;
		scn = NULL;
		for (i = 0; i < elfhdr->e_shnum; ++i)
		{
			if (scnhdr[i].sh_offset != 0)
			{
				if (scnhdr[i].sh_offset < foffset)
				{
					scn = &scnhdr[i];
					foffset = scn->sh_offset;
#ifdef HOST_DEBUG
printf("ScnData: %d\n", i);
#endif
				}
			}
		}

		if ((foffset == (uint32)~0) || (scn == NULL))
		{
			do 
			{ 
				elf_read(&c, 1); 
			} while (c != (char)-1);

			break; /* done! no more sections */
		}

		/*
 		 * Seek to Section data.
 		 */
 		for (i = elf_bytes_read; i < foffset; i++)
 			elf_read(&c, 1);

	   	switch (scn->sh_type)
		{
			case SHT_NULL:
				break;
			case SHT_PROGBITS:
				p = (char *)scn->sh_addr;
				if (board_dlio_vda((ADDRESS)p) && scn->sh_size)
				{
					for (j = 0; j < scn->sh_size; ++j)
					{
						elf_read((char *)&c, 1);
#ifndef HOST_DEBUG
						*p++ = c;
#else
						;
#endif
					}
				}
#if 0
				else
				{
					printf("\bError: Invalid download address: %#08X\n", p);
				}
#endif
				break;
			case SHT_SYMTAB:
				while (elf_bytes_read < (scn->sh_offset + scn->sh_size))
				{
					elf_read((char *)&syment, sizeof(Elf32_Sym));
#ifdef HOST_DEBUG
        printf(" st_name:  %08X\n",syment.st_name);
        printf(" st_value: %08X\n",syment.st_value);
        printf(" st_size:  %08X\n",syment.st_size);
        printf(" st_info:  %08X\n",syment.st_info);
        printf(" st_other: %08X\n",syment.st_other);
        printf(" st_shndx: %08X\n",syment.st_shndx);
#endif
					if (((syment.st_info >> 4) == STB_GLOBAL) &&
						(((syment.st_info & 15) == STT_OBJECT) ||
						((syment.st_info & 15) == STT_NOTYPE) ||
						((syment.st_info & 15) == STT_FUNC)))
					{
						symtab_add_incomplete(syment.st_name,syment.st_value);
					}
				}
				symloaded = TRUE;
				break;
			case SHT_STRTAB:
			    if (symloaded)
				{
				while (elf_bytes_read < (scn->sh_offset + scn->sh_size))
				{
					p = &buffer[0];
					i = 0;
					offset = elf_bytes_read - scn->sh_offset;

					/* All strings in section are NULL terminated */
					c = 'X';	/* non-NULL */
					while (c != '\0')
					{
						elf_read(&c, 1);
						if (++i < 100)
						{
							*p++ = c;
						}
						else
						{
							*p = '\0';
						}
					}
					symtab_add_complete(buffer,offset);
#ifdef HOST_DEBUG
					printf("String %08X %s\n",offset,buffer);
#endif
				}
				}
				break;
			case SHT_RELA:
				break;
			case SHT_NOBITS:
#if 1
				p = (char *)scn->sh_addr;
				if (board_dlio_vda((ADDRESS)p))
				{
					for (j = 0; j < scn->sh_size; ++j)
#ifndef HOST_DEBUG
						*p++ = 0;
#else
						;
#endif
				}
#if 0
				else
				{
					printf("\bError: Invalid download address: %#08X\n", p);
				}
#endif
#endif
				break;
			default:
				/* unknown section type */
				break;
		}
		scn->sh_offset = 0;	/* marked section as used */
	}
}

/********************************************************************/
static int
elf_read_scnhdr (Elf32_Ehdr *elfhdr)
{
	int i;
	char c;

	scn_foffset = (uint32)~0;
	symndx = -1;
	strndx = -1;

	if (elfhdr->e_shnum)
	{
		/*
 		 * Seek to Section Headers.
 		 */
 		for (i = elf_bytes_read; i < elfhdr->e_shoff; i++)
 			elf_read(&c, 1);
	}
	else
		return FALSE;

#ifdef HOST_DEBUG
	printf("elf_bytes_read: %08X %d\n", elf_bytes_read, elf_bytes_read);
#endif

	printf("\bSection Headers:\n");
	for (i = 0; i < elfhdr->e_shnum; ++i)
	{
		elf_read((char *)&scnhdr[i], sizeof(Elf32_Shdr));

		printf(" Section %d (Type: %08X, Addr: %08X, Size: %08X)\n",
			i, scnhdr[i].sh_type, scnhdr[i].sh_addr, scnhdr[i].sh_size);

#ifdef HOST_DEBUG
        printf(" sh_name:    %08X\n",scnhdr[i].sh_name);
        printf(" sh_type:    %08X\n",scnhdr[i].sh_type);
        printf(" sh_flags:   %08X\n",scnhdr[i].sh_flags);
        printf(" sh_addr:    %08X\n",scnhdr[i].sh_addr);
        printf(" sh_offset:  %08X\n",scnhdr[i].sh_offset);
        printf(" sh_size:    %08X\n",scnhdr[i].sh_size);
        printf(" sh_link:    %08X\n",scnhdr[i].sh_link);
        printf(" sh_info:    %08X\n",scnhdr[i].sh_info);
        printf(" sh_addalgn: %08X\n",scnhdr[i].sh_addralign);
        printf(" sh_entsize: %08X\n",scnhdr[i].sh_entsize);
#endif

		switch (scnhdr[i].sh_type)
		{
			case SHT_NULL:
				break;
			case SHT_PROGBITS:
				if (scnhdr[i].sh_offset < scn_foffset)
					scn_foffset = scnhdr[i].sh_offset;
				break;
			case SHT_SYMTAB:
				if (symndx < 0)
					 symndx = i;
				if (scnhdr[i].sh_offset < scn_foffset)
					scn_foffset = scnhdr[i].sh_offset;
				break;
			case SHT_STRTAB:
				if ((strndx < 0) && (i != elfhdr->e_shstrndx))
					strndx = i;
				if (scnhdr[i].sh_offset < scn_foffset)
					scn_foffset = scnhdr[i].sh_offset;
				break;
			case SHT_RELA:
				break;
			case SHT_NOBITS:
			default:
				/* unknown section type */
				break;
		}
	}

#ifdef HOST_DEBUG
	printf("elf_bytes_read: %08X %d\n", elf_bytes_read, elf_bytes_read);
#endif

	/*
	 * Check for symbol table existence and for string
	 * table existence AFTER symbol table.
	 */
	if ((symndx < 0) || (strndx < 0))
	{
		return FALSE;
	}

	if (symndx < strndx)
	{
		/*
		 * The symbol table entries MUST exist before the string
		 * entries, or else this information comes too late.
		 * (Unless you want to do a third pass!??  Not!
		 */
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

/********************************************************************/
static void
elf_read_pgmhdr(Elf32_Ehdr *elfhdr)
{
	Elf32_Phdr pgmhdr;
	int i;
	char c;

	if (elfhdr->e_phnum)
	{
		/*
		 * Seek to Program Headers.
		 */
		for (i = elf_bytes_read; i < elfhdr->e_phoff; i++)
			elf_read(&c, 1);

#ifdef HOST_DEBUG
	printf("elf_bytes_read: %08X %d\n", elf_bytes_read, elf_bytes_read);
#endif

 		printf("\bProgram Headers:\n");
		for (i = 0; i < elfhdr->e_phnum; ++i)
		{
			elf_read((char *)&pgmhdr, sizeof(Elf32_Phdr));
			printf(" Segment #%d (Vaddr: %08X, Paddr: %08X, Size: %08X)\n",
				i, pgmhdr.p_vaddr, pgmhdr.p_paddr, pgmhdr.p_memsz);

#ifdef HOST_DEBUG
        printf(" p_type:    %08X\n",pgmhdr.p_type);
        printf(" p_offset:  %08X\n",pgmhdr.p_offset);
        printf(" p_vaddr:   %08X\n",pgmhdr.p_vaddr);
        printf(" p_paddr:   %08X\n",pgmhdr.p_paddr);
        printf(" p_filesz:  %08X\n",pgmhdr.p_filesz);
        printf(" p_memsz:   %08X\n",pgmhdr.p_memsz);
        printf(" p_flags:   %08X\n",pgmhdr.p_flags);
        printf(" p_align:   %08X\n",pgmhdr.p_align);
#endif
		}
	}
}

/********************************************************************/
static int
elf_read_filehdr (Elf32_Ehdr *elfhdr)
{
	/*
	 * Copy ELF file header
	 */
	elf_read((char *)elfhdr, sizeof(Elf32_Ehdr));

#ifdef HOST_DEBUG
	{
		int i;
	    for (i = 0; i < EI_NIDENT; ++i)
	    {
	        printf("%02X ",elfhdr->e_ident[i]);
	    }
	    printf("\n");

	    printf("e_type:    %08X\n",elfhdr->e_type);
	    printf("e_machine: %08X\n",elfhdr->e_machine);
	    printf("e_version: %08X\n",elfhdr->e_version);
	    printf("e_entry:   %08X\n",elfhdr->e_entry);
	    printf("e_phoff:   %08X\n",elfhdr->e_phoff);
	    printf("e_shoff:   %08X\n",elfhdr->e_shoff);
	    printf("e_flags:   %08X\n",elfhdr->e_flags);
	    printf("e_ehsize:  %04X\n",elfhdr->e_ehsize);
	    printf("e_phentsize:  %04X\n",elfhdr->e_phentsize);
	    printf("e_phnum:  %04X\n",elfhdr->e_phnum);
	    printf("e_shentsize:  %04X\n",elfhdr->e_shentsize);
	    printf("e_shnum:  %04X\n",elfhdr->e_shnum);
	    printf("e_shstrndx:  %04X\n",elfhdr->e_shstrndx);
	}
#endif

	/*
	 * Check for basic problems
	 */
	if (elfhdr->e_ident[0] != 0x7F)
		goto error;
	if (elfhdr->e_ident[1] != 'E')
		goto error;
	if (elfhdr->e_ident[2] != 'L')
		goto error;
	if (elfhdr->e_ident[3] != 'F')
		goto error;
	if (!(elfhdr->e_type & ELF_ETYPE_EXEC))
		goto error;

#if 0
#if		(defined(CPU_ARCH_CF))
	if (elfhdr->e_machine != ELF_EMACHINE_68K)
		goto error;
#elif	(defined(CPU_ARCH_PPC))
	if (elfhdr->e_machine != ELF_EMACHINE_PPC)
		goto error;
#else
#error "Unsupported machine"
#endif
#endif

	if (elfhdr->e_ehsize != sizeof(Elf32_Ehdr))
		goto error;

	if (elfhdr->e_phentsize != sizeof(Elf32_Phdr))
		goto error;

	if (elfhdr->e_shentsize != sizeof(Elf32_Shdr))
		goto error;

	if (elfhdr->e_shnum > ELF_MAX_HDR)
	{
		printf("\bError: Too many Section Headers!!!\n");
		goto error;
	}

	/*noerror:*/
		cpu_pc_modify(elfhdr->e_entry);
		return TRUE;

	error:
		printf("\bError: Not a recognized ELF file!\n");
		return FALSE;
}

/********************************************************************/
int
download_elf (int passno)
{
	elf_bytes_read = 0;

	/*
	 * Pass # 1:  Obtain headers.
	 */
	if (passno == 1)
	{
		/*
		 * Step 1) Obtain the ELF file header.
		 */
		if (elf_read_filehdr(&elfhdr) != TRUE)
			return -1;
 
		/*
		 * Step 2) Obtain the Program and Section Headers.
		 */
		if (elfhdr.e_phoff < elfhdr.e_shoff)
		{
			elf_read_pgmhdr(&elfhdr);
			elf_read_scnhdr(&elfhdr);
		}
		else
		{
			elf_read_scnhdr(&elfhdr);
			elf_read_pgmhdr(&elfhdr);
		}

		/*
		 * The section data follows all headers in the ELF file
		 */
		if (elf_bytes_read <= scn_foffset)
		{
			elf_read_scndata(&elfhdr);
			return FALSE;
		}

		return TRUE;
	}
	else
	{
		/*
		 * Pass #2 - Get data
		 */
		elf_read_scndata(&elfhdr);
		return TRUE;
	}
}

#ifdef HOST_DEBUG
/********************************************************************/
int
main (int argc, char **argv)
{
    int passno;

    if (argc != 2)
    {
        printf("specify filename!\n");
        return -1;
    }

    for (passno = 1; passno <= 2; ++passno)
    {
        if ((fp = open(argv[1],O_RDONLY)) < 0)
        {
            printf("Error opening file: %s\n", argv[1]);
            return -1;
        }
        if (download_elf(passno) != TRUE)
        {
            close(fp);
            return;
        }
        close(fp);
    }
    return 0;
}

/********************************************************************/
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费观看高清完整版 | 欧美日韩亚洲综合| 久久 天天综合| 一区二区在线免费| 国产女主播一区| 欧美成人艳星乳罩| 国产精品久久久久9999吃药| 欧美美女激情18p| 色婷婷av一区二区三区gif| 黄页网站大全一区二区| 五月开心婷婷久久| 一区二区三区四区国产精品| 亚洲国产精品传媒在线观看| 欧美mv日韩mv亚洲| 欧美一区二区三区小说| 欧美性做爰猛烈叫床潮| 欧美在线观看禁18| 欧美影视一区在线| 91福利小视频| 在线观看日韩毛片| 在线亚洲一区观看| 在线观看一区日韩| 欧美色倩网站大全免费| 91久久久免费一区二区| 99精品国产99久久久久久白柏| 久久97超碰国产精品超碰| 欧美日韩亚洲综合在线| 在线国产亚洲欧美| 欧美精品在线视频| 欧美三片在线视频观看| 欧美图区在线视频| 51精品国自产在线| 欧美一区二区三区视频免费| 日韩欧美国产一区二区三区| 精品精品国产高清a毛片牛牛 | 亚洲男女毛片无遮挡| 亚洲美女电影在线| 婷婷综合另类小说色区| 蜜桃av噜噜一区| 成人开心网精品视频| 色综合久久六月婷婷中文字幕| 欧美亚洲精品一区| 亚洲一区二区视频在线观看| 亚洲一区二区三区小说| 捆绑调教美女网站视频一区| 大桥未久av一区二区三区中文| 91麻豆国产在线观看| 欧美一级久久久| 国产精品色在线| 日韩综合在线视频| 粉嫩欧美一区二区三区高清影视| 色先锋久久av资源部| 日韩天堂在线观看| 亚洲色图制服诱惑| 精品一区二区影视| 日本大香伊一区二区三区| 精品久久久久久最新网址| 亚洲欧美另类图片小说| 韩国女主播成人在线观看| 色天天综合色天天久久| 久久午夜国产精品| 五月天久久比比资源色| 国产精品美女久久久久久 | av电影在线观看一区| 欧美一级久久久| 亚洲午夜在线视频| 北条麻妃一区二区三区| 2024国产精品| 五月婷婷欧美视频| 色婷婷综合久久久久中文| 精品奇米国产一区二区三区| 一区二区三区日韩| 99热国产精品| 国产日韩欧美综合在线| 免费观看日韩电影| 欧美性猛交xxxx黑人交 | 欧美一区二区性放荡片| 亚洲一二三专区| 色狠狠桃花综合| 国产suv精品一区二区三区| 日韩久久免费av| 日本人妖一区二区| 91精品国产一区二区三区香蕉| 亚洲一区二区三区四区的| 972aa.com艺术欧美| **欧美大码日韩| 91麻豆6部合集magnet| 自拍偷拍亚洲综合| 日本韩国一区二区| 亚洲小说欧美激情另类| 欧美网站一区二区| 亚洲成人精品影院| 91.xcao| 美腿丝袜亚洲一区| 久久综合久久综合久久| 国产成人精品三级| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩美女久久久| 99精品视频在线免费观看| 亚洲色图视频网站| 欧美图区在线视频| 九九视频精品免费| 国产精品素人视频| 欧美日韩激情在线| 久草精品在线观看| 中文字幕佐山爱一区二区免费| 在线观看av一区二区| 久久av老司机精品网站导航| 国产精品网站在线观看| 色网综合在线观看| 美国av一区二区| 中文字幕欧美一| 91精品国产综合久久福利软件| 国产福利91精品| 午夜精品国产更新| 精品美女一区二区三区| 国产精品久久久久久久久晋中| 欧美性大战xxxxx久久久| 亚洲男人的天堂网| 欧美成人女星排名| 99九九99九九九视频精品| 青青草国产成人99久久| 亚洲免费资源在线播放| 精品国产亚洲一区二区三区在线观看| av中文字幕一区| 激情综合五月天| 亚洲成人先锋电影| 专区另类欧美日韩| 国产情人综合久久777777| 欧美丝袜丝交足nylons图片| 高清视频一区二区| 六月丁香婷婷久久| 亚洲444eee在线观看| 伊人一区二区三区| 国产精品高潮久久久久无| 精品国产髙清在线看国产毛片| 欧美天堂亚洲电影院在线播放| 国产a区久久久| 国产精品一区二区x88av| 青青草伊人久久| 午夜a成v人精品| 婷婷综合五月天| 性感美女久久精品| 亚洲最新视频在线观看| 亚洲欧美日韩国产中文在线| 国产欧美一区视频| 国产欧美一区二区三区在线看蜜臀 | 日本成人在线网站| 亚洲国产一区二区三区青草影视| 玉米视频成人免费看| 亚洲天天做日日做天天谢日日欢 | 国产一区中文字幕| 久久精品国产一区二区三区免费看| 午夜精品国产更新| 色婷婷亚洲综合| 欧洲一区二区三区在线| 欧美日韩国产影片| 这里只有精品99re| 欧美精品一区二区三区一线天视频 | 国产自产v一区二区三区c| 国产主播一区二区三区| 丰满少妇在线播放bd日韩电影| 成人av网站免费| 欧美亚洲综合一区| 欧美一区二区在线视频| 久久视频一区二区| 国产精品成人在线观看| 亚洲午夜精品久久久久久久久| 视频在线观看国产精品| 激情综合亚洲精品| 成人av集中营| 欧美久久久久久久久中文字幕| 日韩欧美一级二级| 国产精品麻豆视频| 亚洲成人精品在线观看| 激情欧美一区二区三区在线观看| 国产91精品露脸国语对白| 欧美在线观看一二区| 亚洲精品在线网站| 一区二区三区在线观看网站| 欧美日精品一区视频| 国产亚洲一二三区| 亚洲综合免费观看高清完整版 | 色综合久久综合中文综合网| 91精品啪在线观看国产60岁| 欧美高清在线视频| 日韩精品久久久久久| 成人av动漫在线| www久久精品| 亚洲成人黄色小说| 成人涩涩免费视频| 日韩欧美久久一区| 亚洲美女屁股眼交| 高清国产午夜精品久久久久久| 欧美日韩你懂得| 日韩一区欧美小说| 国模冰冰炮一区二区| 51精品国自产在线| 亚洲一区二区三区中文字幕在线| 成人精品免费看|