⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httag.cc

📁 功能较全面的反汇编器:反汇编器ht-2.0.15.tar.gz
💻 CC
📖 第 1 页 / 共 3 页
字号:
				statictag_str += 2+8+8+8+8+2+len;				break;			}			case HT_STATICTAG_FLAGS: {				ofs = hexd(statictag_str+2);				id = hexd(statictag_str+2+8);				tag_str = tag_make_flags(tag_str, tag_str_end-tag_str, id, ofs+relocation);				statictag_str += 2+8+8;				break;			}			case HT_STATICTAG_GROUP:				tag_str = tag_make_group(tag_str, tag_str_end-tag_str);				statictag_str += 2;				break;			case HT_STATICTAG_COLOR: {				byte color = hexb(statictag_str+2);				tag_str = tag_make_color(tag_str, tag_str_end-tag_str, color);				statictag_str += 2+2;				break;			}			default:				HT_ERROR("error in statictag string!");			}		} else {			if (tag_str < tag_str_end) {				*tag_str++ = *statictag_str;			}			statictag_str++;		}	}	*tag_str = 0;}TAGSTRING *tag_findnext(const TAGSTRING *tagstring){	return strchr(tagstring, '\e');}int tag_get_len(const TAGSTRING *tagstring){	assert(tagstring && tagstring[0] == '\e');	switch (tagstring[1]) {	case HT_TAG_EDIT_BYTE:		return HT_TAG_EDIT_BYTE_LEN;	case HT_TAG_EDIT_WORD_LE:		return HT_TAG_EDIT_WORD_LE_LEN;	case HT_TAG_EDIT_DWORD_LE:		return HT_TAG_EDIT_DWORD_LE_LEN;	case HT_TAG_EDIT_QWORD_LE:		return HT_TAG_EDIT_QWORD_LE_LEN;	case HT_TAG_EDIT_WORD_BE:		return HT_TAG_EDIT_WORD_BE_LEN;	case HT_TAG_EDIT_DWORD_BE:		return HT_TAG_EDIT_DWORD_BE_LEN;	case HT_TAG_EDIT_QWORD_BE:		return HT_TAG_EDIT_QWORD_BE_LEN;	case HT_TAG_EDIT_WORD_VE:		return HT_TAG_EDIT_WORD_VE_LEN;	case HT_TAG_EDIT_DWORD_VE:		return HT_TAG_EDIT_DWORD_VE_LEN;	case HT_TAG_EDIT_QWORD_VE:		return HT_TAG_EDIT_QWORD_VE_LEN;	case HT_TAG_EDIT_TIME_LE:		return HT_TAG_EDIT_TIME_LE_LEN;	case HT_TAG_EDIT_TIME_BE:		return HT_TAG_EDIT_TIME_BE_LEN;	case HT_TAG_EDIT_TIME_VE:		return HT_TAG_EDIT_TIME_VE_LEN;	case HT_TAG_EDIT_CHAR:		return HT_TAG_EDIT_CHAR_LEN;	case HT_TAG_EDIT_BIT:		return HT_TAG_EDIT_BIT_LEN;	case HT_TAG_EDIT_SELVIS:		return HT_TAG_EDIT_SELVIS_LEN;	case HT_TAG_SEL:		return HT_TAG_SEL_LEN(((ht_tag_sel*)tagstring)->strlen);	case HT_TAG_FLAGS:		return HT_TAG_FLAGS_LEN;	case HT_TAG_COLOR:		return HT_TAG_COLOR_LEN;	case HT_TAG_GROUP:		return HT_TAG_GROUP_LEN;	case HT_TAG_DESC_BYTE:		return HT_TAG_DESC_BYTE_LEN;	case HT_TAG_DESC_WORD_LE:		return HT_TAG_DESC_WORD_LE_LEN;	case HT_TAG_DESC_DWORD_LE:		return HT_TAG_DESC_DWORD_LE_LEN;	case HT_TAG_DESC_QWORD_LE:		return HT_TAG_DESC_QWORD_LE_LEN;	case HT_TAG_DESC_WORD_BE:		return HT_TAG_DESC_WORD_BE_LEN;	case HT_TAG_DESC_DWORD_BE:		return HT_TAG_DESC_DWORD_BE_LEN;	case HT_TAG_DESC_QWORD_BE:		return HT_TAG_DESC_QWORD_BE_LEN;	case HT_TAG_DESC_WORD_VE:		return HT_TAG_DESC_WORD_VE_LEN;	case HT_TAG_DESC_DWORD_VE:		return HT_TAG_DESC_DWORD_VE_LEN;	case HT_TAG_DESC_QWORD_VE:		return HT_TAG_DESC_QWORD_VE_LEN;	}	assert(0);	return -1;}int tag_get_vlen(const TAGSTRING *tagstring){	assert(tagstring && tagstring[0] == '\e');	switch (tagstring[1]) {	case HT_TAG_EDIT_BYTE:		return HT_TAG_EDIT_BYTE_VLEN;	case HT_TAG_EDIT_WORD_LE:		return HT_TAG_EDIT_WORD_LE_VLEN;	case HT_TAG_EDIT_DWORD_LE:		return HT_TAG_EDIT_DWORD_LE_VLEN;	case HT_TAG_EDIT_QWORD_LE:		return HT_TAG_EDIT_QWORD_LE_VLEN;	case HT_TAG_EDIT_WORD_BE:		return HT_TAG_EDIT_WORD_BE_VLEN;	case HT_TAG_EDIT_DWORD_BE:		return HT_TAG_EDIT_DWORD_BE_VLEN;	case HT_TAG_EDIT_QWORD_BE:		return HT_TAG_EDIT_QWORD_BE_VLEN;	case HT_TAG_EDIT_WORD_VE:		return HT_TAG_EDIT_WORD_VE_VLEN;	case HT_TAG_EDIT_DWORD_VE:		return HT_TAG_EDIT_DWORD_VE_VLEN;	case HT_TAG_EDIT_QWORD_VE:		return HT_TAG_EDIT_QWORD_VE_VLEN;	case HT_TAG_EDIT_TIME_LE:		return HT_TAG_EDIT_TIME_LE_VLEN;	case HT_TAG_EDIT_TIME_BE:		return HT_TAG_EDIT_TIME_BE_VLEN;	case HT_TAG_EDIT_TIME_VE:		return HT_TAG_EDIT_TIME_VE_VLEN;	case HT_TAG_EDIT_CHAR:		return HT_TAG_EDIT_CHAR_VLEN;	case HT_TAG_EDIT_BIT:		return HT_TAG_EDIT_BIT_VLEN;	case HT_TAG_EDIT_SELVIS:		return HT_TAG_EDIT_SELVIS_VLEN;	case HT_TAG_SEL:		return HT_TAG_SEL_VLEN(((ht_tag_sel*)tagstring)->strlen);	default:		return 0;	}}static int time_mp[14] = {0,1,3,4,6,7,9,10,12,13,15,16,17,18};int tag_get_micropos(const TAGSTRING *tagstring, int i){	switch (tagstring[1]) {	case HT_TAG_EDIT_BYTE:	case HT_TAG_EDIT_WORD_LE:	case HT_TAG_EDIT_DWORD_LE:	case HT_TAG_EDIT_QWORD_LE:	case HT_TAG_EDIT_WORD_BE:	case HT_TAG_EDIT_DWORD_BE:	case HT_TAG_EDIT_QWORD_BE:	case HT_TAG_EDIT_WORD_VE:	case HT_TAG_EDIT_DWORD_VE:	case HT_TAG_EDIT_QWORD_VE:	case HT_TAG_EDIT_CHAR:	case HT_TAG_EDIT_BIT:		return i;	case HT_TAG_EDIT_TIME_LE:	case HT_TAG_EDIT_TIME_BE:	case HT_TAG_EDIT_TIME_VE:		return time_mp[i];	}//	assert(0);	return -1;}int tag_get_microsize(const TAGSTRING *tagstring){	switch (tagstring[1]) {	case HT_TAG_EDIT_BYTE:		return HT_TAG_EDIT_BYTE_VLEN;	case HT_TAG_EDIT_WORD_LE:		return HT_TAG_EDIT_WORD_LE_VLEN;	case HT_TAG_EDIT_DWORD_LE:		return HT_TAG_EDIT_DWORD_LE_VLEN;	case HT_TAG_EDIT_QWORD_LE:		return HT_TAG_EDIT_QWORD_LE_VLEN;	case HT_TAG_EDIT_WORD_BE:		return HT_TAG_EDIT_WORD_BE_VLEN;	case HT_TAG_EDIT_DWORD_BE:		return HT_TAG_EDIT_DWORD_BE_VLEN;	case HT_TAG_EDIT_QWORD_BE:		return HT_TAG_EDIT_QWORD_BE_VLEN;	case HT_TAG_EDIT_WORD_VE:		return HT_TAG_EDIT_WORD_VE_VLEN;	case HT_TAG_EDIT_DWORD_VE:		return HT_TAG_EDIT_DWORD_VE_VLEN;	case HT_TAG_EDIT_QWORD_VE:		return HT_TAG_EDIT_QWORD_VE_VLEN;	case HT_TAG_EDIT_TIME_LE:	case HT_TAG_EDIT_TIME_BE:	case HT_TAG_EDIT_TIME_VE:		return 14;	case HT_TAG_EDIT_CHAR:		return HT_TAG_EDIT_CHAR_VLEN;	case HT_TAG_EDIT_BIT:		return HT_TAG_EDIT_BIT_VLEN;	default:		return 1;	}}int tag_get_size(const TAGSTRING *tagstring){	switch (tagstring[1]) {	case HT_TAG_EDIT_BYTE:		return HT_TAG_EDIT_BYTE_SIZE;	case HT_TAG_EDIT_WORD_LE:		return HT_TAG_EDIT_WORD_LE_SIZE;	case HT_TAG_EDIT_DWORD_LE:		return HT_TAG_EDIT_DWORD_LE_SIZE;	case HT_TAG_EDIT_QWORD_LE:		return HT_TAG_EDIT_QWORD_LE_SIZE;	case HT_TAG_EDIT_WORD_BE:		return HT_TAG_EDIT_WORD_BE_SIZE;	case HT_TAG_EDIT_DWORD_BE:		return HT_TAG_EDIT_DWORD_BE_SIZE;	case HT_TAG_EDIT_QWORD_BE:		return HT_TAG_EDIT_QWORD_BE_SIZE;	case HT_TAG_EDIT_WORD_VE:		return HT_TAG_EDIT_WORD_VE_SIZE;	case HT_TAG_EDIT_DWORD_VE:		return HT_TAG_EDIT_DWORD_VE_SIZE;	case HT_TAG_EDIT_QWORD_VE:		return HT_TAG_EDIT_QWORD_VE_SIZE;	case HT_TAG_EDIT_TIME_LE:		return HT_TAG_EDIT_TIME_LE_SIZE;	case HT_TAG_EDIT_TIME_BE:		return HT_TAG_EDIT_TIME_BE_SIZE;	case HT_TAG_EDIT_TIME_VE:		return HT_TAG_EDIT_TIME_VE_SIZE;	case HT_TAG_EDIT_CHAR:		return HT_TAG_EDIT_CHAR_SIZE;	case HT_TAG_EDIT_BIT:		return HT_TAG_EDIT_BIT_SIZE;	default:		return 0;	}}FileOfs tag_get_offset(const TAGSTRING *tagstring){	FileOfs f;	switch (tagstring[1]) {	case HT_TAG_EDIT_BYTE: {		UNALIGNED_MOVE(f, ((ht_tag_edit_byte*)tagstring)->offset);		return f;	}	case HT_TAG_EDIT_WORD_LE:	case HT_TAG_EDIT_WORD_BE:	case HT_TAG_EDIT_WORD_VE: {		UNALIGNED_MOVE(f, ((ht_tag_edit_word_generic*)tagstring)->offset);		return f;	}	case HT_TAG_EDIT_DWORD_LE:	case HT_TAG_EDIT_DWORD_BE:	case HT_TAG_EDIT_DWORD_VE: {		UNALIGNED_MOVE(f, ((ht_tag_edit_dword_generic*)tagstring)->offset);		return f;	}	case HT_TAG_EDIT_QWORD_LE:	case HT_TAG_EDIT_QWORD_BE:	case HT_TAG_EDIT_QWORD_VE: {		UNALIGNED_MOVE(f, ((ht_tag_edit_qword_generic*)tagstring)->offset);		return f;	}	case HT_TAG_EDIT_TIME_LE:	case HT_TAG_EDIT_TIME_BE:	case HT_TAG_EDIT_TIME_VE: {		UNALIGNED_MOVE(f, ((ht_tag_edit_time*)tagstring)->offset);		return f;	}	case HT_TAG_EDIT_CHAR: {		UNALIGNED_MOVE(f, ((ht_tag_edit_char*)tagstring)->offset);		return f;	}	case HT_TAG_EDIT_BIT: {		UNALIGNED_MOVE(f, ((ht_tag_edit_bit*)tagstring)->offset);		return f;	}	case HT_TAG_EDIT_SELVIS: {		UNALIGNED_MOVE(f, ((ht_tag_edit_selvis*)tagstring)->offset);		return f;	}	case HT_TAG_DESC_BYTE: {		UNALIGNED_MOVE(f, ((ht_tag_desc_byte*)tagstring)->offset);		return f;	}	case HT_TAG_DESC_WORD_LE:	case HT_TAG_DESC_WORD_BE:	case HT_TAG_DESC_WORD_VE: {		UNALIGNED_MOVE(f, ((ht_tag_desc_word_generic*)tagstring)->offset);		return f;	}	case HT_TAG_DESC_DWORD_LE:	case HT_TAG_DESC_DWORD_BE:	case HT_TAG_DESC_DWORD_VE: {		UNALIGNED_MOVE(f, ((ht_tag_desc_dword_generic*)tagstring)->offset);		return f;	}	case HT_TAG_DESC_QWORD_LE:	case HT_TAG_DESC_QWORD_BE:	case HT_TAG_DESC_QWORD_VE: {		UNALIGNED_MOVE(f, ((ht_tag_desc_qword_generic*)tagstring)->offset);		return f;	}	case HT_TAG_FLAGS:		UNALIGNED_MOVE(f, ((ht_tag_flags*)tagstring)->offset);		return f;	}	assert(0);	return 0;}void tag_get_id(const TAGSTRING *tagstring, uint32 *id128_1, uint32 *id128_2, uint32 *id128_3, uint32 *id128_4){	if (tagstring[1] == HT_TAG_SEL) {		UNALIGNED_MOVE(*id128_1, ((ht_tag_sel*)tagstring)->id128_1);		UNALIGNED_MOVE(*id128_2, ((ht_tag_sel*)tagstring)->id128_2);		UNALIGNED_MOVE(*id128_3, ((ht_tag_sel*)tagstring)->id128_3);		UNALIGNED_MOVE(*id128_4, ((ht_tag_sel*)tagstring)->id128_4);	}}TAGSTRING *tag_get_seltext(const TAGSTRING *tagstring){	return (TAGSTRING *)(tagstring + sizeof(ht_tag_sel));}int tag_get_seltextlen(const TAGSTRING *tagstring){	if (tagstring[1] == HT_TAG_SEL) {		return ((ht_tag_sel*)tagstring)->strlen;	}	return -1;}vcp tag_get_color(const TAGSTRING *tagstring){	vcp c;	UNALIGNED_MOVE(c, ((ht_tag_color*)tagstring)->color);	return c;}bool tag_get_desc_id(const TAGSTRING *tagstring, uint32 *id){	switch (tagstring[1]) {	case HT_TAG_DESC_BYTE:		UNALIGNED_MOVE(*id, ((ht_tag_desc_byte*)tagstring)->id);		return true;	case HT_TAG_DESC_WORD_LE:	case HT_TAG_DESC_WORD_BE:	case HT_TAG_DESC_WORD_VE:		UNALIGNED_MOVE(*id, ((ht_tag_desc_word_generic*)tagstring)->id);		return true;	case HT_TAG_DESC_DWORD_LE:	case HT_TAG_DESC_DWORD_BE:	case HT_TAG_DESC_DWORD_VE:		UNALIGNED_MOVE(*id, ((ht_tag_desc_dword_generic*)tagstring)->id);		return true;	case HT_TAG_DESC_QWORD_LE:	case HT_TAG_DESC_QWORD_BE:	case HT_TAG_DESC_QWORD_VE:		UNALIGNED_MOVE(*id, ((ht_tag_desc_qword_generic*)tagstring)->id);		return true;	}	return false;}void tag_set_offset(const TAGSTRING *tagstring, FileOfs offset){	switch (tagstring[1]) {	case HT_TAG_EDIT_BYTE:		UNALIGNED_MOVE(((ht_tag_edit_byte*)tagstring)->offset, offset);		break;	case HT_TAG_EDIT_WORD_LE:	case HT_TAG_EDIT_WORD_BE:	case HT_TAG_EDIT_WORD_VE:		UNALIGNED_MOVE(((ht_tag_edit_word_generic*)tagstring)->offset, offset);		break;	case HT_TAG_EDIT_DWORD_LE:	case HT_TAG_EDIT_DWORD_BE:	case HT_TAG_EDIT_DWORD_VE:		UNALIGNED_MOVE(((ht_tag_edit_dword_generic*)tagstring)->offset, offset);		break;	case HT_TAG_EDIT_QWORD_LE:	case HT_TAG_EDIT_QWORD_BE:	case HT_TAG_EDIT_QWORD_VE:		UNALIGNED_MOVE(((ht_tag_edit_qword_generic*)tagstring)->offset, offset);		break;	case HT_TAG_EDIT_TIME_LE:	case HT_TAG_EDIT_TIME_BE:	case HT_TAG_EDIT_TIME_VE:		UNALIGNED_MOVE(((ht_tag_edit_time*)tagstring)->offset, offset);		break;	case HT_TAG_EDIT_CHAR:		UNALIGNED_MOVE(((ht_tag_edit_char*)tagstring)->offset, offset);		break;	case HT_TAG_EDIT_BIT:		UNALIGNED_MOVE(((ht_tag_edit_bit*)tagstring)->offset, offset);		break;	}}bool tag_is_editable(const TAGSTRING *tagstring){	switch (tagstring[1]) {	case HT_TAG_EDIT_BYTE:	case HT_TAG_EDIT_WORD_LE:	case HT_TAG_EDIT_DWORD_LE:	case HT_TAG_EDIT_QWORD_LE:	case HT_TAG_EDIT_WORD_BE:	case HT_TAG_EDIT_DWORD_BE:	case HT_TAG_EDIT_QWORD_BE:	case HT_TAG_EDIT_WORD_VE:	case HT_TAG_EDIT_DWORD_VE:	case HT_TAG_EDIT_QWORD_VE:	case HT_TAG_EDIT_TIME_LE:	case HT_TAG_EDIT_TIME_BE:	case HT_TAG_EDIT_TIME_VE:	case HT_TAG_EDIT_CHAR:	case HT_TAG_EDIT_BIT:		return true;	default:		return false;	}	assert(0);	return false;}void tag_strcat(TAGSTRING *dest, int maxlen, const TAGSTRING *src){	int l = tag_strlen(dest);	tag_strcpy(dest+l, maxlen-l, src);}void tag_strcpy(TAGSTRING *dest, int maxlen, const TAGSTRING *src){	if (maxlen > 0) {		maxlen--;		while (*src && maxlen) {			if (*src == '\e') {				int l = tag_get_len(src);				if (l > maxlen) {					tag_error(dest, maxlen);					return;				} else {					memcpy(dest, src, l);					dest += l;					src += l;					maxlen -= l;				}			} else {				*dest++ = *src++;				maxlen--;			}		}		*dest = 0;	}}TAGSTRING *tag_strdup(const TAGSTRING *tagstring){	if (!tagstring) return NULL;	int l = tag_strlen(tagstring);	TAGSTRING *s = ht_malloc(l + 1);	memcpy(s, tagstring, l);	s[l] = 0;	return s;}int tag_strlen(const TAGSTRING *tagstring){	int c = 0, r;	while (*tagstring) {		if (tagstring[0] == '\e') {			r = tag_get_len(tagstring);		} else {			r = 1;		}		tagstring += r;		c += r;	}	return c;}int tag_strvlen(const TAGSTRING *tagstring){	int c=0, r, v;	while (*tagstring) {		if (tagstring[0] == '\e') {			r = tag_get_len(tagstring);			v = tag_get_vlen(tagstring);		} else {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -