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

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

?? outtools.c

?? ELFkickers是一組elf工具
?? C
字號:
/* outtools.c: The higher-level output functions. * * Copyright (C) 1999-2001 by Brian Raiter, under the GNU General * Public License. No warranty. See COPYING for details. */#include	<stdio.h>#include	<stdlib.h>#include	<string.h>#include	"gen.h"#include	"elf.h"#include	"elftoc.h"#include	"pieces.h"#include	"addr.h"#include	"shdrtab.h"#include	"outbasic.h"#include	"outtools.h"/* Finds a representation of a integer value that uses, if possible, a * macro definition. r points to a set of count macro definitions. If * none of the ranges associated with the macro symbols includes the * given value, the number is returned as a hexadecimal constant. */char const *_getname(unsigned int item, names const *r, int count){    static char	buf[64];    int		i;    for (i = 0 ; i < count ; ++i) {	if (item == r[i].base)	    return r[i].name;	else if (item > r[i].base && item <= r[i].max) {	    sprintf(buf, "%s + %lu", r[i].name, item - r[i].base);	    return buf;	}    }    sprintf(buf, "0x%X", item);    return buf;}/* Finds a representation of a integer value that uses a bitwise-oring * of as many macro symbols as possible. f points to a set of count * macro definitions, each assumed to have one bit set. Any bits in * the value not included in the given symbols are returned as a * hexadecimal constant. */char const *_getflags(unsigned int item, names const *f, int count){    static char		buf[1024];    unsigned int	val;    int			i;    if (!item)	return "0";    val = item;    *buf = '\0';    for (i = 0 ; i < count ; ++i) {	if ((item & f[i].base) && !(item & f[i].max)) {	    val &= ~f[i].base;	    if (*buf)		strcat(buf, " | ");	    strcat(buf, f[i].name);	}    }    if (val)	sprintf(buf + strlen(buf), "%s0x%X", (*buf ? " | " : ""), val);    return buf;}/* Returns a string representation of a file offset value that, if * possible, is expressed as an offset into the C structure. If pindex * is not NULL, then its referenced value will be set to the index of * the file piece that is found to match the offset, or -1 if no such * piece exists. */char const *getoffstr(int offset, int *pindex){    static char	buf[128];    int		i;    if (!offset) {	strcpy(buf, "0");	i = 0;    } else if (offset == pieces[piecenum - 1].to) {	sprintf(buf, "sizeof(%s)", structname);	i = -1;    } else if (offset > pieces[piecenum - 1].to) {	sprintf(buf, "sizeof(%s) + 0x%X",		     structname, offset - pieces[piecenum - 1].to);	i = -1;    } else {	for (i = 0 ; i < piecenum ; ++i) {	    if (offset == pieces[i].from) {		sprintf(buf, "offsetof(%s, %s)", structname, pieces[i].name);		break;	    } else if (offset < pieces[i].to) {		sprintf(buf, "offsetof(%s, %s) + 0x%X",			      structname, pieces[i].name,			      offset - pieces[i].from);		i = -1;		break;	    }	}    }    if (pindex)	*pindex = i;    return buf;}/* Finds string representations of an offset and a memory address, and * also returns a piece index or -1, as above. The offset and the * address are assumed to be related, ideally with the offset also * being the offset of the address into one of the recorded memory * segments. Either of the string pointer arguments can be NULL if * the associated string representation is not needed. */int getmemstrs(Elf32_Addr addr, Elf32_Off offset,	       char const **paddrstr, char const **poffstr){    static char		buf[256];    char const	       *addrstr = NULL;    char const	       *offstr;    addrinfo const     *base;    unsigned int	diff;    int			index, n;    offstr = getoffstr(offset, &index);    if (!addr)	addrstr = "0";    else if (index > 0 && addr == offset)	addrstr = offstr;    else if ((base = getbaseaddr(addr))) {	if (addr == base->addr)	    addrstr = base->name;	else {	    addrstr = buf;	    diff = addr - base->addr;	    if (diff == offset) {		if (base->addr)		    sprintf(buf, "%s + %s", base->name, offstr);		else		    addrstr = offstr;	    } else {		n = 0;		if (base->addr)		    n += sprintf(buf + n, "%s + ", base->name);		if (index >= 0 && diff > offset) {		    diff -= pieces[index].from;		    n += sprintf(buf + n, "%s + ", offstr);		}		sprintf(buf + n, "0x%X", diff);	    }	}    } else if (index > 0 && (int)addr > pieces[index].from			 && (int)addr < pieces[index].to) {	addrstr = buf;	sprintf(buf, "%s + 0x%X", offstr,				  (unsigned)(addr - pieces[index].from));    }    if (paddrstr) {	if (!addrstr) {	    sprintf(buf, "0x%X", (unsigned)addr);	    addrstr = buf;	}	*paddrstr = addrstr;    }    if (poffstr)	*poffstr = offstr;    return index;}/* Returns a string representation of a memory address. This function * is similar to the previous one, but is used when no related file * offset value is present. If pindex is not NULL, then its referenced * value will be set to a piece index or -1, as above. */char const *getaddrstr(Elf32_Addr addr, int *pindex){    addrinfo const     *base;    char const	       *addrstr;    int			index;    if (!addr)	return "0";    base = getbaseaddr(addr);    if (base) {	if (addr == base->addr)	    return base->name;	index = getmemstrs(addr, addr - base->addr, &addrstr, NULL);    } else {	addrstr = getoffstr(addr, &index);	if (index < 0)	    index = getmemstrs(addr, 0, &addrstr, NULL);    }    if (pindex)	*pindex = index;    return addrstr;}/* Returns a string representation of a size value. If index is greater * than -1, it supplies a piece index that is believed to be associated * with the given size (usually which has been previously supplied by * the getoffstr function). */char const *getsizestr(int size, int index){    static char	buf[256];    pieceinfo  *piece = pieces + index;    int		i;    if (index < 0 || !size) {	sprintf(buf, "%d", size);	return buf;    }    piece = pieces + index;    if (size == piece->size) {	sprintf(buf, "sizeof %s.%s", varname, piece->name);	return buf;    } else if (size > piece->size) {	if (size == pieces[piecenum - 1].to) {	    sprintf(buf, "sizeof(%s)", structname);	    return buf;	} else if (size > pieces[piecenum - 1].to) {	    sprintf(buf, "sizeof(%s) + %d",		    structname, size - pieces[piecenum - 1].to);	    return buf;	} else if (size == pieces[piecenum - 1].to - piece->from) {	    sprintf(buf, "sizeof(%s) - offsetof(%s, %s)",		    structname, structname, piece->name);	    return buf;	} else if (size > pieces[piecenum - 1].to - piece->from) {	    sprintf(buf, "%d", size);	    return buf;	}    } else {	if (ctypes[piece->type].size > 1) {	    if (size == ctypes[piece->type].size) {		sprintf(buf, "sizeof %s.%s[0]", varname, piece->name);		return buf;	    } else if (size % ctypes[piece->type].size == 0) {		sprintf(buf, "sizeof %s.%s[0] * %u", varname, piece->name,					size / ctypes[piece->type].size);		return buf;	    }	}	if (piece->size % size == 0) {	    sprintf(buf, "sizeof %s.%s / %u", varname, piece->name,					      piece->size / size);	    return buf;	}	i = piece->size - size;	if (i * 8 < piece->size) {	    sprintf(buf, "sizeof %s.%s - %d", varname, piece->name, i);	    return buf;	}	sprintf(buf, "%d", size);	return buf;    }    for (i = index + 1 ; i < piecenum ; ++i) {	if (size == pieces[i].from - piece->from) {	    if (piece->from)		sprintf(buf, "offsetof(%s, %s) - offsetof(%s, %s)",			     structname, pieces[i].name,			     structname, piece->name);	    else		sprintf(buf, "offsetof(%s, %s)", structname, pieces[i].name);	    return buf;	} else if (size < pieces[i].from - piece->from)	    break;    }    sprintf(buf, "sizeof %s.%s + 0x%02X", varname, piece->name,					  size - piece->size);    return buf;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性做久久久久久久免费看| 国产伦精品一区二区三区免费迷| 天天av天天翘天天综合网色鬼国产 | 欧美一级理论片| 国产精品欧美久久久久无广告 | 香蕉影视欧美成人| 成人一区二区三区视频在线观看 | 日本美女一区二区三区视频| 福利视频网站一区二区三区| 欧美丰满高潮xxxx喷水动漫| 中文字幕乱码一区二区免费| 青青草91视频| 欧美影院精品一区| 中文欧美字幕免费| 麻豆精品视频在线观看视频| 在线欧美一区二区| 亚洲色图欧美偷拍| 成人性生交大片免费看中文 | 欧美日韩久久久久久| 日韩伦理电影网| 成人综合婷婷国产精品久久蜜臀| 欧美成人精精品一区二区频| 午夜久久久久久久久久一区二区| 91丝袜美女网| 中文字幕在线播放不卡一区| 丁香五精品蜜臀久久久久99网站| 欧美mv日韩mv国产网站app| 日韩中文字幕亚洲一区二区va在线 | 欧美日韩久久一区| 五月婷婷综合激情| 欧美日韩视频在线观看一区二区三区| 亚洲激情男女视频| 91老师片黄在线观看| 亚洲日本护士毛茸茸| av电影在线不卡| 国产精品私人自拍| www.av亚洲| 中文字幕一区二区日韩精品绯色| aaa欧美色吧激情视频| 日韩毛片一二三区| 色婷婷久久综合| 亚洲小少妇裸体bbw| 欧美电影一区二区三区| 日韩高清在线电影| 精品1区2区在线观看| 国产麻豆视频精品| 中文字幕在线一区二区三区| 91免费版pro下载短视频| 亚洲精品一卡二卡| 欧美日韩国产精品自在自线| 日韩国产精品大片| 精品剧情v国产在线观看在线| 国产精品1区二区.| 亚洲日本在线天堂| 6080亚洲精品一区二区| 美国一区二区三区在线播放| 久久在线观看免费| av激情成人网| 视频一区欧美日韩| 国产欧美一区二区精品婷婷| 93久久精品日日躁夜夜躁欧美| 亚洲福利视频导航| 2024国产精品视频| 色婷婷精品大在线视频| 捆绑变态av一区二区三区| 国产精品网站导航| 在线不卡的av| 高清不卡一区二区| 亚洲国产日韩精品| 久久久电影一区二区三区| 91久久香蕉国产日韩欧美9色| 日韩av午夜在线观看| 国产精品毛片久久久久久| 3751色影院一区二区三区| 国产精品一线二线三线| 性欧美疯狂xxxxbbbb| 国产亚洲婷婷免费| 欧美精品在线观看一区二区| 岛国精品一区二区| 免费美女久久99| 亚洲美女屁股眼交3| 久久免费电影网| 欧美色图天堂网| 成人黄色在线看| 久草精品在线观看| 亚洲va欧美va国产va天堂影院| 国产片一区二区| 日韩三级中文字幕| 欧美综合欧美视频| 91视视频在线观看入口直接观看www | 国产成人午夜99999| 日本三级亚洲精品| 亚洲男女毛片无遮挡| 国产欧美一区二区精品婷婷| 日韩三级在线免费观看| 欧美日本在线播放| 91麻豆蜜桃一区二区三区| 成人精品视频一区二区三区 | 亚洲国产成人在线| 精品国产精品网麻豆系列| 欧美日韩你懂的| 91成人国产精品| 色偷偷88欧美精品久久久| 99久久99久久综合| 懂色av一区二区三区蜜臀| 国产成人精品综合在线观看| 毛片基地黄久久久久久天堂| 天天免费综合色| 亚洲一区日韩精品中文字幕| 一区二区三区日韩欧美| 最近中文字幕一区二区三区| 国产精品另类一区| 国产拍欧美日韩视频二区| 久久精品人人做人人综合 | 日韩毛片一二三区| 亚洲欧美综合在线精品| 亚洲欧洲av一区二区三区久久| 久久久精品免费观看| 国产色91在线| 国产精品久久久久一区二区三区共| 欧美精品一区二区三区很污很色的| 欧美一区二区三区色| 精品国产1区2区3区| 久久五月婷婷丁香社区| 日韩女优av电影在线观看| 欧美精品一区二区三区很污很色的 | 国产精品网曝门| 亚洲欧洲日韩在线| 亚洲欧美偷拍卡通变态| 亚洲综合视频网| 免费黄网站欧美| 国产精品资源站在线| 成人精品一区二区三区四区| 91女人视频在线观看| 欧美日韩一区视频| 欧美一区二区三区精品| 久久夜色精品一区| 国产精品剧情在线亚洲| 亚洲成av人片一区二区三区| 日韩成人精品在线| 国产大陆a不卡| 在线欧美一区二区| 欧美刺激午夜性久久久久久久| 久久九九久精品国产免费直播| 国产精品嫩草影院com| 亚洲成年人网站在线观看| 国产自产高清不卡| 91理论电影在线观看| 欧美一区二区三区精品| 国产精品每日更新| 日韩电影在线观看一区| 成人性生交大片免费看视频在线| 欧美最猛黑人xxxxx猛交| 精品粉嫩超白一线天av| 有坂深雪av一区二区精品| 久久国产欧美日韩精品| 91在线免费看| 亚洲精品在线三区| 一二三区精品福利视频| 韩国理伦片一区二区三区在线播放| 99久久国产综合精品色伊| 日韩视频中午一区| 日韩美女精品在线| 狠狠狠色丁香婷婷综合激情| 日本福利一区二区| 国产情人综合久久777777| 日韩高清不卡在线| 一本久道中文字幕精品亚洲嫩| 欧美大黄免费观看| 一区二区三区在线视频免费| 精品一区二区三区日韩| 欧美日韩一区二区三区不卡 | av午夜一区麻豆| 精品久久久久99| 午夜影视日本亚洲欧洲精品| a级高清视频欧美日韩| 国产网红主播福利一区二区| 天堂va蜜桃一区二区三区漫画版| 波波电影院一区二区三区| 久久综合色天天久久综合图片| 视频一区二区中文字幕| 91激情五月电影| 国产精品剧情在线亚洲| 国产在线播放一区| 日韩欧美精品三级| 婷婷丁香久久五月婷婷| 欧美综合天天夜夜久久| 亚洲精品欧美二区三区中文字幕| 成人a免费在线看| 久久久精品综合| 国产自产视频一区二区三区 | 欧美一级高清片| 亚洲国产日韩a在线播放| 一本久久精品一区二区| 亚洲色图清纯唯美| 色丁香久综合在线久综合在线观看| 中文字幕在线免费不卡| av在线一区二区三区| 综合在线观看色| 91在线免费视频观看|