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

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

?? elf_analy.cc

?? 功能較全面的反匯編器:反匯編器ht-2.0.15.tar.gz
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/* *	HT Editor *	elf_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_alpha.h"#include "analy_names.h"#include "analy_ia64.h"#include "analy_ppc.h"#include "analy_register.h"#include "analy_x86.h"#include "analy_arm.h"#include "elf_analy.h"#include "htctrl.h"#include "htdebug.h"#include "htiobox.h"#include "htelf.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 ElfAnalyser::init(ht_elf_shared_data *Elf_shared, File *File){	elf_shared = Elf_shared;	file = File;	validarea = new Area();	validarea->init();	Analyser::init();}void ElfAnalyser::beginAnalysis(){	Address *entry = NULL;	bool c32 = false;	switch (elf_shared->ident.e_ident[ELF_EI_CLASS]) {		case ELFCLASS32: {			entry = createAddress32(elf_shared->header32.e_entry);			c32 = true;			break;		}		case ELFCLASS64: {			entry = createAddress64(elf_shared->header64.e_entry);			c32 = false;			break;		}	}	if (!validAddress(entry, scvalid)) {		delete entry;		entry = NULL;	}	setLocationTreeOptimizeThreshold(100);	setSymbolTreeOptimizeThreshold(100);	/*	 *	give all sections a descriptive comment:	 */	ELF_SECTION_HEADER32 *s32=elf_shared->sheaders.sheaders32;	ELF_SECTION_HEADER64 *s64=elf_shared->sheaders.sheaders64;	char blub[100];	for (uint i=0; i < elf_shared->sheaders.count; i++) {		Address *secaddr;		if (c32) {//			fprintf(stderr, "desc sec %d, %08x\n", i, s32->sh_addr);			secaddr = createAddress32(s32->sh_addr);		} else {			secaddr = createAddress64(s64->sh_addr);		}		if (validAddress(secaddr, scvalid)) {//			fprintf(stderr, "valid!\n");			ht_snprintf(blub, sizeof blub, ";  section %d <%s>", i, getSegmentNameByAddress(secaddr));			addComment(secaddr, 0, "");			addComment(secaddr, 0, ";******************************************************************");			addComment(secaddr, 0, blub);			if (c32) {				ht_snprintf(blub, sizeof blub, ";  virtual address  %08x  virtual size   %08x", s32->sh_addr, s32->sh_size);			} else {				ht_snprintf(blub, sizeof blub, ";  virtual address  %08qx  virtual size   %08qx", s64->sh_addr, s64->sh_size);			}			addComment(secaddr, 0, blub);			if (validAddress(secaddr, scinitialized)) {				if (c32) {					ht_snprintf(blub, sizeof blub, ";  file offset      %08x  file size      %08x", s32->sh_offset, s32->sh_size);				} else {					ht_snprintf(blub, sizeof blub, ";  file offset      %08qx  file size      %08qx", s64->sh_offset, s64->sh_size);				}			} else {				ht_snprintf(blub, sizeof blub, ";  section is not in file");			}			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();			if (c32) {				secend_addr->add(s32->sh_size);			} else {				secend_addr->add(s64->sh_size);			}			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(c32 ? s32->sh_size : s64->sh_size);			if (validAddress(secaddr, scinitialized) && validAddress(seciniaddr, scinitialized)) {				initialized->add(secaddr, seciniaddr);			}			delete seciniaddr;			delete secend_addr;		}		delete secaddr;		s32++;		s64++;	}	/* symbols */	if (c32) {		for (uint i=1; i < elf_shared->sheaders.count; i++) {			if ((elf_shared->sheaders.sheaders32[i].sh_type==ELF_SHT_SYMTAB) || (elf_shared->sheaders.sheaders32[i].sh_type==ELF_SHT_DYNSYM)) {				initInsertSymbols(i);			}		}		initInsertFakeSymbols();	} else {		for (uint i=1; i < elf_shared->sheaders.count; i++) {			if ((elf_shared->sheaders.sheaders64[i].sh_type==ELF_SHT_SYMTAB) || (elf_shared->sheaders.sheaders64[i].sh_type==ELF_SHT_DYNSYM)) {				initInsertSymbols(i);			}		}	}	/*	 *	entrypoint	 */	if (entry) {		pushAddress(entry, entry);		assignSymbol(entry, "entrypoint", label_func);		addComment(entry, 0, "");		addComment(entry, 0, ";****************************");		switch (c32 ? elf_shared->header32.e_type : elf_shared->header64.e_type) {		case ELF_ET_DYN:			addComment(entry, 0, ";  dynamic executable entry point");			break;		case ELF_ET_EXEC:			addComment(entry, 0, ";  executable entry point");			break;		default:			addComment(entry, 0, ";  entry point");		}		addComment(entry, 0, ";****************************");		delete entry;	}	setLocationTreeOptimizeThreshold(1000);	setSymbolTreeOptimizeThreshold(1000);	Analyser::beginAnalysis();}/* * */void ElfAnalyser::initInsertFakeSymbols(){	if (!elf_shared->undefined2fakeaddr) return;	foreach(FakeAddr, fa, *elf_shared->undefined2fakeaddr, {		Address *address = createAddress32(fa->addr);		FileOfs h = elf_shared->sheaders.sheaders32[fa->secidx].sh_offset;		ELF_SYMBOL32 sym;		file->seek(h + fa->symidx * sizeof (ELF_SYMBOL32));		file->readx(&sym, sizeof sym);		createHostStruct(&sym, ELF_SYMBOL32_struct, elf_shared->byte_order);		FileOfs sto = elf_shared->sheaders.sheaders32[			elf_shared->sheaders.sheaders32[fa->secidx].sh_link].sh_offset;		file->seek(sto + sym.st_name);		char *name = file->fgetstrz();		char buf[1024];		ht_snprintf(buf, sizeof buf, "undef_%s", name);		free(name);		make_valid_name(buf, buf);		assignSymbol(address, buf, label_func);	})}void ElfAnalyser::initInsertSymbols(int shidx){	char elf_buffer[1024];	if (elf_shared->ident.e_ident[ELF_EI_CLASS] == ELFCLASS32) {		FileOfs h = elf_shared->sheaders.sheaders32[shidx].sh_offset;		FileOfs sto = elf_shared->sheaders.sheaders32[elf_shared->sheaders.sheaders32[shidx].sh_link].sh_offset;		uint symnum = elf_shared->sheaders.sheaders32[shidx].sh_size / sizeof (ELF_SYMBOL32);		int *entropy = random_permutation(symnum);		for (uint i = 0; i < symnum; i++) {			ELF_SYMBOL32 sym;			if (entropy[i] == 0) continue;			file->seek(h+entropy[i]*sizeof (ELF_SYMBOL32));			file->read(&sym, sizeof sym);			createHostStruct(&sym, ELF_SYMBOL32_struct, elf_shared->byte_order);			file->seek(sto+sym.st_name);			char *name = file->fgetstrz();			if (!name) continue;			switch (sym.st_shndx) {			case ELF_SHN_UNDEF:				break;			case ELF_SHN_ABS:				break;			case ELF_SHN_COMMON:				break;			default:				// sym.st_shndx				break;			}			const char *bind;			switch (ELF32_ST_BIND(sym.st_info)) {			case ELF_STB_LOCAL:				bind="local";				break;			case ELF_STB_GLOBAL:				bind="global";				break;			case ELF_STB_WEAK:				bind="weak";				break;			default:				bind="?";				break;			}			switch (ELF32_ST_TYPE(sym.st_info)) {			case ELF_STT_NOTYPE:			case ELF_STT_FUNC: {				char *label = name;				if (!getSymbolByName(label)) {					elf32_addr sym_addr = sym.st_value;					if (elf_shared->shrelocs && sym.st_shndx > 0 && sym.st_shndx < elf_shared->sheaders.count					&& elf_shared->shrelocs[sym.st_shndx].relocAddr) {						sym_addr += elf_shared->shrelocs[sym.st_shndx].relocAddr;					}					Address *address = createAddress32(sym_addr);					if (validAddress(address, scvalid)) {						char *demangled = cplus_demangle(label, DMGL_PARAMS | DMGL_ANSI);						if (!demangled) demangled = cplus_demangle_v3(label, DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES);						make_valid_name(label, label);						ht_snprintf(elf_buffer, sizeof elf_buffer, "; function %s (%s)", (demangled) ? demangled : label, bind);						free(demangled);						addComment(address, 0, "");						addComment(address, 0, ";********************************************************");						addComment(address, 0, elf_buffer);						addComment(address, 0, ";********************************************************");						pushAddress(address, address);						assignSymbol(address, label, label_func);					}					delete address;				}				break;			}			case ELF_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(elf_buffer, sizeof elf_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, elf_buffer);						addComment(address, 0, ";********************************************************");						assignSymbol(address, label, label_data);					}					delete address;				}				break;			}			case ELF_STT_SECTION:			case ELF_STT_FILE:				break;			}			free(name);		}		if (entropy) free(entropy);	} else {		// FIXME: 64 bit		FileOfs h = elf_shared->sheaders.sheaders64[shidx].sh_offset;		FileOfs sto = elf_shared->sheaders.sheaders64[elf_shared->sheaders.sheaders64[shidx].sh_link].sh_offset;		uint symnum = elf_shared->sheaders.sheaders64[shidx].sh_size / sizeof (ELF_SYMBOL64);		int *entropy = random_permutation(symnum);		for (uint i=0; i<symnum; i++) {			ELF_SYMBOL64 sym;			if (entropy[i] == 0) continue;			file->seek(h+entropy[i]*sizeof (ELF_SYMBOL64));			file->read(&sym, sizeof sym);			createHostStruct(&sym, ELF_SYMBOL64_struct, elf_shared->byte_order);			file->seek(sto+sym.st_name);			char *name = file->fgetstrz();			if (!name) continue;			switch (sym.st_shndx) {			case ELF_SHN_UNDEF:				break;			case ELF_SHN_ABS:				break;			case ELF_SHN_COMMON:				break;			default: {				// sym.st_shndx				break;			}			}			const char *bind;			switch (ELF64_ST_BIND(sym.st_info)) {			case ELF_STB_LOCAL:				bind="local";				break;			case ELF_STB_GLOBAL:				bind="global";				break;			case ELF_STB_WEAK:				bind="weak";				break;			default:				bind="?";				break;			}			switch (ELF64_ST_TYPE(sym.st_info)) {			case ELF_STT_NOTYPE:			case ELF_STT_FUNC: {				char *label = name;				if (!getSymbolByName(label)) {					Address *address = createAddress64(sym.st_value);					if (validAddress(address, scvalid)) {						char *demangled = cplus_demangle(label, DMGL_PARAMS | DMGL_ANSI);						if (!demangled) demangled = cplus_demangle_v3(label, DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES);						make_valid_name(label, label);						ht_snprintf(elf_buffer, sizeof elf_buffer, "; function %s (%s)", (demangled) ? demangled : label, bind);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利91精品| 日韩av在线免费观看不卡| 91精品国产色综合久久不卡蜜臀 | 日韩毛片视频在线看| 美女精品一区二区| 日本伊人午夜精品| 美女视频免费一区| 精品一区二区国语对白| 精品一区二区三区欧美| 国产精品66部| 成人av中文字幕| 91麻豆国产精品久久| 91成人网在线| 91精品在线免费观看| 日韩精品一区二区三区老鸭窝| 精品国产伦一区二区三区观看方式 | 欧美精品自拍偷拍| 日韩一区二区在线观看| 久久亚洲一区二区三区明星换脸 | 色婷婷久久久综合中文字幕| 欧美影视一区在线| 精品国产亚洲在线| 国产精品拍天天在线| 亚洲国产成人高清精品| 美女视频一区在线观看| jvid福利写真一区二区三区| 91成人在线精品| 久久综合九色综合欧美就去吻| 国产网站一区二区| 一区二区三区四区亚洲| 日本少妇一区二区| 成人av在线网| 69堂国产成人免费视频| 久久久久久夜精品精品免费| 中文字幕在线不卡国产视频| 日韩电影在线一区| gogogo免费视频观看亚洲一| 在线不卡一区二区| 国产精品久久网站| 美女看a上一区| 欧美在线视频不卡| 国产欧美一区二区三区鸳鸯浴| 综合激情成人伊人| 麻豆国产欧美一区二区三区| 91麻豆免费看片| 精品国产乱码久久久久久久 | 日韩国产欧美一区二区三区| 成人av网站免费观看| 日韩一区二区电影在线| 亚洲激情网站免费观看| 成人丝袜18视频在线观看| 欧美一激情一区二区三区| 国产精品美女久久久久久| 韩国女主播成人在线| 91.成人天堂一区| 亚洲综合免费观看高清在线观看| 国产精品888| 精品国产91乱码一区二区三区| 亚洲在线一区二区三区| 成人高清视频免费观看| 久久亚区不卡日本| 麻豆91在线播放免费| 欧美美女bb生活片| 亚洲一区二区三区精品在线| youjizz国产精品| 日本一区二区综合亚洲| 国产伦精品一区二区三区免费迷| 在线播放91灌醉迷j高跟美女 | 成人av免费观看| 久久综合一区二区| 国产原创一区二区| 精品国产一二三区| 国产在线麻豆精品观看| 精品黑人一区二区三区久久 | 亚洲色图.com| 99久久久无码国产精品| 中文字幕中文字幕在线一区 | 国产成人综合视频| 国产亚洲1区2区3区| 国产成人无遮挡在线视频| 国产亚洲一区二区三区四区| 国产精品系列在线观看| 日本一区二区三区电影| 9l国产精品久久久久麻豆| 亚洲人精品一区| 欧美日韩视频在线观看一区二区三区 | 欧美性猛交xxxx黑人交| 洋洋av久久久久久久一区| 欧美午夜一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 91在线免费视频观看| 一区二区三区丝袜| 91精品婷婷国产综合久久 | 国产欧美一二三区| 99久久伊人网影院| 亚洲v精品v日韩v欧美v专区| 日韩三级.com| 国产激情一区二区三区四区| 国产精品国产三级国产| 欧美日韩国产天堂| 国内成人免费视频| 亚洲精品高清视频在线观看| 中文幕一区二区三区久久蜜桃| 成人高清免费观看| 亚瑟在线精品视频| 欧美成人精精品一区二区频| 成人网页在线观看| 天堂久久一区二区三区| 久久精品视频免费| 欧美调教femdomvk| 国产精品99久久久久| 一级日本不卡的影视| 精品国产不卡一区二区三区| 日本韩国精品一区二区在线观看| 肉色丝袜一区二区| 国产日产欧美一区二区三区| 在线免费观看日本一区| 国产米奇在线777精品观看| 亚洲欧美日韩国产综合| 久久影院视频免费| 欧美色欧美亚洲另类二区| 国产精品乡下勾搭老头1| 三级欧美在线一区| 国产精品久久久久9999吃药| 91精品国产aⅴ一区二区| av网站免费线看精品| 黄页网站大全一区二区| 亚洲电影一级片| 亚洲天堂2014| 中文字幕不卡三区| 欧美白人最猛性xxxxx69交| 97久久精品人人爽人人爽蜜臀| 国产原创一区二区| 老司机精品视频线观看86| 亚洲影院理伦片| 亚洲欧美韩国综合色| 国产精品天美传媒| 久久毛片高清国产| 久久久久久久国产精品影院| 精品久久人人做人人爰| 欧美精三区欧美精三区| 欧美日韩免费在线视频| 日本高清视频一区二区| 一本色道久久加勒比精品| 成人av免费在线观看| 国产传媒欧美日韩成人| 国产精品88av| eeuss影院一区二区三区| 成人高清免费观看| 91免费看`日韩一区二区| 99re这里只有精品视频首页| 成人看片黄a免费看在线| 国产a区久久久| 成人久久视频在线观看| 99精品一区二区三区| av亚洲精华国产精华精华| 91在线视频观看| 欧美性一区二区| 日韩一区二区三区免费看| 在线不卡免费av| 久久男人中文字幕资源站| 久久久久久久久久久久久女国产乱| 26uuu精品一区二区在线观看| 久久伊99综合婷婷久久伊| 国产女同性恋一区二区| 亚洲人成小说网站色在线| 亚洲成a人片在线观看中文| 偷拍亚洲欧洲综合| 久久se精品一区二区| 国产精品一二三| 色综合咪咪久久| 欧美日韩免费一区二区三区 | 国产在线精品一区在线观看麻豆| 国产乱码精品一区二区三区av | 国产福利一区二区三区| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 欧美日韩一区不卡| 91精品国产麻豆| 中文字幕高清不卡| 天堂午夜影视日韩欧美一区二区| 国产一区二区三区| 91福利视频在线| 精品国产免费一区二区三区四区| 亚洲欧洲99久久| 三级久久三级久久久| 日韩不卡一区二区三区| 日韩电影在线免费观看| 日本不卡1234视频| 奇米四色…亚洲| 99精品欧美一区| 欧美丰满少妇xxxxx高潮对白 | 欧美日韩国产综合久久 | 中文字幕一区免费在线观看| 亚洲成人免费在线| 国产精品一级片在线观看| 欧美性猛交xxxx乱大交退制版 | 亚洲精品中文在线影院| 另类综合日韩欧美亚洲| 99热99精品| 久久久久久综合|