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

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

?? decode.c

?? 二進制翻譯的一個軟件
?? C
字號:
/* * Copyright (c) 2005, Johns Hopkins University and The EROS Group, LLC. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * *  * Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. *  * Redistributions in binary form must reproduce the above *    copyright notice, this list of conditions and the following *    disclaimer in the documentation and/or other materials provided *    with the distribution. * *  * Neither the name of the Johns Hopkins University, nor the name *    of The EROS Group, LLC, nor the names of their contributors may *    be used to endorse or promote products derived from this *    software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. *//* * Table-assisted decoder for the x86 instruction set. * * Currently handles only the 32-bit instruction set. */#include <stdio.h>#include <assert.h>#include <stdbool.h>#include "switches.h"#include "debug.h"#include "machine.h"#include "decode.h"#include "emit.h"#define READ_IN_NEXT_BYTE() 		\      do {ds->b = istream_peekByte(M);	\      istream_nextByte(M); } while(0)				#define READ_IN_NEXT_WORD() 		\      do { ds->b = istream_peekWord(M);	\      istream_nextWord(M); } while(0)#define READ_IN_NEXT_LONG() 		\      do { ds->b = istream_peekLong(M);	\      istream_nextLong(M); } while(0)booldo_decode(machine_t *M, decode_t *ds){  unsigned i;  CONST_TABLE OpCode *table = nopbyte0;  CONST_TABLE OpCode *pEntry = 0;  int wierd = 0;  ds->decode_eip = M->next_eip;#ifdef STATIC_PASS  ds->mem_decode_eip = M->mem_next_eip;#endif  ds->attr = 0;  ds->emitfn = 0;  ds->modrm_regs = 0;	   /* registers sourced by this instruction */  ds->need_sib = 0;  ds->dispBytes = 0;  ds->no_of_prefixes = 0;  ds->Group1_Prefix=0;  ds->Group2_Prefix=0;  ds->Group3_Prefix=0;  ds->Group4_Prefix=0;  ds->flags = 0;  ds->opstate = OPSTATE_DATA32 | OPSTATE_ADDR32;  /* First, pick off the opcode prefixes. There can be more than one.  QUESTION: How does the processor behave if the various prefix  constraints are violated?  ANSWER: We don't care. We will copy the bytes and the processor  will behave however the processor behaves */    for(;;){    ds->b = istream_peekByte(M);    if (IS_IFAULT(ds->b))      goto handle_ifault;    ds->attr = table[ds->b].attr;    if ((ds->attr & DF_PREFIX) == 0)      break;        ds->no_of_prefixes ++;    switch(ds->b) {    case PREFIX_LOCK:    case PREFIX_REPZ:    case PREFIX_REPNZ:      ds->flags |= DSFL_GROUP1_PREFIX;      ds->Group1_Prefix = ds->b;      break;    case PREFIX_CS:    case PREFIX_DS:    case PREFIX_ES:    case PREFIX_FS:    case PREFIX_GS:    case PREFIX_SS:      ds->flags |= DSFL_GROUP2_PREFIX;      ds->Group2_Prefix = ds->b;      break;    case PREFIX_OPSZ:      ds->flags |= DSFL_GROUP3_PREFIX;      ds->opstate ^= OPSTATE_DATA32;      ds->Group3_Prefix = ds->b;      break;    case PREFIX_ADDRSZ:      ds->flags |= DSFL_GROUP4_PREFIX;      ds->opstate ^= OPSTATE_ADDR32;      ds->Group4_Prefix = ds->b;      break;    }        /* Note that the prefix bytes are not copied onto the instruction stream; Instead, they are just        copied onto their respective placeholders within the decode structure */    istream_nextByte(M);  }  /* Pick off the instruction bytes */#ifdef STATIC_PASS  ds->instr = (unsigned char *)M->mem_next_eip;#else  ds->instr = (unsigned char *)M->next_eip;#endif  for(;;) {    ds->b = istream_peekByte(M);    if (IS_IFAULT(ds->b))      goto handle_ifault;    pEntry = &table[ds->b];    ds->attr = pEntry->attr;    istream_nextByte(M);    if (ds->attr & DF_TABLE) {      table = pEntry->ptr;      //ds->attr &= ~DF_TABLE;      continue;    }    if (ds->attr & DF_FLOAT) {      wierd = 1;      table = pEntry->ptr;      ds->b = istream_peekByte(M);      if (IS_IFAULT(ds->b))        goto handle_ifault;      istream_nextByte(M);      ds->modrm.byte = ds->b;      if (ds->modrm.parts.mod == 0x3u) {	pEntry = &table[ds->modrm.parts.reg + 8];	ds->attr = pEntry->attr;	if (ds->attr & DF_ONE_MORE_LEVEL) {	  table = pEntry->ptr;	  pEntry = &table[ds->modrm.parts.rm];	  ds->attr = pEntry->attr;	}      }      else {	pEntry = &table[ds->modrm.parts.reg];	ds->attr = pEntry->attr;      }    }    break;  }/*   if ( ((ds->Group1_Prefix == 0xF2u) ||  *//* 	(ds->Group1_Prefix == 0xF3u)) &&  *//*        (ds->instr[0] == 0x0Fu) && (ds->instr[1] == 0x7Eu) ) { *//*     ds->attr &= (~DF_MODRM); *//*     fprintf(stderr, "*** THIS CASE ***\n"); *//*   } */  /* If needed, fetch the modR/M byte: */  if (!wierd) {    /* i.e., If we have not already eaten up the modR/M byte because of Escape opcodes */    if (ds->attr & (DF_MODRM|DF_GROUP))      READ_IN_NEXT_BYTE();  }  /* If attr now contains DF_GROUP, then the last byte fetched (the   * current value of b) was the modrm byte and we need to do one more   * round of table processing to pick off the proper opcode. */  if (ds->attr & DF_GROUP) {    ds->modrm.byte = ds->b;    pEntry = pEntry->ptr;    pEntry += ds->modrm.parts.reg;    ds->attr |= pEntry->attr;  }  /* Note that if opcode requires modrm processing then ds->b   * currently holds the modrm byte.   */  if (ds->attr & (DF_MODRM))    ds->modrm.byte = ds->b;  /* /attr/ now contains accumulated attributes. /pEntry/ points to   * last located entry, which specifies what we are going to do in   * the end. Finish copying modrm arguments and immediate values, if   * any.    */  if (ds->attr & (DF_MODRM|DF_GROUP)) {    if (ds->opstate & OPSTATE_ADDR32) {      /* ds->mod of 00b, 01b, 10b  are the register-indirect cases,	 except that ds->rm == 100b implies a sib byte and (ds->mod,	 ds->rm) of (00b, 101b) is disp32. */      if ((ds->modrm.parts.mod != 0x3u) && (ds->modrm.parts.rm == 4u))	ds->need_sib = 1;	/* scaled index mode */            if (ds->modrm.parts.mod == 0u && ds->modrm.parts.rm == 5u)	ds->dispBytes = 4;	/* memory absolute */      else if (ds->modrm.parts.mod == 1u)	ds->dispBytes = 1;      else if (ds->modrm.parts.mod == 2u)	ds->dispBytes = 4;    }    else {        /* No SIB byte to consider, but pick off          (ds->mod, ds->rm) == (00b,110b) since that is disp16 */      if (ds->modrm.parts.mod == 0u && ds->modrm.parts.rm == 6u)	ds->dispBytes = 2;	/* memory absolute */      else if (ds->modrm.parts.mod == 1u)	ds->dispBytes = 1;      else if (ds->modrm.parts.mod == 2u)	ds->dispBytes = 2;    }    if (ds->need_sib) {      READ_IN_NEXT_BYTE();      ds->sib.byte = ds->b;      if ((ds->sib.parts.base == GP_REG_EBP) && (ds->modrm.parts.mod == 0u))	ds->dispBytes = 4;    }    if (ds->dispBytes) {      if(ds->dispBytes > 2){	READ_IN_NEXT_LONG();	ds->displacement = ds->b;      }else if(ds->dispBytes > 1){	READ_IN_NEXT_WORD();	ds->displacement = ds->b;      } else{	READ_IN_NEXT_BYTE();	ds->displacement = ds->b;      }		    }  }  /* At this point we have everything except the immediates (or     offsets, depending on the instruction. Of the instructions that     take such, only one (ENTER) takes more than one. Iw mode is in     fact used only by ENTER, RET, and LRET. We therefore proceed by     handling Iw as a special case. */  if (ds->attr & DF_Iw) {    READ_IN_NEXT_WORD();    ds->imm16 = ds->b;  }  if ((ds->attr & DF_Ib) || (ds->attr & DF_Jb)) {    READ_IN_NEXT_BYTE();    signed char sc = ds->b;	/* for sign extension */    ds->immediate = sc;  }  if (ds->attr & DF_Iv) {    if (ds->opstate & OPSTATE_DATA32) {      READ_IN_NEXT_LONG();      ds->immediate = ds->b;    }    else{      READ_IN_NEXT_WORD();      ds->immediate = ds->b;    }  }  if ((ds->attr & DF_Ov) || (ds->attr & DF_Ob)) {    if (ds->opstate & OPSTATE_ADDR32) {      READ_IN_NEXT_LONG();      ds->immediate = ds->b;    }    else{      READ_IN_NEXT_WORD();      ds->immediate = ds->b;    }  }  if (ds->attr & (DF_Jv|DF_Ap)) {	    if (ds->opstate & OPSTATE_DATA32) {      READ_IN_NEXT_LONG();      ds->immediate = ds->b;    }    else{      READ_IN_NEXT_WORD();      ds->immediate = ds->b;    }  }  if (ds->attr & DF_Ap) {    READ_IN_NEXT_WORD();    ds->imm16 = ds->b;  }  #ifdef STATIC_PASS      ds->pInstr = (unsigned char *)M->mem_next_eip;#else  ds->pInstr = (unsigned char *)M->next_eip;#endif  ds->emitfn = pEntry->ptr;  ds->pEntry = pEntry;    if (ds->attr & DF_UNDEFINED)    {    DEBUG(decode)      printf ("\nUndefined opcode: %2X %2X at %08X\n", ds->instr[0], ds->instr[1], ds->decode_eip);    return false;  }  if (pEntry->ptr == 0)    return false;  return true; handle_ifault:  /* We took an instruction fetch fault of some form on this byte. */#ifdef STATIC_PASS      ds->pInstr = (unsigned char *)M->mem_next_eip;#else  ds->pInstr = (unsigned char *)M->next_eip;#endif  ds->emitfn = pEntry->ptr;  ds->pEntry = pEntry;  return false;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看www91| 欧美不卡123| 日韩欧美高清一区| 亚洲欧洲综合另类在线| 九九热在线视频观看这里只有精品| 高清成人免费视频| 日韩欧美久久久| 亚洲成人精品影院| www.色综合.com| 久久女同互慰一区二区三区| 午夜一区二区三区在线观看| 99久久精品国产导航| 精品国产在天天线2019| 婷婷久久综合九色综合绿巨人| 成人av网站在线| 欧美成人午夜电影| 婷婷丁香激情综合| 欧美日韩一二三| 亚洲日本在线天堂| 9i在线看片成人免费| 欧美激情在线一区二区| 国内精品免费在线观看| 日韩亚洲欧美成人一区| 视频一区国产视频| 欧美三级中文字幕| 天天综合天天综合色| 欧美三级三级三级爽爽爽| 一区二区三区91| 在线视频亚洲一区| 亚洲午夜精品一区二区三区他趣| 本田岬高潮一区二区三区| 国产日韩欧美精品在线| 精品在线你懂的| 久久亚洲综合av| 国产一区二区女| 久久亚区不卡日本| 国产精品一区二区免费不卡| 久久精品夜色噜噜亚洲a∨| 国产一区二区三区美女| wwww国产精品欧美| 国产美女av一区二区三区| 久久亚洲精华国产精华液 | 欧美一区二区视频在线观看2022| 夜夜嗨av一区二区三区| 欧美网站一区二区| 亚洲bt欧美bt精品777| 欧美区视频在线观看| 美女视频免费一区| 26uuu另类欧美| 成人av手机在线观看| 亚洲欧美日韩系列| 欧美人与禽zozo性伦| 蜜桃视频一区二区| 久久精品一区二区| 91亚洲精品乱码久久久久久蜜桃| 亚洲裸体xxx| 欧美一级日韩一级| 国产一区二区看久久| 中文字幕五月欧美| 欧美四级电影在线观看| 男女性色大片免费观看一区二区| 久久精品这里都是精品| 91麻豆自制传媒国产之光| 亚洲地区一二三色| 久久只精品国产| 91污在线观看| 日韩激情视频在线观看| 国产日韩欧美不卡| 欧美性生活影院| 国产精品一区三区| 亚洲一区中文在线| 久久九九全国免费| 欧美性大战xxxxx久久久| 国产一区二区剧情av在线| 亚洲欧美色图小说| 久久综合网色—综合色88| 欧美在线一区二区三区| 黄网站免费久久| 亚洲一区二区三区影院| 26uuuu精品一区二区| 欧美视频精品在线| 成人在线综合网| 午夜精品免费在线观看| 国产精品美女www爽爽爽| 337p亚洲精品色噜噜噜| 91浏览器打开| 国产jizzjizz一区二区| 婷婷丁香激情综合| 亚洲天堂成人网| 精品免费日韩av| 欧美美女网站色| 色婷婷激情综合| 成人av片在线观看| 国产成人精品三级| 国产综合色产在线精品| 日韩电影在线看| 亚洲一区二区三区爽爽爽爽爽 | 日本韩国欧美在线| 国产成人在线视频播放| 日本vs亚洲vs韩国一区三区二区 | 日一区二区三区| 国产日韩欧美激情| 日韩欧美一区二区在线视频| 欧美亚洲一区二区三区四区| 99在线视频精品| www.综合网.com| 国产精品白丝jk黑袜喷水| 婷婷成人激情在线网| 一区二区三区.www| 亚洲美女免费在线| 亚洲婷婷综合久久一本伊一区| 国产亚洲综合性久久久影院| 日韩欧美一级二级三级| 欧美一区二区网站| 精品日韩一区二区三区| 欧美一级免费大片| 日韩一区二区精品葵司在线| 6080日韩午夜伦伦午夜伦| 在线播放一区二区三区| 欧美一区二区久久久| 日韩一区二区免费电影| 日韩欧美区一区二| 久久久久久久久伊人| 国产日本欧美一区二区| 国产精品午夜春色av| 自拍偷自拍亚洲精品播放| 亚洲女同女同女同女同女同69| 亚洲欧洲99久久| 亚洲一区在线观看视频| 亚洲1区2区3区4区| 激情成人综合网| 国产裸体歌舞团一区二区| 国产精品1区2区3区在线观看| 国产成人av一区二区三区在线| 成人白浆超碰人人人人| 在线观看国产91| 欧美一级一区二区| 国产丝袜在线精品| 一区二区三区四区不卡在线| 性感美女极品91精品| 久久精品国产99| 成人午夜视频在线观看| 在线免费不卡电影| 日韩欧美国产系列| 国产欧美一区二区三区鸳鸯浴| 欧美国产禁国产网站cc| 夜夜精品视频一区二区| 日韩高清在线不卡| 岛国一区二区在线观看| 欧美自拍偷拍一区| 精品美女在线播放| 一区二区三区中文字幕精品精品| 免费在线一区观看| 91免费在线视频观看| 在线电影院国产精品| 国产亲近乱来精品视频 | 国产精品污网站| 午夜一区二区三区视频| 国产99久久久国产精品潘金 | 91精品国产丝袜白色高跟鞋| 国产亚洲一区二区在线观看| 亚洲精品一卡二卡| 精品亚洲免费视频| 91麻豆国产福利在线观看| 日韩欧美一二三区| 一区二区三区欧美亚洲| 国产精品一区一区三区| 欧美日韩国产色站一区二区三区| 中文字幕免费一区| 极品销魂美女一区二区三区| 欧美一a一片一级一片| 欧美国产精品v| 久久精品国产秦先生| 91久久精品网| 中文字幕av一区二区三区免费看| 无码av免费一区二区三区试看| 成人av片在线观看| 久久老女人爱爱| 日本欧美在线观看| 欧美影片第一页| 日韩理论电影院| 国产高清亚洲一区| 欧美一区二区精品久久911| 亚洲欧美一区二区久久| 国产999精品久久| 精品久久久久久久久久久久久久久| 亚洲线精品一区二区三区八戒| 成人一区在线观看| 久久亚洲捆绑美女| 蜜臀av性久久久久蜜臀aⅴ流畅 | 精品国产一区久久| 免费在线看一区| 欧美一区二区精品久久911| 亚洲成av人片www| 91精品福利视频| 亚洲精品国产a| 欧美日韩中文国产| 偷拍日韩校园综合在线| 宅男噜噜噜66一区二区66| 午夜私人影院久久久久|