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

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

?? pef_analy.cc

?? 功能較全面的反匯編器:反匯編器ht-2.0.15.tar.gz
?? CC
字號:
/*  *	HT Editor *	pef_analy.cc * *	Copyright (C) 1999-2002 Sebastian Biallas (sb@biallas.net) * *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License version 2 as *	published by the Free Software Foundation. * *	This program is distributed in the hope that it will be useful, *	but WITHOUT ANY WARRANTY; without even the implied warranty of *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *	GNU General Public License for more details. * *	You should have received a copy of the GNU General Public License *	along with this program; if not, write to the Free Software *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include "analy.h"#include "analy_names.h"#include "analy_ppc.h"#include "analy_register.h"#include "pef_analy.h"#include "htctrl.h"#include "htdebug.h"#include "htiobox.h"#include "htpef.h"#include "strtools.h"#include "pestruct.h"#include "snprintf.h"#include "x86asm.h"extern "C" {#include "demangle.h"}#include <stdio.h>#include <stdlib.h>#include <string.h>/* * */PEFAnalyser::PEFAnalyser(){}void PEFAnalyser::init(ht_pef_shared_data *Pef_shared, File *File){	pef_shared = Pef_shared;	file = File;	validarea = new Area();	validarea->init();	Analyser::init();}void PEFAnalyser::beginAnalysis(){//	Address *entry = NULL;//	entry = createAddress32(pef_shared->header32.e_entry);	setLocationTreeOptimizeThreshold(100);	setSymbolTreeOptimizeThreshold(100);	/*	 *	entrypoint	 *///	pushAddress(entry, entry);		/*	 *	give all sections a descriptive comment:	 */	PEF_SECTION_HEADER *s32=pef_shared->sheaders.sheaders;	char blub[100];	for (uint i=0; i < pef_shared->sheaders.count; i++) {		Address *secaddr;		secaddr = createAddress32(s32->defaultAddress);		if (validAddress(secaddr, scvalid)) {			ht_snprintf(blub, sizeof blub, ";  section %d <%s>", i, getSegmentNameByAddress(secaddr));			addComment(secaddr, 0, "");			addComment(secaddr, 0, ";******************************************************************");			addComment(secaddr, 0, blub);			ht_snprintf(blub, sizeof blub, ";  virtual address  %08x  virtual size   %08x", s32->defaultAddress, s32->totalSize);			addComment(secaddr, 0, blub);			ht_snprintf(blub, sizeof blub, ";  file offset      %08x  file size      %08x", s32->containerOffset, s32->packedSize);			addComment(secaddr, 0, blub);			addComment(secaddr, 0, ";******************************************************************");			// mark end of sections			ht_snprintf(blub, sizeof blub, ";  end of section <%s>", getSegmentNameByAddress(secaddr));			Address *secend_addr = secaddr->clone();			secend_addr->add(s32->totalSize);			newLocation(secend_addr)->flags |= AF_FUNCTION_END;			addComment(secend_addr, 0, "");			addComment(secend_addr, 0, ";******************************************************************");			addComment(secend_addr, 0, blub);			addComment(secend_addr, 0, ";******************************************************************");			validarea->add(secaddr, secend_addr);			delete secend_addr;		}		delete secaddr;		s32++;	}/* symbols *//*	for (uint i=1; i<pef_shared->sheaders.count; i++) {		if ((pef_shared->sheaders.sheaders32[i].sh_type==PEF_SHT_SYMTAB) || (pef_shared->sheaders.sheaders32[i].sh_type==PEF_SHT_DYNSYM)) {			initInsertSymbols(i);		}	}*//*	assignSymbol(entry, "entrypoint", label_func);	addComment(entry, 0, "");	addComment(entry, 0, ";****************************");	addComment(entry, 0, ";  executable entry point");	addComment(entry, 0, ";****************************");*/	setLocationTreeOptimizeThreshold(1000);	setSymbolTreeOptimizeThreshold(1000);//	delete entry;		Analyser::beginAnalysis();}/* * */void PEFAnalyser::initInsertSymbols(int shidx){/*	char pef_buffer[1024];	if (pef_shared->ident.e_ident[PEF_EI_CLASS] == PEFCLASS32) {		FileOfs h=pef_shared->sheaders.sheaders32[shidx].sh_offset;		FileOfs sto=pef_shared->sheaders.sheaders32[pef_shared->sheaders.sheaders32[shidx].sh_link].sh_offset;		uint symnum=pef_shared->sheaders.sheaders32[shidx].sh_size / sizeof (PEF_SYMBOL32);		int *entropy = random_permutation(symnum);		for (uint i=0; i<symnum; i++) {			PEF_SYMBOL32 sym;			if (entropy[i] == 0) continue;			file->seek(h+entropy[i]*sizeof (PEF_SYMBOL32));			file->read(&sym, sizeof sym);			createHostStruct(&sym, PEF_SYMBOL32_struct, pef_shared->byte_order);			file->seek(sto+sym.st_name);			char *name = fgetstrz(*file);			if (!name) continue;			switch (sym.st_shndx) {				case PEF_SHN_UNDEF:					break;				case PEF_SHN_ABS:					break;				case PEF_SHN_COMMON:					break;				default: {					// sym.st_shndx					break;				}			}			char *bind;			switch (PEF32_ST_BIND(sym.st_info)) {				case PEF_STB_LOCAL:					bind="local";					break;				case PEF_STB_GLOBAL:					bind="global";					break;				case PEF_STB_WEAK:					bind="weak";					break;				default:					bind="?";					break;			}			switch (PEF32_ST_TYPE(sym.st_info)) {				case PEF_STT_NOTYPE:				case PEF_STT_FUNC: {				char *label = name;					if (!getSymbolByName(label)) {						Address *address = createAddress32(sym.st_value);						if (validAddress(address, scvalid)) {							char *demangled = cplus_demangle(label, DMGL_PARAMS | DMGL_ANSI);							make_valid_name(label, label);							ht_snprintf(pef_buffer, sizeof pef_buffer, "; function %s (%s)", (demangled) ? demangled : label, bind);							if (demangled) free(demangled);							addComment(address, 0, "");							addComment(address, 0, ";********************************************************");							addComment(address, 0, pef_buffer);							addComment(address, 0, ";********************************************************");							pushAddress(address, address);							assignSymbol(address, label, label_func);						}						delete address;					}					break;				}				case PEF_STT_OBJECT: {					char *label = name;					if (!getSymbolByName(label)) {						Address *address = createAddress32(sym.st_value);						if (validAddress(address, scvalid)) {							char *demangled = cplus_demangle(label, DMGL_PARAMS | DMGL_ANSI);												make_valid_name(label, label);												ht_snprintf(pef_buffer, sizeof pef_buffer, "; data object %s, size %d (%s)", (demangled) ? demangled : label, sym.st_size, bind);							if (demangled) free(demangled);							addComment(address, 0, "");							addComment(address, 0, ";********************************************************");							addComment(address, 0, pef_buffer);							addComment(address, 0, ";********************************************************");							assignSymbol(address, label, label_data);						}						delete address;					}					break;				}				case PEF_STT_SECTION:				case PEF_STT_FILE:					break;			}			free(name);		}		if (entropy) free(entropy);	} else {		// FIXME: 64 bit		FileOfs h=pef_shared->sheaders.sheaders64[shidx].sh_offset.lo;		FileOfs sto=pef_shared->sheaders.sheaders64[pef_shared->sheaders.sheaders64[shidx].sh_link].sh_offset.lo;		uint symnum=pef_shared->sheaders.sheaders64[shidx].sh_size.lo / sizeof (PEF_SYMBOL64);		int *entropy = random_permutation(symnum);		for (uint i=0; i<symnum; i++) {			PEF_SYMBOL64 sym;			if (entropy[i] == 0) continue;			file->seek(h+entropy[i]*sizeof (PEF_SYMBOL64));			file->read(&sym, sizeof sym);			createHostStruct(&sym, PEF_SYMBOL64_struct, pef_shared->byte_order);			file->seek(sto+sym.st_name);			char *name = fgetstrz(file);			if (!name) continue;			switch (sym.st_shndx) {				case PEF_SHN_UNDEF:					break;				case PEF_SHN_ABS:					break;				case PEF_SHN_COMMON:					break;				default: {					// sym.st_shndx					break;				}			}			char *bind;			switch (PEF64_ST_BIND(sym.st_info)) {				case PEF_STB_LOCAL:					bind="local";					break;				case PEF_STB_GLOBAL:					bind="global";					break;				case PEF_STB_WEAK:					bind="weak";					break;				default:					bind="?";					break;			}			switch (PEF64_ST_TYPE(sym.st_info)) {				case PEF_STT_NOTYPE:				case PEF_STT_FUNC: {					char *label = name;					if (!getSymbolByName(label)) {						Address *address = createAddress64(sym.st_value);						char *demangled = cplus_demangle(label, DMGL_PARAMS | DMGL_ANSI);						make_valid_name(label, label);						ht_snprintf(pef_buffer, sizeof pef_buffer, "; function %s (%s)", (demangled) ? demangled : label, bind);						if (demangled) free(demangled);						addComment(address, 0, "");						addComment(address, 0, ";********************************************************");						addComment(address, 0, pef_buffer);						addComment(address, 0, ";********************************************************");						pushAddress(address, address);						assignSymbol(address, label, label_func);												delete address;					}					break;				}				case PEF_STT_OBJECT: {					char *label = name;					if (!getSymbolByName(label)) {						Address *address = createAddress64(sym.st_value);						char *demangled = cplus_demangle(label, DMGL_PARAMS | DMGL_ANSI);											make_valid_name(label, label);											ht_snprintf(pef_buffer, sizeof pef_buffer, "; data object %s, size %d (%s)", (demangled) ? demangled : label, sym.st_size.lo, bind);						if (demangled) free(demangled);						addComment(address, 0, "");						addComment(address, 0, ";********************************************************");						addComment(address, 0, pef_buffer);						addComment(address, 0, ";********************************************************");						assignSymbol(address, label, label_data);												delete address;					}					break;				}				case PEF_STT_SECTION:				case PEF_STT_FILE:					break;			}			free(name);		}		if (entropy) free(entropy);	}*/}/* * */void PEFAnalyser::load(ObjectStream &f){	GET_OBJECT(f, validarea);	return Analyser::load(f);}/* * */void PEFAnalyser::done(){	validarea->done();	delete validarea;	Analyser::done();}ObjectID PEFAnalyser::getObjectID() const{	return ATOM_PEF_ANALYSER;}/* * */uint PEFAnalyser::bufPtr(Address *Addr, byte *buf, int size){	FileOfs ofs = addressToFileofs(Addr);/*     if (ofs == INVALID_FILE_OFS) {		int as = 1;	}*/	assert(ofs != INVALID_FILE_OFS);	file->seek(ofs);	return file->read(buf, size);;}bool PEFAnalyser::convertAddressToPEFAddress(Address *addr, PEFAddress *r){	if (addr->getObjectID()==ATOM_ADDRESS_FLAT_32) {		r->a32 = ((AddressFlat32*)addr)->addr;		return true;	} else {		return false;	}}Address *PEFAnalyser::createAddress(){	return new AddressFlat32();}Address *PEFAnalyser::createAddress32(uint32 addr){	return new AddressFlat32(addr);}Address *PEFAnalyser::createAddress64(uint64 addr){	return new AddressFlat64(addr);}/* * */Assembler *PEFAnalyser::createAssembler(){	return NULL;}/* * */FileOfs PEFAnalyser::addressToFileofs(Address *Addr){	if (validAddress(Addr, scinitialized)) {		uint32 ofs;		PEFAddress ea;		if (!convertAddressToPEFAddress(Addr, &ea)) return INVALID_FILE_OFS;		if (!pef_addr_to_ofs(&pef_shared->sheaders, ea, &ofs)) return INVALID_FILE_OFS;		return ofs;	} else {		return INVALID_FILE_OFS;	}}/* * */const char *PEFAnalyser::getSegmentNameByAddress(Address *Addr){	static char pef_sectionname[33];	pef_section_headers *sections=&pef_shared->sheaders;	int i;	PEFAddress ea;	if (!convertAddressToPEFAddress(Addr, &ea)) return NULL;	if (!pef_addr_to_section(sections, ea, &i)) return NULL;	if (pef_shared->sheaders.sheaders[i].nameOffset == 0xffffffff) {		ht_snprintf(pef_sectionname, sizeof pef_sectionname, "unnamed%d", i);	} else {//		ht_strlcpy(pef_sectionname, pef_shared->shnames[i], 32);		strcpy(pef_sectionname, "nyi");	}	return pef_sectionname;}/* * */String &PEFAnalyser::getName(String &res){	return file->getDesc(res);}/* * */const char *PEFAnalyser::getType(){	return "PEF/Analyser";}/* * */void PEFAnalyser::initCodeAnalyser(){	Analyser::initCodeAnalyser();}/* * */void PEFAnalyser::initUnasm(){	DPRINTF("pef_analy: ");	switch (pef_shared->arch) {	case PEFARCH_PowerPC:		DPRINTF("initing analy_ppc_disassembler\n");		analy_disasm = new AnalyPPCDisassembler();		((AnalyPPCDisassembler*)analy_disasm)->init(this, ANALY_PPC_32);		break;	case PEFARCH_M68K:		DPRINTF("no disassembler for machine 'm68k'\n");		warnbox("No disassembler for machine 'm68k'!");		break;	default:		break;	}}/* * */void PEFAnalyser::log(const char *msg){	/*	 *	log() does to much traffic so dont log	 *   perhaps we reactivate this later	 *	 *//*	LOG(msg);*/}/* * */Address *PEFAnalyser::nextValid(Address *Addr){	return (Address *)validarea->findNext(Addr);}/* * */void PEFAnalyser::store(ObjectStream &f) const{	PUT_OBJECT(f, validarea);	Analyser::store(f);}/* * */int PEFAnalyser::queryConfig(int mode){	switch (mode) {		case Q_DO_ANALYSIS:		case Q_ENGAGE_CODE_ANALYSER:		case Q_ENGAGE_DATA_ANALYSER:			return true;		default:			return 0;	}}/* * */Address *PEFAnalyser::fileofsToAddress(FileOfs fileofs){	PEFAddress ea;	if (pef_ofs_to_addr(&pef_shared->sheaders, fileofs, &ea)) {		return createAddress32(ea.a32);	} else {		return new InvalidAddress();	}}/* * */bool PEFAnalyser::validAddress(Address *Addr, tsectype action){	pef_section_headers *sections=&pef_shared->sheaders;	int sec;	PEFAddress ea;	if (!convertAddressToPEFAddress(Addr, &ea)) return false;	if (!pef_addr_to_section(sections, ea, &sec)) return false;	PEF_SECTION_HEADER *s = sections->sheaders + sec;	switch (action) {		case scvalid:			return true;		case scread:			return true;		case scwrite:		case screadwrite:			return (s->sectionKind == 1) ||				(s->sectionKind == 2) ||				(s->sectionKind == 6);		case sccode:			return (s->sectionKind == 0);		case scinitialized:			return (s->sectionKind == 0) ||				(s->sectionKind == 1) ||				(s->sectionKind == 3) ||				(s->sectionKind == 6)	/* FIXME: is 6 really initialized ? */;	}	return false;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
制服丝袜中文字幕一区| 亚洲欧美日韩在线不卡| 国产91精品露脸国语对白| 国产精品视频yy9299一区| 国产亚洲欧洲一区高清在线观看| 日韩视频免费观看高清完整版 | 久久综合久久综合久久| 一区二区三区在线免费视频| 国产盗摄视频一区二区三区| 宅男噜噜噜66一区二区66| 最新不卡av在线| 成人丝袜18视频在线观看| 精品精品国产高清a毛片牛牛| 一区二区三区四区不卡在线| 成人国产亚洲欧美成人综合网| 日韩一区二区中文字幕| 图片区小说区区亚洲影院| 色激情天天射综合网| 中文字幕亚洲精品在线观看| 懂色av噜噜一区二区三区av| 精品免费视频一区二区| 秋霞成人午夜伦在线观看| 欧美日韩成人综合天天影院 | 国产视频一区在线观看| 蜜桃免费网站一区二区三区| 欧美日本一区二区三区| 亚洲午夜激情网页| 欧美三级中文字| 亚洲成人你懂的| 欧美乱妇15p| 日本免费新一区视频| 欧美美女直播网站| 性感美女久久精品| 欧美一区二区三区在线观看| 日韩成人免费看| 欧美成人女星排名| 久久精品国产99久久6| 精品国产免费视频| 国产精品 欧美精品| 中文字幕电影一区| 91啦中文在线观看| 亚洲综合免费观看高清在线观看| 欧美日韩一级片网站| 天天色综合天天| 8x8x8国产精品| 国产一区二区三区蝌蚪| 中文字幕精品综合| 91蜜桃在线观看| 亚洲国产精品久久人人爱| 欧美一二三区在线观看| 国产一二三精品| 亚洲精品免费在线观看| 欧美日韩国产免费一区二区| 精品一区二区三区视频| 国产精品麻豆久久久| 在线亚洲一区二区| 蜜臀久久99精品久久久久宅男| 欧美mv日韩mv亚洲| 成人看片黄a免费看在线| 亚洲自拍偷拍综合| 26uuu亚洲综合色欧美| 91老师国产黑色丝袜在线| 视频一区中文字幕国产| 国产亚洲欧美日韩日本| 精品国产不卡一区二区三区| 三级影片在线观看欧美日韩一区二区| 成人黄色网址在线观看| 国产欧美一区二区三区网站| 国产精品综合久久| 久久综合九色综合欧美98| 美女免费视频一区| 国产一区二区在线电影| 亚洲成人av免费| 中文无字幕一区二区三区| 欧美高清hd18日本| 不卡高清视频专区| 蜜臀av性久久久久蜜臀aⅴ| 综合色中文字幕| www激情久久| 欧美人妇做爰xxxⅹ性高电影| 国产91露脸合集magnet| 五月婷婷综合网| 亚洲日本免费电影| 久久久精品国产免大香伊| 欧美美女黄视频| 91原创在线视频| 国产麻豆精品视频| 另类综合日韩欧美亚洲| 亚洲精品国产第一综合99久久 | 一区二区在线观看视频| 国产日韩精品久久久| 欧美喷潮久久久xxxxx| 色综合天天在线| 成人综合在线视频| 国产一区二区主播在线| 日韩电影在线观看电影| 亚洲一区二区欧美日韩 | 色诱亚洲精品久久久久久| 国v精品久久久网| 国产一区二区电影| 久久精品国产精品亚洲综合| 日韩va欧美va亚洲va久久| 一区二区在线免费| 亚洲欧美国产三级| 亚洲天堂免费看| 亚洲欧美综合网| 国产精品的网站| 椎名由奈av一区二区三区| 欧美国产日韩精品免费观看| 久久久久亚洲综合| 欧美激情一区二区三区四区| 国产欧美综合在线观看第十页| 久久久久久久久99精品| 337p粉嫩大胆色噜噜噜噜亚洲| 精品少妇一区二区三区视频免付费| 欧美剧情片在线观看| 在线观看免费一区| 91 com成人网| 精品福利一区二区三区 | 日韩一区二区在线观看| 51精品国自产在线| 精品久久久久久久人人人人传媒 | 91精品国产综合久久久蜜臀图片| 欧美卡1卡2卡| 日韩欧美中文字幕制服| 日韩欧美成人午夜| 精品成人在线观看| 日韩国产欧美视频| 国产精品久久毛片av大全日韩| 日韩欧美高清一区| 欧美日本视频在线| 在线视频国产一区| 成人avav在线| 国产v日产∨综合v精品视频| 精品第一国产综合精品aⅴ| 欧美大片顶级少妇| 欧美国产日产图区| 91色乱码一区二区三区| 国产亚洲女人久久久久毛片| 国产成人av电影| 激情五月婷婷综合网| 成人激情免费视频| 在线精品视频一区二区| 色综合天天在线| 91免费精品国自产拍在线不卡| 在线观看91视频| 久久一夜天堂av一区二区三区 | 国内偷窥港台综合视频在线播放| 国产福利91精品| 欧美日韩国产一区二区三区地区| 精品国产三级电影在线观看| 亚洲三级视频在线观看| 久久精品国产一区二区三区免费看 | 亚洲自拍偷拍欧美| 国产在线不卡一区| 日本韩国欧美在线| 精品国产乱码久久久久久1区2区| 玉米视频成人免费看| 日韩视频在线观看一区二区| 欧美高清你懂得| 亚洲乱码中文字幕| 国产在线国偷精品产拍免费yy| 欧美伊人久久大香线蕉综合69 | 国产精品精品国产色婷婷| 日产国产高清一区二区三区| 成人毛片视频在线观看| 欧美成人一区二区三区片免费 | 欧美一区二区在线看| 国产精品久久久久久久岛一牛影视| 秋霞午夜鲁丝一区二区老狼| 色综合久久六月婷婷中文字幕| 久久久久久亚洲综合影院红桃| 亚洲va中文字幕| 在线观看视频一区| 国产精品久久久久久久久晋中| 国产一区美女在线| 欧美一区二区三区成人| 亚洲午夜日本在线观看| av在线免费不卡| 亚洲国产精华液网站w| 久久不见久久见中文字幕免费| 欧美日韩国产区一| 亚洲国产综合色| 日本国产一区二区| 国产精品久久久久久久久久久免费看| 国内一区二区视频| 欧美成人一区二区三区| 免费三级欧美电影| 欧美一级高清片| 男女视频一区二区| 3d成人h动漫网站入口| 日韩不卡在线观看日韩不卡视频| 在线免费观看视频一区| 亚洲欧美一区二区三区孕妇| av在线这里只有精品| 国产精品无遮挡| 99久久精品国产毛片| 亚洲视频香蕉人妖| 91麻豆国产福利精品| 亚洲欧美区自拍先锋|