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

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

?? le_analy.cc

?? 功能較全面的反匯編器:反匯編器ht-2.0.15.tar.gz
?? CC
字號:
/* *	HT Editor *	le_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 <stdio.h>#include <stdlib.h>#include <string.h>#include "analy.h"#include "analy_alpha.h"#include "analy_names.h"#include "analy_register.h"#include "analy_x86.h"#include "htanaly.h"		// FIXME: for ht_aviewer, to call gotoAddress(entrypoint)#include "le_analy.h"#include "htctrl.h"#include "htdebug.h"#include "endianess.h"#include "htiobox.h"#include "htle.h"#include "strtools.h"#include "nestruct.h"#include "snprintf.h"#include "x86asm.h"/* * */void	LEAnalyser::init(ht_le_shared_data *LE_shared, File *File){	le_shared = LE_shared;	file = File;	validarea = new Area();	validarea->init();	Analyser::init();	/////////////	setLocationTreeOptimizeThreshold(100);	setSymbolTreeOptimizeThreshold(100);}/* * */void	LEAnalyser::load(ObjectStream &f){	/*	ht_pe_shared_data 	*pe_shared;	ht_stream 		*file;	area				*validarea;	*/	GET_OBJECT(f, validarea);	Analyser::load(f);}/* * */void	LEAnalyser::done(){	validarea->done();	delete validarea;	Analyser::done();}/* * */void LEAnalyser::beginAnalysis(){//	char	buffer[1024];	/*	 *	entrypoint	 */	LEAddress a;	Address *control = NULL;	Address *v86control = NULL;	Address *pmcontrol = NULL;	if (le_shared->is_vxd) {		LEAddress addr;		int temp;		addr = le_shared->vxd_desc.v86_ctrl_ofs;		if (LE_addr_to_segment(le_shared, addr, &temp)) {			a = LE_MAKE_ADDR(le_shared, LE_ADDR_SEG(le_shared, addr),				LE_ADDR_OFS(le_shared, addr));			v86control = createAddressFlat32(a);			le_shared->best_entrypoint = a;		}		addr = le_shared->vxd_desc.pm_ctrl_ofs;		if (LE_addr_to_segment(le_shared, addr, &temp)) {			a = LE_MAKE_ADDR(le_shared, LE_ADDR_SEG(le_shared, addr),				LE_ADDR_OFS(le_shared, addr));			pmcontrol = createAddressFlat32(a);			le_shared->best_entrypoint = a;		}				addr = le_shared->vxd_desc.ctrl_ofs;		if (LE_addr_to_segment(le_shared, addr, &temp)) {			a = LE_MAKE_ADDR(le_shared, LE_ADDR_SEG(le_shared, addr),				LE_ADDR_OFS(le_shared, addr));			control = createAddressFlat32(a);			le_shared->best_entrypoint = a;		}	}	Address *entry = NULL;	if (le_shared->hdr.startobj != 0) {		a = LE_MAKE_ADDR(le_shared, le_shared->hdr.startobj-1, le_shared->hdr.eip);		le_shared->best_entrypoint = a;		entry = createAddressFlat32(a);	}	if (v86control) pushAddress(v86control, v86control);	if (pmcontrol) pushAddress(pmcontrol, pmcontrol);	if (control) pushAddress(control, control);	if (entry) pushAddress(entry, entry);	/*	 * give all sections a descriptive comment:	 */	LE_OBJECT *s = le_shared->objmap.header;	char blub[100];	for (uint i = 0; i < le_shared->objmap.count; i++) {		LEAddress la = LE_get_seg_addr(le_shared, i);		Address *secaddr = createAddressFlat32(la);//		uint psize = LE_get_seg_psize(le_shared, i);		uint vsize = LE_get_seg_vsize(le_shared, i);		sprintf(blub, ";  section %d <%s> USE%d", i+1, getSegmentNameByAddress(secaddr), (le_shared->objmap.header[i].flags & LE_OBJECT_FLAG_USE32) ? 32 : 16);		addComment(secaddr, 0, "");		addComment(secaddr, 0, ";******************************************************************");		addComment(secaddr, 0, blub);		sprintf(blub, ";  virtual address  %08x  virtual size   %08x", LE_get_seg_addr(le_shared, i), vsize);		addComment(secaddr, 0, blub);/*		sprintf(blub, ";  file offset      %08x  file size      %08x", psize);		addComment(secaddr, 0, blub);*/		addComment(secaddr, 0, ";******************************************************************");		// mark end of sections		sprintf(blub, ";  end of section <%s>", getSegmentNameByAddress(secaddr));		Address *secend_addr = secaddr->clone();		secend_addr->add(vsize);		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);		Address *seciniaddr = secaddr->clone();		seciniaddr->add(vsize-1);		if (validAddress(secaddr, scinitialized) && validAddress(seciniaddr, scinitialized)) {			initialized->add(secaddr, seciniaddr);		}		delete secaddr;		delete secend_addr;		delete seciniaddr;		s++;	}	// entrypoints/*	int entrypoint_count = le_shared->entrypoints->count();	int *entropy = random_permutation(entrypoint_count);	for (int i=0; i<entrypoint_count; i++) {		ht_ne_entrypoint *f = (ht_ne_entrypoint*)le_shared->entrypoints->get(*(entropy+i));		if (f) {			Address *address = createAddress1616(f->seg, f->offset);			if (validAddress(address, scvalid)) {				char *label;				if (f->name) {					sprintf(buffer, "; exported function %s, ordinal %04x", f->name, f->ordinal);				} else {					sprintf(buffer, "; unnamed exported function, ordinal %04x", f->ordinal);				}				label = export_func_name(f->name, f->ordinal);				addComment(address, 0, "");				addComment(address, 0, ";********************************************************");				addComment(address, 0, buffer);				addComment(address, 0, ";********************************************************");				pushAddress(address, address);				assignSymbol(address, label, label_func);				free(label);			}			delete address;		}	}	if (entropy) free(entropy);*/	// imports/*	if (le_shared->imports) {		ht_tree *t = le_shared->imports;		Object *v;		ne_import_rec *imp = NULL;		FileOfs h = le_shared->hdr_ofs + le_shared->hdr.imptab;		while ((imp = (ne_import_rec*)t->enum_next(&v, imp))) {			char *name = NULL;			char *mod = (imp->module-1 < le_shared->modnames_count) ? le_shared->modnames[imp->module-1] : (char*)"invalid!";			if (imp->byname) {				file->seek(h+imp->name_ofs);				name = getstrp(file);			}			char *label = import_func_name(mod, name, imp->byname ? 0 : imp->ord);			if (name) free(name);			Address *addr = createAddress1616(le_shared->fake_segment+1, imp->addr);			addComment(addr, 0, "");			assignSymbol(addr, label, label_func);			data->setIntAddressType(addr, dst_ibyte, 1);			free(label);			delete addr;		}	}*//*	virtual Object *enum_next(ht_data **value, Object *prevkey);	int import_count = le_shared->imports.funcs->count();	for (int i=0; i<import_count; i++) {		ht_pe_import_function *f=(ht_pe_import_function *)pe_shared->imports.funcs->get(*(entropy+i));		ht_pe_import_library *d=(ht_pe_import_library *)pe_shared->imports.libs->get(f->libidx);		char *label;		label = import_func_name(d->name, (f->byname) ? f->name.name : NULL, f->ordinal);		addComment(f->address, 0, "");		assignSymbol(f->address, label, label_func);		data->set_int_addr_type(f->address, dst_idword, 4);		free(label);	}*/	if (le_shared->is_vxd) {		if (v86control) {			addComment(v86control, 0, "");			addComment(v86control, 0, ";****************************");			addComment(v86control, 0, ";  VxD V86-control procedure");			addComment(v86control, 0, ";****************************");			assignSymbol(v86control, "VxD_v86_control", label_func);		}		if (pmcontrol) {			addComment(pmcontrol, 0, "");			addComment(pmcontrol, 0, ";****************************");			addComment(pmcontrol, 0, ";  VxD PM-control procedure");			addComment(pmcontrol, 0, ";****************************");			assignSymbol(pmcontrol, "VxD_pm_control", label_func);		}		if (control) {			addComment(control, 0, "");			addComment(control, 0, ";****************************");			addComment(control, 0, ";  VxD control procedure");			addComment(control, 0, ";****************************");			assignSymbol(control, "VxD_control", label_func);		}	}	if (entry) {		addComment(entry, 0, "");		addComment(entry, 0, ";****************************");		addComment(entry, 0, ";  program entry point");		addComment(entry, 0, ";****************************");		if (validCodeAddress(entry)) {			assignSymbol(entry, "entrypoint", label_func);		} else {			assignSymbol(entry, "entrypoint", label_data);		}	}	setLocationTreeOptimizeThreshold(1000);	setSymbolTreeOptimizeThreshold(1000);	delete entry;	if (le_shared->best_entrypoint != LE_ADDR_INVALID) {		Address *tmpaddr = createAddressFlat32(le_shared->best_entrypoint);		((ht_aviewer*)le_shared->v_image)->gotoAddress(tmpaddr, NULL);		delete tmpaddr;	}	Analyser::beginAnalysis();}/* * */ObjectID	LEAnalyser::getObjectID() const{	return ATOM_LE_ANALYSER;}/* * */FileOfs LEAnalyser::addressToFileofs(Address *Addr){	if (validAddress(Addr, scinitialized)) {		FileOfs ofs;		LEAddress na;		if (!convertAddressToLEAddress(Addr, &na)) return INVALID_FILE_OFS;		if (!LE_addr_to_ofs(le_shared, na, &ofs)) {			return INVALID_FILE_OFS;		}		return ofs;/*          uint m;		FileOfs oo;		if (!le_shared->linear_file->map_ofs(ofs, &oo, &m)) {			le_shared->linear_file->map_ofs(ofs, &oo, &m);			return INVALID_FILE_OFS;		}		return oo;*/	} else {		return INVALID_FILE_OFS;	}}FileOfs LEAnalyser::addressToRealFileofs(Address *Addr){	if (validAddress(Addr, scinitialized)) {		FileOfs ofs;		LEAddress na;		if (!convertAddressToLEAddress(Addr, &na)) return INVALID_FILE_OFS;		if (!LE_addr_to_ofs(le_shared, na, &ofs)) {			return INVALID_FILE_OFS;		}		FileOfs m;		FileOfs oo;		if (!le_shared->linear_file->map_ofs(ofs, &oo, &m)) {			return INVALID_FILE_OFS;		}		return oo;	} else {		return INVALID_FILE_OFS;	}}/* * */uint LEAnalyser::bufPtr(Address *Addr, byte *buf, int size){	FileOfs ofs = addressToFileofs(Addr);/*     if (ofs == INVALID_FILE_OFS) {		ht_printf("%y", Addr);		int as=1;	}*/	assert(ofs != INVALID_FILE_OFS);	file->seek(ofs);	return file->read(buf, size);}bool LEAnalyser::convertAddressToLEAddress(Address *addr, LEAddress *r){	if (addr->getObjectID()==ATOM_ADDRESS_X86_FLAT_32) {//		*r = LE_MAKE_ADDR(le_shared, ((AddressX86Flat32*)addr)->seg, ((AddressX86_1632*)addr)->addr);		*r = ((AddressX86Flat32*)addr)->addr;		return true;	} else {		return false;	}}Address *LEAnalyser::createAddress(){	return new AddressX86Flat32(0);}Address *LEAnalyser::createAddressFlat32(uint32 ofs){	return new AddressX86Flat32(ofs);}/* * */Assembler *LEAnalyser::createAssembler(){/* FIXME: 16/32 */	Assembler *a = new x86asm(X86_OPSIZE32, X86_ADDRSIZE32);	a->init();	return a;}/* * */const char *LEAnalyser::getSegmentNameByAddress(Address *Addr){	static char segmentname[16];	int i;	LEAddress na;	if (!convertAddressToLEAddress(Addr, &na)) return NULL;	if (!LE_addr_to_segment(le_shared, na, &i)) return NULL;//	LEAddress temp;/*	bool init = LE_addr_to_ofs(le_shared, na, &temp);	if (!init)		return NULL;*//*	if (i == (int)le_shared->fake_segment) {		strcpy(segmentname, "faked names");	} else {*/		sprintf(segmentname, "seg%d", i+1);//	}	return segmentname;}/* * */String &LEAnalyser::getName(String &res){	return file->getDesc(res);}/* * */const char *LEAnalyser::getType(){	return "LE/Analyser";}/* * */void LEAnalyser::initCodeAnalyser(){	Analyser::initCodeAnalyser();}/* * */void LEAnalyser::initUnasm(){	DPRINTF("le_analy: ");	DPRINTF("initing analy_x86_disassembler\n");	analy_disasm = new AnalyX86Disassembler();	((AnalyX86Disassembler*)analy_disasm)->init(this, le_shared->is_vxd ? ANALYX86DISASSEMBLER_FLAGS_VXD_X86DIS : 0);}/* * */void LEAnalyser::log(const char *msg){	/*	 *	log() creates to much traffic so dont log	 *   perhaps we reactivate this later	 *	 *//*	LOG(msg);*/}/* * */Address *LEAnalyser::nextValid(Address *Addr){	return (Address *)validarea->findNext(Addr);}/* * */void LEAnalyser::store(ObjectStream &st) const{	PUT_OBJECT(st, validarea);	Analyser::store(st);}/* * */int	LEAnalyser::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 *LEAnalyser::fileofsToAddress(FileOfs fileofs){	LEAddress a;	if (LE_ofs_to_addr(le_shared, fileofs, &a)) {		return createAddressFlat32(a);	} else {		return new InvalidAddress();	}}/* * *//* FIXME: fileofs chaos */Address *LEAnalyser::realFileofsToAddress(FileOfs fileofs){	LEAddress a;	uint lofs;	if (le_shared->linear_file->unmap_ofs(fileofs, &lofs) &&	LE_ofs_to_addr(le_shared, lofs, &a)) {		return createAddressFlat32(a);	} else {		return new InvalidAddress();	}}/* * */bool LEAnalyser::validAddress(Address *Addr, tsectype action){	ht_le_objmap *objects = &le_shared->objmap;	int sec;	LEAddress na;	if (!convertAddressToLEAddress(Addr, &na)) return false;	if (!LE_addr_to_segment(le_shared, na, &sec)) return false;	FileOfs temp;	bool init = LE_addr_to_ofs(le_shared, na, &temp);	LE_OBJECT *s = objects->header + sec;	switch (action) {	case scvalid:		return true;	case scread:		return (s->flags & LE_OBJECT_FLAG_READABLE);	case scwrite:		return (s->flags & LE_OBJECT_FLAG_WRITEABLE);	case screadwrite:		return (s->flags & LE_OBJECT_FLAG_READABLE) && (s->flags & LE_OBJECT_FLAG_WRITEABLE);	case sccode:		return (s->flags & LE_OBJECT_FLAG_EXECUTABLE) && init;	case scinitialized:		return init;	}	return false;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩另类视频免费观看| 一区二区三区电影在线播| 成人午夜av电影| 亚洲精品国产一区二区三区四区在线 | 欧美日本国产视频| 国产精品综合久久| 婷婷综合久久一区二区三区| 久久久久高清精品| 在线观看国产一区二区| 精品一区二区三区免费视频| 亚洲sss视频在线视频| 国产精品日日摸夜夜摸av| 日韩一级免费观看| 欧美三级在线视频| 91免费精品国自产拍在线不卡 | 亚洲一区二区三区四区中文字幕| 精品国产一区二区三区忘忧草 | 国产一区二区成人久久免费影院| 伊人性伊人情综合网| 亚洲高清不卡在线| 综合色中文字幕| 亚洲私人影院在线观看| 国产欧美精品区一区二区三区| 欧美大片在线观看一区| 日韩欧美国产综合| 精品国产伦一区二区三区观看方式| 欧美一二三四在线| wwww国产精品欧美| 久久九九久久九九| 亚洲欧洲无码一区二区三区| 中文字幕在线不卡国产视频| 国产精品美女视频| 亚洲精品你懂的| 日韩高清不卡一区二区| 日韩影院在线观看| 国产黄色精品网站| 日韩一级免费一区| 国产亚洲1区2区3区| 亚洲人成影院在线观看| 亚洲超碰97人人做人人爱| 韩国欧美国产1区| 在线观看日韩一区| 久久综合九色综合97婷婷女人| 国产精品美女www爽爽爽| 水野朝阳av一区二区三区| 国产传媒日韩欧美成人| 欧美日韩精品专区| 中文一区二区完整视频在线观看| 中文字幕亚洲综合久久菠萝蜜| 亚洲一区二区三区影院| 丁香婷婷综合色啪| 久久综合九色综合久久久精品综合| 亚洲欧洲一区二区在线播放| 美女一区二区视频| 色欧美片视频在线观看在线视频| 日韩欧美在线不卡| 日韩国产在线观看一区| 色婷婷国产精品综合在线观看| 久久久亚洲午夜电影| 久久国产精品99精品国产| 色94色欧美sute亚洲线路一久 | 欧美揉bbbbb揉bbbbb| 亚洲色图色小说| 成人av在线影院| 亚洲欧美中日韩| 色先锋aa成人| 亚洲影院理伦片| 在线观看www91| 日本中文在线一区| 亚洲精品在线免费观看视频| 日本va欧美va欧美va精品| 欧美精品一二三| 免费在线观看精品| 久久亚区不卡日本| 丁香婷婷综合网| 午夜精品福利一区二区蜜股av | 欧美人动与zoxxxx乱| 精品亚洲欧美一区| 亚洲天堂成人网| 91精品国产综合久久久久| 国产高清精品久久久久| 亚洲毛片av在线| 日韩免费性生活视频播放| 国产综合成人久久大片91| 17c精品麻豆一区二区免费| 欧美精选一区二区| 成人免费高清视频在线观看| 一级中文字幕一区二区| 精品裸体舞一区二区三区| 在线免费观看日本欧美| 国产美女精品人人做人人爽| 亚洲欧洲日本在线| 久久综合色8888| 欧美另类一区二区三区| 成人av在线电影| 国产精品一区一区三区| 五月天国产精品| 一区二区三区日韩在线观看| 国产欧美日韩激情| 精品88久久久久88久久久| 6080yy午夜一二三区久久| 欧美人伦禁忌dvd放荡欲情| 一本色道久久综合亚洲91 | 久久精品99久久久| 亚洲国产欧美在线人成| 亚洲一区二区在线观看视频| 成人免费在线视频观看| 日韩理论片在线| 一区二区三区在线观看视频| 亚洲精品成人在线| 视频一区二区中文字幕| 亚洲成av人片在线| 日本欧美一区二区三区| 琪琪一区二区三区| 国产一区二区三区四区五区美女 | 日韩美女久久久| 亚洲国产sm捆绑调教视频 | 伊人开心综合网| 亚洲第一搞黄网站| 久久99最新地址| 不卡一区在线观看| 欧美日韩一区二区三区四区| 日韩视频永久免费| 中文字幕av不卡| 日韩av网站免费在线| 国产suv精品一区二区6| 欧美丝袜自拍制服另类| 久久综合久久99| 日韩制服丝袜先锋影音| 91麻豆精东视频| 国产人久久人人人人爽| 日本视频中文字幕一区二区三区| 国产精品1024| 欧美电影免费观看高清完整版在线| 中文字幕在线不卡| 久久不见久久见中文字幕免费| 色哟哟国产精品| 国产精品免费人成网站| 另类小说图片综合网| 日本国产一区二区| 国产精品天天摸av网| 国模无码大尺度一区二区三区| 欧美性色黄大片| 亚洲精品国产一区二区精华液| 国产精品一级二级三级| 日韩视频免费观看高清在线视频| 国产精品高清亚洲| 成人性色生活片| 亚洲国产精品av| 91网页版在线| 亚洲一区二区在线视频| 欧美综合天天夜夜久久| 亚洲成人激情自拍| 91精品国产欧美日韩| 美女脱光内衣内裤视频久久网站| 欧美日韩专区在线| 午夜欧美视频在线观看| 精品欧美一区二区在线观看| 免费观看久久久4p| 欧美精品一区二区精品网| 精品影视av免费| 亚洲韩国一区二区三区| 日韩一区国产二区欧美三区| 美国av一区二区| 欧美高清在线一区二区| 欧美日韩精品一区二区在线播放| 奇米影视一区二区三区| 久久色在线观看| 色综合天天综合给合国产| 日日夜夜精品免费视频| 国产欧美日产一区| 91麻豆精品91久久久久同性| 国产成人亚洲综合a∨婷婷图片| 亚洲在线视频一区| 国产女人aaa级久久久级| 91成人在线观看喷潮| 国产精品888| 另类调教123区| 亚洲激情在线激情| 中文无字幕一区二区三区 | 精品人伦一区二区色婷婷| 一本一道综合狠狠老| 波多野结衣一区二区三区| 麻豆极品一区二区三区| 五月婷婷久久丁香| 亚洲国产精品人人做人人爽| 日韩一区在线免费观看| 国产日韩三级在线| 久久久精品免费观看| 久久女同互慰一区二区三区| 日韩欧美中文字幕公布| 91精品国产一区二区| 欧美久久高跟鞋激| 欧美久久免费观看| 日韩三级电影网址| 久久久久久久久免费| 中文字幕在线一区免费| 国产色爱av资源综合区| 综合电影一区二区三区 | 国产精品免费免费|