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

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

?? decode.c

?? Ksplice is practical technology for updating the Linux kernel without rebooting. It enables you to a
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* ----------------------------------------------------------------------------- * decode.c * * Copyright (c) 2005, 2006, Vivek Mohan <vivek@sig9.com> * All rights reserved. See LICENSE * ----------------------------------------------------------------------------- */#include "types.h"#include "itab.h"#include "input.h"#include "decode.h"#ifndef __UD_STANDALONE__# include <string.h>#endif /* __UD_STANDALONE__ *//* The max number of prefixes to an instruction */#define MAX_PREFIXES    15static struct ud_itab_entry ie_invalid = { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none };static struct ud_itab_entry ie_pause   = { UD_Ipause,   O_NONE, O_NONE, O_NONE, P_none };static struct ud_itab_entry ie_nop     = { UD_Inop,     O_NONE, O_NONE, O_NONE, P_none };/* Looks up mnemonic code in the mnemonic string table * Returns NULL if the mnemonic code is invalid */const char * ud_lookup_mnemonic( enum ud_mnemonic_code c ){    if ( c < UD_Id3vil )        return ud_mnemonics_str[ c ];    return NULL;}/* Extracts instruction prefixes. */static int get_prefixes( struct ud* u ){    unsigned int have_pfx = 1;    unsigned int i;    uint8_t curr;    /* if in error state, bail out */    if ( u->error )         return -1;     /* keep going as long as there are prefixes available */    for ( i = 0; have_pfx ; ++i ) {        /* Get next byte. */        inp_next(u);         if ( u->error )             return -1;        curr = inp_curr( u );        /* rex prefixes in 64bit mode */        if ( u->dis_mode == 64 && ( curr & 0xF0 ) == 0x40 ) {            u->pfx_rex = curr;          } else {            switch ( curr )              {            case 0x2E :                 u->pfx_seg = UD_R_CS;                 u->pfx_rex = 0;                break;            case 0x36 :                     u->pfx_seg = UD_R_SS;                 u->pfx_rex = 0;                break;            case 0x3E :                 u->pfx_seg = UD_R_DS;                 u->pfx_rex = 0;                break;            case 0x26 :                 u->pfx_seg = UD_R_ES;                 u->pfx_rex = 0;                break;            case 0x64 :                 u->pfx_seg = UD_R_FS;                 u->pfx_rex = 0;                break;            case 0x65 :                 u->pfx_seg = UD_R_GS;                 u->pfx_rex = 0;                break;            case 0x67 : /* adress-size override prefix */                 u->pfx_adr = 0x67;                u->pfx_rex = 0;                break;            case 0xF0 :                 u->pfx_lock = 0xF0;                u->pfx_rex  = 0;                break;            case 0x66:                 /* the 0x66 sse prefix is only effective if no other sse prefix                 * has already been specified.                 */                if ( !u->pfx_insn ) u->pfx_insn = 0x66;                u->pfx_opr = 0x66;                           u->pfx_rex = 0;                break;            case 0xF2:                u->pfx_insn  = 0xF2;                u->pfx_repne = 0xF2;                 u->pfx_rex   = 0;                break;            case 0xF3:                u->pfx_insn = 0xF3;                u->pfx_rep  = 0xF3;                 u->pfx_repe = 0xF3;                 u->pfx_rex  = 0;                break;            default :                 /* No more prefixes */                have_pfx = 0;                break;            }        }        /* check if we reached max instruction length */        if ( i + 1 == MAX_INSN_LENGTH ) {            u->error = 1;            break;        }    }    /* return status */    if ( u->error )         return -1;     /* rewind back one byte in stream, since the above loop      * stops with a non-prefix byte.      */    inp_back(u);    /* speculatively determine the effective operand mode,     * based on the prefixes and the current disassembly     * mode. This may be inaccurate, but useful for mode     * dependent decoding.     */    if ( u->dis_mode == 64 ) {        u->opr_mode = REX_W( u->pfx_rex ) ? 64 : ( ( u->pfx_opr ) ? 16 : 32 ) ;        u->adr_mode = ( u->pfx_adr ) ? 32 : 64;    } else if ( u->dis_mode == 32 ) {        u->opr_mode = ( u->pfx_opr ) ? 16 : 32;        u->adr_mode = ( u->pfx_adr ) ? 16 : 32;    } else if ( u->dis_mode == 16 ) {        u->opr_mode = ( u->pfx_opr ) ? 32 : 16;        u->adr_mode = ( u->pfx_adr ) ? 32 : 16;    }    return 0;}/* Searches the instruction tables for the right entry. */static int search_itab( struct ud * u ){    struct ud_itab_entry * e = NULL;    enum ud_itab_index table;    uint8_t peek;    uint8_t did_peek = 0;    uint8_t curr;     uint8_t index;    /* if in state of error, return */    if ( u->error )         return -1;    /* get first byte of opcode. */    inp_next(u);     if ( u->error )         return -1;    curr = inp_curr(u);     /* resolve xchg, nop, pause crazyness */    if ( 0x90 == curr ) {        if ( !( u->dis_mode == 64 && REX_B( u->pfx_rex ) ) ) {            if ( u->pfx_rep ) {                u->pfx_rep = 0;                e = & ie_pause;            } else {                e = & ie_nop;            }            goto found_entry;        }    }    /* get top-level table */    if ( 0x0F == curr ) {        table = ITAB__0F;        curr  = inp_next(u);        if ( u->error )            return -1;        /* 2byte opcodes can be modified by 0x66, F3, and F2 prefixes */        if ( 0x66 == u->pfx_insn ) {            if ( ud_itab_list[ ITAB__PFX_SSE66__0F ][ curr ].mnemonic != UD_Iinvalid ) {                table = ITAB__PFX_SSE66__0F;                u->pfx_opr = 0;            }        } else if ( 0xF2 == u->pfx_insn ) {            if ( ud_itab_list[ ITAB__PFX_SSEF2__0F ][ curr ].mnemonic != UD_Iinvalid ) {                table = ITAB__PFX_SSEF2__0F;                 u->pfx_repne = 0;            }        } else if ( 0xF3 == u->pfx_insn ) {            if ( ud_itab_list[ ITAB__PFX_SSEF3__0F ][ curr ].mnemonic != UD_Iinvalid ) {                table = ITAB__PFX_SSEF3__0F;                u->pfx_repe = 0;                u->pfx_rep  = 0;            }        }    /* pick an instruction from the 1byte table */    } else {        table = ITAB__1BYTE;     }    index = curr;search:    e = & ud_itab_list[ table ][ index ];    /* if mnemonic constant is a standard instruction constant     * our search is over.     */        if ( e->mnemonic < UD_Id3vil ) {        if ( e->mnemonic == UD_Iinvalid ) {            if ( did_peek ) {                inp_next( u ); if ( u->error ) return -1;            }            goto found_entry;        }        goto found_entry;    }    table = e->prefix;    switch ( e->mnemonic )    {    case UD_Igrp_reg:        peek     = inp_peek( u );        did_peek = 1;        index    = MODRM_REG( peek );        break;    case UD_Igrp_mod:        peek     = inp_peek( u );        did_peek = 1;        index    = MODRM_MOD( peek );        if ( index == 3 )           index = ITAB__MOD_INDX__11;        else            index = ITAB__MOD_INDX__NOT_11;         break;    case UD_Igrp_rm:        curr     = inp_next( u );        did_peek = 0;        if ( u->error )            return -1;        index    = MODRM_RM( curr );        break;    case UD_Igrp_x87:        curr     = inp_next( u );        did_peek = 0;        if ( u->error )            return -1;        index    = curr - 0xC0;        break;    case UD_Igrp_3byte:        curr     = inp_next( u );        did_peek = 0;        if (u->error)            return -1;        index    = curr;        break;    case UD_Igrp_osize:        if ( u->opr_mode == 64 )             index = ITAB__MODE_INDX__64;        else if ( u->opr_mode == 32 )             index = ITAB__MODE_INDX__32;        else            index = ITAB__MODE_INDX__16;        break;     case UD_Igrp_asize:        if ( u->adr_mode == 64 )             index = ITAB__MODE_INDX__64;        else if ( u->adr_mode == 32 )             index = ITAB__MODE_INDX__32;        else            index = ITAB__MODE_INDX__16;        break;                   case UD_Igrp_mode:        if ( u->dis_mode == 64 )             index = ITAB__MODE_INDX__64;        else if ( u->dis_mode == 32 )             index = ITAB__MODE_INDX__32;        else            index = ITAB__MODE_INDX__16;        break;    case UD_Igrp_vendor:        if ( u->vendor == UD_VENDOR_INTEL )             index = ITAB__VENDOR_INDX__INTEL;         else if ( u->vendor == UD_VENDOR_AMD )            index = ITAB__VENDOR_INDX__AMD;        else if ( u->vendor == UD_VENDOR_ANY )            index = ITAB__VENDOR_INDX__ANY;        else            return -1;        break;    case UD_Id3vil:        return -1;        break;    default:        return -1;        break;    }    goto search;found_entry:    u->itab_entry = e;    u->mnemonic = u->itab_entry->mnemonic;    return 0;}static unsigned int resolve_operand_size( const struct ud * u, unsigned int s ){    switch ( s )     {    case SZ_V:        return ( u->opr_mode );    case SZ_Z:          return ( u->opr_mode == 16 ) ? 16 : 32;    case SZ_P:          return ( u->opr_mode == 16 ) ? SZ_WP : SZ_DP;    case SZ_MDQ:        return ( u->opr_mode == 16 ) ? 32 : u->opr_mode;    case SZ_RDQ:        return ( u->dis_mode == 64 ) ? 64 : 32;    default:        return s;    }}static int resolve_mnemonic( struct ud* u ){  /* far/near flags */  u->br_far = 0;  u->br_near = 0;  /* readjust operand sizes for call/jmp instrcutions */  if ( u->mnemonic == UD_Icall || u->mnemonic == UD_Ijmp ) {    /* WP: 16bit pointer */    if ( u->operand[ 0 ].size == SZ_WP ) {        u->operand[ 0 ].size = 16;        u->br_far = 1;        u->br_near= 0;    /* DP: 32bit pointer */    } else if ( u->operand[ 0 ].size == SZ_DP ) {        u->operand[ 0 ].size = 32;        u->br_far = 1;        u->br_near= 0;    } else {        u->br_far = 0;        u->br_near= 1;    }  /* resolve 3dnow weirdness. */  } else if ( u->mnemonic == UD_I3dnow ) {    u->mnemonic = ud_itab_list[ ITAB__3DNOW ][ inp_curr( u )  ].mnemonic;  }  /* SWAPGS is only valid in 64bits mode */  if ( u->mnemonic == UD_Iswapgs && u->dis_mode != 64 ) {    u->error = 1;    return -1;  }  return 0;}/* ----------------------------------------------------------------------------- * decode_a()- Decodes operands of the type seg:offset * ----------------------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲3atv精品一区二区三区| 亚洲乱码中文字幕综合| 欧美日韩一区二区三区在线| 高清视频一区二区| 国产麻豆精品95视频| 韩国毛片一区二区三区| 美国三级日本三级久久99| 久久激情五月激情| 麻豆精品蜜桃视频网站| 久久99在线观看| 韩国精品在线观看| 国产**成人网毛片九色 | 欧美无乱码久久久免费午夜一区 | 欧美人伦禁忌dvd放荡欲情| 欧美日韩一区三区四区| 欧美性大战久久| 91精品国产综合久久久久久久| 欧美男男青年gay1069videost | 久久女同精品一区二区| 2014亚洲片线观看视频免费| 久久精品视频在线看| 国产精品婷婷午夜在线观看| 亚洲黄色小视频| 日韩中文字幕区一区有砖一区 | 制服丝袜亚洲播放| 久久这里都是精品| 国产精品传媒在线| 亚洲国产cao| 国产精品一二一区| 色哟哟一区二区在线观看 | 久久人人爽人人爽| 综合激情网...| 免费看黄色91| gogogo免费视频观看亚洲一| 欧美人伦禁忌dvd放荡欲情| 精品国产sm最大网站免费看| 亚洲天堂久久久久久久| 精品一区二区三区免费视频| 成人免费视频app| 欧美日本国产视频| 国产欧美一区二区精品忘忧草| 亚洲一区欧美一区| 国产东北露脸精品视频| 欧美视频完全免费看| 久久久久久一二三区| 亚洲六月丁香色婷婷综合久久| 美腿丝袜一区二区三区| av电影在线观看一区| 欧美va天堂va视频va在线| 亚洲欧洲三级电影| 国产伦精一区二区三区| 欧美精品久久久久久久多人混战| 国产精品天干天干在观线| 日本不卡中文字幕| 欧美中文字幕不卡| 国产精品国产a| 看电影不卡的网站| 欧美三级三级三级爽爽爽| 中文字幕一区免费在线观看| 老司机午夜精品99久久| 精品视频在线免费看| 中文字幕一区二区视频| 国产一区不卡视频| 精品国产一区久久| 麻豆国产欧美日韩综合精品二区| 欧美唯美清纯偷拍| 亚洲最新在线观看| 日本精品一区二区三区高清| 国产精品久久久久久久久免费桃花| 国内欧美视频一区二区 | 成人综合婷婷国产精品久久| 欧美精品一区二区三区四区| 麻豆精品在线播放| 日韩一区二区在线观看| 日韩不卡一二三区| 欧美一区二区三区视频在线| 午夜精品福利在线| 91麻豆精品国产自产在线观看一区| 一区二区三区精品视频在线| 在线一区二区观看| 亚洲综合一区在线| 欧美日韩免费观看一区三区| 亚洲一区二区三区免费视频| 色噜噜久久综合| 亚洲福利视频导航| 欧美一卡二卡三卡| 麻豆精品一二三| 久久无码av三级| 成人一区二区三区视频在线观看| 中文av一区二区| 色综合激情久久| 日韩电影在线看| 欧美成人a∨高清免费观看| 美女国产一区二区三区| 国产亚洲精品超碰| 色一情一乱一乱一91av| 亚洲午夜久久久久久久久久久| 欧美性大战久久| 老司机精品视频导航| 国产欧美精品区一区二区三区| 成人app在线| 亚洲成人黄色小说| 久久久久久久久久久久久夜| 91免费看`日韩一区二区| 午夜不卡在线视频| 久久久蜜桃精品| 91免费视频网址| 裸体一区二区三区| 日韩一区在线播放| 91麻豆精品国产91久久久使用方法 | 久久99国产精品久久| 国产午夜精品一区二区三区四区| 99久久久免费精品国产一区二区| 亚洲第一狼人社区| 久久久久99精品国产片| 欧美一a一片一级一片| 捆绑紧缚一区二区三区视频| 成人欧美一区二区三区| 欧美一区二区三区爱爱| 99精品黄色片免费大全| 蓝色福利精品导航| 亚洲一区在线观看视频| 国产午夜亚洲精品不卡| 91精品欧美久久久久久动漫| 成人aaaa免费全部观看| 久久狠狠亚洲综合| 一个色妞综合视频在线观看| 久久―日本道色综合久久| 欧美日韩在线精品一区二区三区激情| 国产在线视频不卡二| 亚洲一区二区影院| 国产精品丝袜91| 欧美精品一区二区三区很污很色的 | 九九**精品视频免费播放| 一区二区成人在线| 国产精品伦一区| 2023国产一二三区日本精品2022| 欧美区在线观看| 色久综合一二码| 99精品欧美一区二区三区综合在线| 久久精品国产免费看久久精品| 亚洲五码中文字幕| 亚洲欧洲精品一区二区三区| 久久综合久久综合久久综合| 日韩欧美一级二级三级久久久| 欧美色涩在线第一页| 色狠狠色狠狠综合| 色综合天天综合网国产成人综合天| 懂色av一区二区三区蜜臀 | 亚洲色图一区二区三区| 国产欧美日本一区二区三区| 久久久精品一品道一区| 久久综合丝袜日本网| 精品日韩在线观看| 亚洲精品在线观看视频| 欧美tk—视频vk| 久久综合久久鬼色中文字| 精品裸体舞一区二区三区| 精品精品欲导航| 精品成人一区二区| 日本一区二区在线不卡| 国产精品三级久久久久三级| 成人免费一区二区三区视频 | 日韩极品在线观看| 蜜桃精品在线观看| 狠狠色综合日日| 国产精品123| 91在线精品一区二区| 欧美在线一二三| 91麻豆精品国产91久久久久久| 精品日韩99亚洲| 中文字幕精品在线不卡| 亚洲男帅同性gay1069| 亚洲成a人片综合在线| 青青草国产精品97视觉盛宴| 狠狠色丁香婷综合久久| 成人一级片在线观看| 欧美主播一区二区三区| 日韩欧美在线影院| 国产精品免费视频网站| 亚洲一区二区偷拍精品| 免费精品视频在线| 成人晚上爱看视频| 日韩女优毛片在线| 久久久久久久网| 亚洲午夜免费福利视频| 激情图片小说一区| 色天使久久综合网天天| 欧美一级日韩一级| 综合久久久久久| 美女视频免费一区| 色综合久久天天综合网| 日韩欧美亚洲国产精品字幕久久久| 国产亚洲欧洲997久久综合| 亚洲主播在线观看| 国产一区二区三区日韩| 欧美日韩国产三级| 国产精品国产三级国产普通话99| 日韩电影在线一区二区三区| 成人国产免费视频|