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

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

?? macho_analy.cc

?? 功能較全面的反匯編器:反匯編器ht-2.0.15.tar.gz
?? CC
字號:
/*  *	HT Editor *	macho_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_arm.h"#include "analy_ppc.h"#include "analy_register.h"#include "analy_x86.h"#include "macho_analy.h"#include "htctrl.h"#include "htdebug.h"#include "htiobox.h"#include "htmacho.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>/* * */ void MachoAnalyser::init(ht_macho_shared_data *Macho_shared, File *File){	macho_shared = Macho_shared;	file = File;	validarea = new Area();	validarea->init();	Analyser::init();}void MachoAnalyser::beginAnalysis(){	setLocationTreeOptimizeThreshold(100);	setSymbolTreeOptimizeThreshold(100);	/*	 *	entrypoints	 */	uint entrypoint_count = 0;	MACHO_COMMAND_U **pp = macho_shared->cmds.cmds;	for (uint i=0; i < macho_shared->cmds.count; i++) {		if ((*pp)->cmd.cmd == LC_UNIXTHREAD || (*pp)->cmd.cmd == LC_THREAD) {			MACHO_THREAD_COMMAND *s = (MACHO_THREAD_COMMAND*)*pp;			uint64 e = 0;			switch (macho_shared->header.cputype) {			case MACHO_CPU_TYPE_ARM:				e = s->state.state_arm.pc;				break;			case MACHO_CPU_TYPE_POWERPC:				e = s->state.state_ppc.srr[0];				break;			case MACHO_CPU_TYPE_I386:				e = s->state.state_i386.eip;				break;			case MACHO_CPU_TYPE_X86_64:				e = s->state.state_x86_64.rip;			case MACHO_CPU_TYPE_POWERPC64:				e = s->state.state_ppc64.srr[0];				break;			default: assert(0);			}			char desc[128];			Address *entry;			if (macho_shared->_64) {				 entry = createAddress64(e);			} else {				 entry = createAddress32(e);			}			sprintf(desc, "entrypoint%d", entrypoint_count++);			pushAddress(entry, entry);			assignSymbol(entry, desc, label_func);			addComment(entry, 0, "");			addComment(entry, 0, ";****************************");			addComment(entry, 0, "; thread entrypoint");			addComment(entry, 0, ";****************************");			delete entry;		}		pp++;	}		/*	 *	give all sections a descriptive comment:	 */	char blub[100];	pp = macho_shared->cmds.cmds;	for (uint i=0; i < macho_shared->cmds.count; i++) {		if ((*pp)->cmd.cmd == LC_SEGMENT) {			MACHO_SEGMENT_COMMAND *s = (MACHO_SEGMENT_COMMAND*)*pp;			Address *secaddr;			secaddr = createAddress32(s->vmaddr);			if (validAddress(secaddr, scvalid)) {				ht_snprintf(blub, sizeof blub, ";  section %d <%s>", i+1, getSegmentNameByAddress(secaddr));				addComment(secaddr, 0, "");				addComment(secaddr, 0, ";******************************************************************");				addComment(secaddr, 0, blub);				ht_snprintf(blub, sizeof blub, ";  virtual address  %08x  virtual size   %08x", s->vmaddr, s->vmsize);				addComment(secaddr, 0, blub);				ht_snprintf(blub, sizeof blub, ";  file offset      %08x  file size      %08x", s->fileoff, s->filesize);				addComment(secaddr, 0, blub);				addComment(secaddr, 0, ";******************************************************************");				ht_snprintf(blub, sizeof blub, ";  end of section <%s>", getSegmentNameByAddress(secaddr));				Address *secend_addr = secaddr->clone();				secend_addr->add(s->vmsize);				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;		}		pp++;	}	/* symbols */	pp = macho_shared->cmds.cmds;	for (uint i=0; i < macho_shared->cmds.count; i++) {		if ((*pp)->cmd.cmd == LC_SYMTAB) {			MACHO_SYMTAB_COMMAND *s = (MACHO_SYMTAB_COMMAND*)*pp;			int *entropy = random_permutation(s->nsyms);			for (uint j=0; j < s->nsyms; j++) {				Address *address = NULL;				char *label = NULL;				if (macho_shared->_64) {					file->seek(s->symoff + entropy[j]*sizeof (MACHO_SYMTAB_NLIST_64));					MACHO_SYMTAB_NLIST_64 nlist;					if (file->read(&nlist, sizeof nlist) != sizeof nlist) break;					createHostStruct(&nlist, MACHO_SYMTAB_NLIST_64_struct, macho_shared->image_endianess);					if (nlist.strx && (nlist.type & MACHO_SYMBOL_N_TYPE) == MACHO_SYMBOL_TYPE_N_SECT) {						file->seek(s->stroff + nlist.strx);						label = file->fgetstrz();						address = createAddress64(nlist.value);					}				} else {					file->seek(s->symoff + entropy[j]*sizeof (MACHO_SYMTAB_NLIST));					MACHO_SYMTAB_NLIST nlist;					if (file->read(&nlist, sizeof nlist) != sizeof nlist) break;					createHostStruct(&nlist, MACHO_SYMTAB_NLIST_struct, macho_shared->image_endianess);					if (nlist.strx && (nlist.type & MACHO_SYMBOL_N_TYPE) == MACHO_SYMBOL_TYPE_N_SECT) {						file->seek(s->stroff + nlist.strx);						label = file->fgetstrz();						address = createAddress32(nlist.value);					}				}				if (address && validAddress(address, scvalid)) {					char macho_buffer[1024];					char *demangled = cplus_demangle(label, DMGL_PARAMS | DMGL_ANSI);					if (!demangled) demangled = cplus_demangle_v3(label, DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES);					if (!demangled && label[0]) demangled = cplus_demangle_v3(label+1, DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES);					make_valid_name(label, label);					ht_snprintf(macho_buffer, sizeof macho_buffer, "; function %s", (demangled) ? demangled : label);					free(demangled);					addComment(address, 0, "");					addComment(address, 0, ";********************************************************");					addComment(address, 0, macho_buffer);					addComment(address, 0, ";********************************************************");					pushAddress(address, address);					assignSymbol(address, label, label_func);				}				delete address;				free(label);			}			free(entropy);		}		pp++;	}	setLocationTreeOptimizeThreshold(1000);	setSymbolTreeOptimizeThreshold(1000);	Analyser::beginAnalysis();}/* * */void MachoAnalyser::load(ObjectStream &f){	GET_OBJECT(f, validarea);	Analyser::load(f);}/* * */void MachoAnalyser::done(){	validarea->done();	delete validarea;	Analyser::done();}ObjectID MachoAnalyser::getObjectID() const{	return ATOM_MACHO_ANALYSER;}/* * */uint MachoAnalyser::bufPtr(Address *Addr, byte *buf, int size){	FileOfs ofs = addressToFileofs(Addr);	assert(ofs != INVALID_FILE_OFS);	file->seek(ofs);	return file->read(buf, size);}bool MachoAnalyser::convertAddressToMACHOAddress(Address *addr, MACHOAddress *r){	if (addr->getObjectID() == ATOM_ADDRESS_FLAT_64) {		*r = ((AddressFlat64*)addr)->addr;		return true;	} else if (addr->getObjectID() == ATOM_ADDRESS_FLAT_32) {		*r = ((AddressFlat32*)addr)->addr;		return true;	} else if (addr->getObjectID() == ATOM_ADDRESS_X86_FLAT_32) {		*r = ((AddressX86Flat32*)addr)->addr;		return true;	}	return false;}Address *MachoAnalyser::createAddress(){	if (macho_shared->header.cputype == MACHO_CPU_TYPE_I386) {		return new AddressX86Flat32();	} else {		if (macho_shared->_64) {			return new AddressFlat64();		} else {			return new AddressFlat32();		}			}}Address *MachoAnalyser::createAddress32(uint32 addr){	switch (macho_shared->header.cputype) {	case MACHO_CPU_TYPE_I386:		return new AddressX86Flat32(addr);	case MACHO_CPU_TYPE_ARM:	case MACHO_CPU_TYPE_POWERPC:	default:		return new AddressFlat32(addr);	}}Address *MachoAnalyser::createAddress64(uint64 addr){	return new AddressFlat64(addr);}/* * */Assembler *MachoAnalyser::createAssembler(){	switch (macho_shared->header.cputype) {	case MACHO_CPU_TYPE_I386:		Assembler *a = new x86asm(X86_OPSIZE32, X86_ADDRSIZE32);		a->init();		return a;	}	return NULL;}/* * */FileOfs MachoAnalyser::addressToFileofs(Address *Addr){	if (validAddress(Addr, scinitialized)) {		FileOfs ofs;		MACHOAddress ea;		if (!convertAddressToMACHOAddress(Addr, &ea)) return INVALID_FILE_OFS;		if (!macho_addr_to_ofs(macho_shared->sections, macho_shared->section_count, ea, &ofs)) return INVALID_FILE_OFS;		return ofs;	} else {		return INVALID_FILE_OFS;	}}/* * */const char *MachoAnalyser::getSegmentNameByAddress(Address *Addr){	static char macho_sectionname[33];	int i;	MACHOAddress ea;	if (!convertAddressToMACHOAddress(Addr, &ea)) return NULL;	if (!macho_addr_to_section(macho_shared->sections, macho_shared->section_count, ea, &i)) return NULL;	if (macho_shared->sections[i]._64) {		ht_strlcpy(macho_sectionname, (char*)macho_shared->sections[i].s.sectname, sizeof macho_sectionname);	} else {		ht_strlcpy(macho_sectionname, (char*)macho_shared->sections[i].s64.sectname, sizeof macho_sectionname);	}	return macho_sectionname;}/* * */String &MachoAnalyser::getName(String &res){	return file->getDesc(res);}/* * */const char *MachoAnalyser::getType(){	return "Mach-O/Analyser";}/* * */void MachoAnalyser::initCodeAnalyser(){	Analyser::initCodeAnalyser();}/* * */void MachoAnalyser::initUnasm(){	uint machine = macho_shared->header.cputype;	bool macho64 = macho_shared->_64;	switch (machine) {	case MACHO_CPU_TYPE_I386:		analy_disasm = new AnalyX86Disassembler();		((AnalyX86Disassembler*)analy_disasm)->init(this, macho64 ? ANALYX86DISASSEMBLER_FLAGS_FLAT64 : 0);		break;	case MACHO_CPU_TYPE_X86_64:		if (macho64) {			analy_disasm = new AnalyX86Disassembler();			((AnalyX86Disassembler*)analy_disasm)->init(this, ANALYX86DISASSEMBLER_FLAGS_AMD64 | ANALYX86DISASSEMBLER_FLAGS_FLAT64);		} else {			errorbox("x86_64 cant be used in a 32-Bit Mach-O.");		}		break;	case MACHO_CPU_TYPE_POWERPC:	case MACHO_CPU_TYPE_POWERPC64:		analy_disasm = new AnalyPPCDisassembler();		((AnalyPPCDisassembler*)analy_disasm)->init(this, macho64 ? ANALY_PPC_64 : ANALY_PPC_32);		break;	case MACHO_CPU_TYPE_ARM:		analy_disasm = new AnalyArmDisassembler();		((AnalyArmDisassembler*)analy_disasm)->init(this);		break;	default:		warnbox("No disassembler for unknown machine type %04x!", machine);	}}/* * */void MachoAnalyser::log(const char *msg){	/*	 *	log() does to much traffic so dont log	 *   perhaps we reactivate this later	 *	 *//*	LOG(msg);*/}/* * */Address *MachoAnalyser::nextValid(Address *Addr){	return (Address *)validarea->findNext(Addr);}/* * */void MachoAnalyser::store(ObjectStream &f) const{	PUT_OBJECT(f, validarea);	Analyser::store(f);}/* * */int MachoAnalyser::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 *MachoAnalyser::fileofsToAddress(FileOfs fileofs){	MACHOAddress ea;	if (macho_ofs_to_addr(macho_shared->sections, macho_shared->section_count, fileofs, &ea)) {		if (macho_shared->_64) {			return createAddress64(ea);		} else {			return createAddress32(ea);		}	} else {		return new InvalidAddress();	}}/* * */bool MachoAnalyser::validAddress(Address *Addr, tsectype action){	int sec;	MACHOAddress ea;	if (!convertAddressToMACHOAddress(Addr, &ea)) return false;	if (!macho_addr_to_section(macho_shared->sections, macho_shared->section_count, ea, &sec)) return false;	MACHO_SECTION_U &s = macho_shared->sections[sec];	uint32 flags;	if (s._64) {		flags = s.s64.flags;	} else {		flags = s.s.flags;	}	switch (action) {		case scvalid:			return true;		case scread:			return true;		case scwrite:		case screadwrite: {			bool writable =				(flags & MACHO_SECTION_TYPE) != MACHO_S_CSTRING_LITERALS &&				(flags & MACHO_SECTION_TYPE) != MACHO_S_4BYTE_LITERALS &&				(flags & MACHO_SECTION_TYPE) != MACHO_S_8BYTE_LITERALS			;			return writable;		}		case sccode:			return (flags & MACHO_SECTION_TYPE) == MACHO_S_REGULAR				|| (flags & MACHO_S_ATTR_PURE_INSTRUCTIONS)				|| (flags & MACHO_S_ATTR_SOME_INSTRUCTIONS);		case scinitialized:			return (flags & MACHO_SECTION_TYPE) != MACHO_S_ZEROFILL;	}	return false;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美久久久精品影院| 一级中文字幕一区二区| 日本欧美韩国一区三区| 性欧美疯狂xxxxbbbb| 久久久久久久久岛国免费| 一区二区三区视频在线观看| 欧美成人一区二区三区在线观看 | 9i在线看片成人免费| 日本一区二区三区久久久久久久久不| 国产精品伦一区| 欧美日韩国产综合视频在线观看| 91丨porny丨中文| 91色porny蝌蚪| 色av成人天堂桃色av| 欧美色欧美亚洲另类二区| 欧美日韩国产精品成人| 欧美一区二区三区视频免费播放 | 免费看日韩a级影片| 日韩av一区二区三区四区| 日本一不卡视频| 国产一区二区影院| 成人激情小说网站| 欧美自拍丝袜亚洲| 欧美丰满少妇xxxbbb| 久久综合狠狠综合久久综合88| 国产日韩av一区二区| 日韩毛片一二三区| 日韩不卡免费视频| 国产剧情一区在线| 91蜜桃免费观看视频| 欧美一区二区三区视频免费| 久久免费视频一区| 一区二区三区在线观看国产| 久久精品久久99精品久久| 国产精品911| 欧美三级电影在线观看| 久久欧美一区二区| 亚洲在线一区二区三区| 国产精品一区二区果冻传媒| 91黄色激情网站| 久久久久国产精品厨房| 亚洲综合在线视频| 国产大片一区二区| 777奇米成人网| 国产精品亲子伦对白| 奇米777欧美一区二区| 成人avav影音| www国产精品av| 亚洲国产成人91porn| 成人综合在线观看| 日韩美女一区二区三区| 亚洲综合免费观看高清完整版在线 | 欧美精品日韩一区| 国产色91在线| 亚洲成人黄色小说| 色综合天天性综合| 日本一区二区综合亚洲| 久久精品久久99精品久久| 欧洲亚洲国产日韩| 亚洲欧洲一区二区在线播放| 国产精品影视在线| 国产欧美日韩三区| 久久综合网色—综合色88| 夜夜夜精品看看| 国产成人精品午夜视频免费| 欧美一区二区精品久久911| 一区二区三区高清在线| zzijzzij亚洲日本少妇熟睡| wwwwxxxxx欧美| 精品午夜久久福利影院| 宅男噜噜噜66一区二区66| 一区二区三区国产豹纹内裤在线| 成人精品亚洲人成在线| 久久久久97国产精华液好用吗| 美女视频一区二区三区| 精品久久久久一区二区国产| 青青草伊人久久| 欧美一区二区三区的| 日韩1区2区日韩1区2区| 欧美三级电影一区| 日本欧洲一区二区| 欧美一区二区三区公司| 久久激情综合网| 欧美大胆人体bbbb| 久久国产综合精品| 久久婷婷一区二区三区| 国产伦精品一区二区三区免费迷| 欧美成人乱码一区二区三区| 国产伦精品一区二区三区免费| 日韩欧美一卡二卡| 狠狠网亚洲精品| 亚洲国产精华液网站w| 成人黄色软件下载| 一区二区三区在线高清| 欧美亚洲国产bt| 日本欧美一区二区三区| 精品久久一区二区三区| 国产成人日日夜夜| 亚洲精品高清视频在线观看| 欧美色网站导航| 九色综合国产一区二区三区| 久久天天做天天爱综合色| 不卡的电影网站| 一区二区三区波多野结衣在线观看 | 亚洲3atv精品一区二区三区| 欧美一区二区三区在线看| 激情综合一区二区三区| 国产精品黄色在线观看| 欧美日韩国产小视频| 久久国产生活片100| 亚洲色图色小说| 欧美一区二区三区在线电影| 国产精品自拍av| 亚洲欧美经典视频| 精品国内片67194| 欧洲色大大久久| 国产乱一区二区| 午夜精品久久久久久久久久久| 欧美变态口味重另类| 日本精品一区二区三区高清 | 亚洲一区二区av在线| 欧美xxxxxxxx| 欧美日韩黄色影视| 国产福利91精品一区| 午夜久久久久久电影| 国产精品狼人久久影院观看方式| 欧美日韩精品综合在线| www.久久精品| 国产在线精品不卡| 丝袜亚洲另类欧美综合| 亚洲乱码国产乱码精品精可以看| 精品噜噜噜噜久久久久久久久试看| 91视频免费观看| 国产精品一线二线三线| 青青国产91久久久久久| 亚洲日本在线a| 欧美高清一级片在线观看| 日韩欧美在线综合网| 欧美电影在哪看比较好| 色诱亚洲精品久久久久久| 国产老妇另类xxxxx| 久久狠狠亚洲综合| 男女视频一区二区| 午夜精品久久久久久久99樱桃| 亚洲视频在线一区观看| 中文字幕免费观看一区| 亚洲精品一区在线观看| 欧美一区二区久久| 欧美一区二区三区不卡| 欧美一区二区视频免费观看| 欧美日韩一二三| 欧美视频一二三区| 精品视频在线免费观看| 精品视频色一区| 欧美性色欧美a在线播放| 91免费看视频| 在线观看网站黄不卡| 欧美视频一区二区三区| 欧美日韩1234| 日韩一区和二区| 久久午夜羞羞影院免费观看| 久久久久久99久久久精品网站| 国产喷白浆一区二区三区| 国产欧美日韩视频在线观看| 亚洲人成7777| 久久综合九色综合欧美亚洲| 欧美裸体bbwbbwbbw| 成人蜜臀av电影| 夫妻av一区二区| 国产成人精品1024| 成人天堂资源www在线| 久久99国产精品免费| 日本视频一区二区三区| 国产精品乱码人人做人人爱| 欧美日韩免费观看一区二区三区 | 成人h动漫精品一区二区| 国产91色综合久久免费分享| 国产黄色成人av| 成人h版在线观看| 一本一道波多野结衣一区二区| 91在线观看视频| 欧美日韩专区在线| 精品日韩欧美一区二区| 日韩一级黄色片| 国产精品系列在线| 亚洲精品国产一区二区精华液 | 国产成人精品亚洲日本在线桃色 | 亚洲宅男天堂在线观看无病毒| 亚洲国产日日夜夜| 国产乱码精品一区二区三区五月婷 | 国内成+人亚洲+欧美+综合在线| 丁香天五香天堂综合| 666欧美在线视频| 日本一区二区三区国色天香| 亚洲国产日韩av| 国产成人免费视频精品含羞草妖精| 色婷婷综合久久久久中文| 日韩免费视频线观看| 亚洲精品国产精华液| 高清久久久久久|