亚洲欧美第一页_禁久久精品乱码_粉嫩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亚洲二区在线观看| 精品欧美乱码久久久久久 | 美女诱惑一区二区| 精品一区二区三区日韩| 久久精工是国产品牌吗| av激情综合网| 91精品办公室少妇高潮对白| 欧美mv日韩mv国产网站| 一区二区三区日韩在线观看| 精品一区二区三区视频在线观看| 99免费精品在线观看| 欧美一卡二卡三卡| 久久久久久久久久久黄色 | 2023国产精品视频| 一区二区免费在线播放| 高清不卡在线观看| 国产一区激情在线| 欧美午夜电影在线播放| 国产精品久久久久精k8| 视频一区中文字幕国产| av亚洲精华国产精华精| 日韩欧美国产三级| 性做久久久久久久免费看| 波多野结衣视频一区| 久久综合色婷婷| 美女任你摸久久| 欧美精三区欧美精三区| 亚洲蜜臀av乱码久久精品| 蜜臀久久久99精品久久久久久| 欧美在线短视频| 亚洲摸摸操操av| 成人丝袜高跟foot| 日本一区二区三区国色天香| 日韩—二三区免费观看av| 色综合久久六月婷婷中文字幕| 国产精品区一区二区三| 国产成人啪免费观看软件| 欧美一区二区三区四区久久| 图片区小说区区亚洲影院| 色域天天综合网| 欧美国产日韩在线观看| 成人黄色国产精品网站大全在线免费观看 | 成人av网站在线观看| 精品成人免费观看| 国产麻豆午夜三级精品| 亚洲精品一区二区三区四区高清 | 国产成人免费在线| 国产精品久久久久aaaa| 99综合影院在线| 国产精品久久久爽爽爽麻豆色哟哟| 国产高清无密码一区二区三区| 久久精品日韩一区二区三区| 国产精品伊人色| 亚洲国产精品激情在线观看| 亚洲美女淫视频| 欧美精品123区| 久久99国产精品久久99果冻传媒| 久久久久成人黄色影片| 99国产精品国产精品久久| 亚洲成人动漫在线免费观看| 精品盗摄一区二区三区| 色综合视频在线观看| 伦理电影国产精品| 国产精品久久久久国产精品日日| 欧美日韩国产另类不卡| 国产精品一区二区x88av| 亚洲精品伦理在线| 欧美刺激午夜性久久久久久久| 成人免费看片app下载| 亚洲午夜久久久久| 国产视频一区二区在线观看| 欧美日韩一区视频| 国产东北露脸精品视频| 婷婷久久综合九色国产成人| 中文字幕+乱码+中文字幕一区| 欧美日韩精品福利| 9人人澡人人爽人人精品| 全部av―极品视觉盛宴亚洲| 亚洲欧美在线视频| 欧美精品一区二区高清在线观看| 91国产丝袜在线播放| 国产麻豆成人精品| 蜜臀av一区二区在线免费观看| 日韩毛片高清在线播放| 久久久国产一区二区三区四区小说| 欧美日韩国产综合草草| a亚洲天堂av| 国产精品99久| 精品一区二区三区免费视频| 亚洲国产中文字幕| 亚洲激情第一区| 综合亚洲深深色噜噜狠狠网站| 2020日本不卡一区二区视频| 6080午夜不卡| 欧美视频一区二区| 日本精品一区二区三区四区的功能| 国产在线不卡一区| 蜜桃视频一区二区| 蜜桃在线一区二区三区| 视频在线观看一区| 丝袜a∨在线一区二区三区不卡| 一区二区三区在线观看视频| 综合电影一区二区三区 | 欧美日韩精品一二三区| 色悠久久久久综合欧美99| 成人小视频在线| 国产jizzjizz一区二区| 国内国产精品久久| 狠狠色综合色综合网络| 极品少妇xxxx精品少妇| 久久成人免费电影| 国产一区二区三区在线观看免费视频| 日韩成人精品在线| 日本视频一区二区| 毛片一区二区三区| 国产伦精品一区二区三区免费迷| 国产精品自在在线| 福利一区二区在线| 99在线精品观看| 色综合久久中文字幕综合网| 欧美影视一区二区三区| 欧美日韩精品一区二区三区蜜桃 | 久久久精品蜜桃| 国产亚洲1区2区3区| 国产精品人人做人人爽人人添| 国产精品久久久久久久久久免费看 | 色吊一区二区三区| 精品视频123区在线观看| 91麻豆精品久久久久蜜臀| 日韩欧美一二三区| 日本一区二区三区在线观看| 中文字幕视频一区| 偷窥少妇高潮呻吟av久久免费| 日韩不卡手机在线v区| 国产一区二区精品久久| www.成人网.com| 欧美肥妇free| 国产色爱av资源综合区| 亚洲日本护士毛茸茸| 五月婷婷色综合| 国产精品综合av一区二区国产馆| 成人午夜av影视| 欧美日韩国产电影| 久久久久久久久97黄色工厂| 亚洲欧美电影一区二区| 日韩精品亚洲一区| 成人精品一区二区三区四区| aaa欧美日韩| 精品日韩欧美在线| 亚洲男帅同性gay1069| 美女脱光内衣内裤视频久久网站 | 欧美日韩国产在线观看| 久久免费的精品国产v∧| 亚洲视频一二三区| 久久国产精品无码网站| 97se亚洲国产综合自在线观| 欧美二区乱c少妇| 国产精品久久久久影院老司| 日韩电影免费一区| 91免费版在线| 精品国产凹凸成av人导航| 亚洲视频一二三区| 国产在线播精品第三| 欧美午夜精品一区二区蜜桃| 日本一区二区久久| 老司机午夜精品99久久| 日本韩国视频一区二区| 国产日韩欧美麻豆| 日韩av电影天堂| 一本久久精品一区二区| 久久美女艺术照精彩视频福利播放| 亚洲精品久久嫩草网站秘色| 国产成a人无v码亚洲福利| 欧美一二三四在线| 亚洲图片一区二区| 国产不卡免费视频| 欧美成人精品3d动漫h| 亚洲二区视频在线| 欧美亚男人的天堂| 亚洲色图色小说| 成人一区二区三区| 亚洲精品一线二线三线| 免费在线观看视频一区| 欧美日韩一区二区三区四区| ...中文天堂在线一区| 国产.精品.日韩.另类.中文.在线.播放| 麻豆91精品视频| 日韩午夜在线播放| 美腿丝袜亚洲综合| 日韩欧美国产精品| 精品一区二区三区av| 日韩欧美在线影院| 蜜桃视频在线一区| 精品久久人人做人人爽| 美女诱惑一区二区| 欧美一区二区三区公司| 欧美a级理论片| 欧美一区二区三级| 久久 天天综合| 国产欧美一区二区精品久导航 |