亚洲欧美第一页_禁久久精品乱码_粉嫩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小说网| 欧美一区二区成人6969| 亚洲国产精品精华液ab| 日本欧美在线看| 在线观看成人免费视频| 日本一区二区三级电影在线观看| 一区二区欧美精品| 成人午夜激情影院| 精品日产卡一卡二卡麻豆| 亚洲靠逼com| 97精品久久久午夜一区二区三区| 欧美电视剧在线看免费| 午夜伊人狠狠久久| 色综合网色综合| 国产精品久久久久久久久免费丝袜| 蜜桃视频一区二区| 欧美精品久久99久久在免费线| 亚洲欧美日本在线| 国产福利精品一区二区| 久久综合久色欧美综合狠狠| 麻豆成人av在线| 久久欧美中文字幕| 韩国视频一区二区| www亚洲一区| 国产成人自拍高清视频在线免费播放| 欧美xxxxx牲另类人与| 日韩电影免费一区| 日韩精品最新网址| 国产在线乱码一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 韩国成人在线视频| 欧美激情在线一区二区| 99精品国产99久久久久久白柏| 亚洲日本一区二区三区| 欧美午夜片在线观看| 日韩av电影免费观看高清完整版 | 激情成人午夜视频| 亚洲欧美在线另类| 欧美一级高清大全免费观看| 色综合网站在线| 成人av电影在线| 国产剧情在线观看一区二区| 亚洲美女视频在线| 成人欧美一区二区三区| 欧美国产精品一区| 欧美国产成人精品| 中文字幕av资源一区| 国产欧美精品国产国产专区| 久久影视一区二区| 久久久久久久久久久久久女国产乱| 欧美一区二区三区公司| 日韩亚洲电影在线| 日韩免费观看高清完整版| 欧美一个色资源| 日韩欧美自拍偷拍| 国产亚洲欧美中文| 日韩精品一区二区三区视频| 日韩欧美在线影院| 一区二区欧美在线观看| 亚洲另类春色校园小说| 亚洲成人激情社区| 亚洲卡通动漫在线| 国产精品午夜在线观看| 久久一区二区视频| 中文无字幕一区二区三区| 欧美精品一区男女天堂| 精品美女在线观看| 久久日韩精品一区二区五区| 欧美大胆一级视频| 日韩一区二区在线观看视频| 欧美美女bb生活片| 91精品国产美女浴室洗澡无遮挡| 欧美在线视频日韩| 在线电影一区二区三区| 欧美v日韩v国产v| 国产亚洲欧美中文| 中文字幕av一区二区三区高| 久久噜噜亚洲综合| 日韩一区欧美一区| 天天亚洲美女在线视频| 毛片av一区二区| 亚洲欧美一区二区三区极速播放 | 久久精品国产亚洲a| 五月婷婷欧美视频| 一区二区成人在线| 美女一区二区久久| 国产a久久麻豆| 成人黄色777网| 欧美日韩成人综合天天影院| 日韩午夜在线观看视频| 国产精品久久久久一区二区三区共| 亚洲视频一二三| 午夜伦欧美伦电影理论片| 黄网站免费久久| 日韩一区二区三区视频在线| 国产视频一区在线观看| 国产福利一区二区三区视频| 精品久久久久久亚洲综合网 | 色婷婷激情一区二区三区| 91福利国产精品| 亚洲精品第一国产综合野| 国模少妇一区二区三区| 在线视频综合导航| 国产精品美女久久久久高潮| 奇米精品一区二区三区在线观看| va亚洲va日韩不卡在线观看| 欧美va亚洲va在线观看蝴蝶网| 亚洲欧美一区二区在线观看| 99久久99久久精品国产片果冻| 日韩精品资源二区在线| 精品伦理精品一区| 专区另类欧美日韩| 91网站视频在线观看| 91精品啪在线观看国产60岁| 国产日产欧美一区| 成人h版在线观看| 欧美久久一二区| 最新不卡av在线| 91精品国产综合久久精品麻豆 | 成人午夜激情视频| 色哟哟精品一区| 91精品久久久久久久91蜜桃| 欧美午夜片在线看| 精品国产乱码久久久久久老虎| 国产精品久久一卡二卡| 天天av天天翘天天综合网| 蜜臀国产一区二区三区在线播放 | 亚洲欧美日韩精品久久久久| 日韩一区在线免费观看| 青青青伊人色综合久久| 欧美在线视频你懂得| 久久久精品2019中文字幕之3| 国产精品视频yy9299一区| 日本vs亚洲vs韩国一区三区二区| 三级久久三级久久| av色综合久久天堂av综合| 成人在线视频一区二区| 欧美xxxx老人做受| 一区二区三区在线观看视频| 国产ts人妖一区二区| 这里是久久伊人| 国产精品国产三级国产a| 国精产品一区一区三区mba桃花 | 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品一二三区在线| 99免费精品视频| 久久一区二区三区四区| 天堂午夜影视日韩欧美一区二区| 欧美日韩aaaaaa| 欧美二区在线观看| 欧美va日韩va| 国产日韩v精品一区二区| 一区二区三区免费观看| 91网页版在线| 国产夜色精品一区二区av| 韩国精品主播一区二区在线观看 | 日本不卡一区二区| 91在线观看视频| 亚洲欧美国产三级| 成人激情黄色小说| 日韩一级片网站| 午夜精品在线视频一区| 69堂国产成人免费视频| 伊人婷婷欧美激情| 在线欧美一区二区| ㊣最新国产の精品bt伙计久久| 国产真实乱子伦精品视频| 在线成人av影院| 亚洲成a人片在线观看中文| 欧美日韩激情在线| 亚洲高清免费一级二级三级| 91精品国产色综合久久ai换脸| 亚洲综合色噜噜狠狠| 3d成人h动漫网站入口| 一区二区三区日韩精品| 精品视频在线免费看| 亚洲国产aⅴ天堂久久| 欧美在线免费观看亚洲| 午夜精品福利一区二区三区av| 欧美在线视频日韩| 亚洲三级久久久| 国产激情一区二区三区| 久久尤物电影视频在线观看| 成人avav在线| 国产精品国产成人国产三级| 日本道色综合久久| 免费视频最近日韩| 久久夜色精品国产噜噜av| 91丨九色丨蝌蚪丨老版|