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

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

?? x86bc.c

?? 支持AMD64的匯編編譯器源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * x86 bytecode utility functions * *  Copyright (C) 2001  Peter Johnson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. 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. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER 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 AUTHOR OR OTHER 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. */#include <util.h>/*@unused@*/ RCSID("$Id: x86bc.c 1168 2004-10-31 01:07:52Z peter $");#define YASM_LIB_INTERNAL#define YASM_BC_INTERNAL#define YASM_EXPR_INTERNAL#include <libyasm.h>#include "x86arch.h"/* Effective address type */typedef struct x86_effaddr {    yasm_effaddr ea;		/* base structure */    /* PC-relative portions are for AMD64 only (RIP addressing) */    /*@null@*/ /*@dependent@*/ yasm_symrec *origin;    /* pcrel origin */    unsigned char segment;	/* segment override, 0 if none */    /* How the spare (register) bits in Mod/RM are handled:     * Even if valid_modrm=0, the spare bits are still valid (don't overwrite!)     * They're set in bytecode_create_insn().     */    unsigned char modrm;    unsigned char valid_modrm;	/* 1 if Mod/RM byte currently valid, 0 if not */    unsigned char need_modrm;	/* 1 if Mod/RM byte needed, 0 if not */    unsigned char sib;    unsigned char valid_sib;	/* 1 if SIB byte currently valid, 0 if not */    unsigned char need_sib;	/* 1 if SIB byte needed, 0 if not,				   0xff if unknown */    unsigned char pcrel;	/* 1 if PC-relative transformation needed */} x86_effaddr;/* Bytecode types */typedef struct x86_insn {    yasm_bytecode bc;		/* base structure */    /*@null@*/ x86_effaddr *ea;	/* effective address */    /*@null@*/ yasm_immval *imm;/* immediate or relative value */    unsigned char opcode[3];	/* opcode */    unsigned char opcode_len;    unsigned char addrsize;	/* 0 or =mode_bits => no override */    unsigned char opersize;	/* 0 or =mode_bits => no override */    unsigned char lockrep_pre;	/* 0 indicates no prefix */    unsigned char def_opersize_64;  /* default operand size in 64-bit mode */    unsigned char special_prefix;   /* "special" prefix (0=none) */    unsigned char rex;		/* REX AMD64 extension, 0 if none,				   0xff if not allowed (high 8 bit reg used) */    /* HACK, but a space-saving one: shift opcodes have an immediate     * form and a ,1 form (with no immediate).  In the parser, we     * set this and opcode_len=1, but store the ,1 version in the     * second byte of the opcode array.  We then choose between the     * two versions once we know the actual value of imm (because we     * don't know it in the parser module).     *     * A override to force the imm version should just leave this at     * 0.  Then later code won't know the ,1 version even exists.     * TODO: Figure out how this affects CPU flags processing.     *     * Call x86_SetInsnShiftFlag() to set this flag to 1.     */    unsigned char shift_op;    /* HACK, similar to that for shift_op above, for optimizing instructions     * that take a sign-extended imm8 as well as imm values (eg, the arith     * instructions and a subset of the imul instructions).     */    unsigned char signext_imm8_op;    /* HACK, similar to those above, for optimizing long (modrm+sib) mov     * instructions in amd64 into short mov instructions if a 32-bit address     * override is applied in 64-bit mode to an EA of just an offset (no     * registers) and the target register is al/ax/eax/rax.     */    unsigned char shortmov_op;    unsigned char mode_bits;} x86_insn;typedef struct x86_jmp {    yasm_bytecode bc;		/* base structure */    yasm_expr *target;		/* target location */    /*@dependent@*/ yasm_symrec *origin;    /* jump origin */    struct {	unsigned char opcode[3];	unsigned char opcode_len;   /* 0 = no opc for this version */    } shortop, nearop, farop;    /* which opcode are we using? */    /* The *FORCED forms are specified in the source as such */    x86_jmp_opcode_sel op_sel;    unsigned char addrsize;	/* 0 or =mode_bits => no override */    unsigned char opersize;	/* 0 indicates no override */    unsigned char lockrep_pre;	/* 0 indicates no prefix */    unsigned char mode_bits;} x86_jmp;/* Effective address callback function prototypes */static void x86_ea_destroy(yasm_effaddr *ea);static void x86_ea_print(const yasm_effaddr *ea, FILE *f, int indent_level);/* Bytecode callback function prototypes */static void x86_bc_insn_destroy(yasm_bytecode *bc);static void x86_bc_insn_print(const yasm_bytecode *bc, FILE *f,			      int indent_level);static yasm_bc_resolve_flags x86_bc_insn_resolve    (yasm_bytecode *bc, int save, yasm_calc_bc_dist_func calc_bc_dist);static int x86_bc_insn_tobytes(yasm_bytecode *bc, unsigned char **bufp,			       void *d, yasm_output_expr_func output_expr,			       /*@null@*/ yasm_output_reloc_func output_reloc);static void x86_bc_jmp_destroy(yasm_bytecode *bc);static void x86_bc_jmp_print(const yasm_bytecode *bc, FILE *f,			     int indent_level);static yasm_bc_resolve_flags x86_bc_jmp_resolve    (yasm_bytecode *bc, int save, yasm_calc_bc_dist_func calc_bc_dist);static int x86_bc_jmp_tobytes(yasm_bytecode *bc, unsigned char **bufp,			      void *d, yasm_output_expr_func output_expr,			      /*@null@*/ yasm_output_reloc_func output_reloc);/* Effective address callback structures */static const yasm_effaddr_callback x86_ea_callback = {    x86_ea_destroy,    x86_ea_print};/* Bytecode callback structures */static const yasm_bytecode_callback x86_bc_callback_insn = {    x86_bc_insn_destroy,    x86_bc_insn_print,    x86_bc_insn_resolve,    x86_bc_insn_tobytes};static const yasm_bytecode_callback x86_bc_callback_jmp = {    x86_bc_jmp_destroy,    x86_bc_jmp_print,    x86_bc_jmp_resolve,    x86_bc_jmp_tobytes};intyasm_x86__set_rex_from_reg(unsigned char *rex, unsigned char *low3,			   unsigned long reg, unsigned int bits,			   x86_rex_bit_pos rexbit){    *low3 = (unsigned char)(reg&7);    if (bits == 64) {	x86_expritem_reg_size size = (x86_expritem_reg_size)(reg & ~0xFUL);	if (size == X86_REG8X || (reg & 0xF) >= 8) {	    if (*rex == 0xff)		return 1;	    *rex |= 0x40 | (((reg & 8) >> 3) << rexbit);	} else if (size == X86_REG8 && (reg & 7) >= 4) {	    /* AH/BH/CH/DH, so no REX allowed */	    if (*rex != 0 && *rex != 0xff)		return 1;	    *rex = 0xff;	}    }    return 0;}/*@-compmempass -mustfree@*/yasm_bytecode *yasm_x86__bc_create_insn(yasm_arch *arch, x86_new_insn_data *d){    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch;    x86_insn *insn;       insn = (x86_insn *)yasm_bc_create_common(&x86_bc_callback_insn,					     sizeof(x86_insn), d->line);    insn->ea = (x86_effaddr *)d->ea;    if (d->ea) {	insn->ea->origin = d->ea_origin;	insn->ea->modrm &= 0xC7;	/* zero spare/reg bits */	insn->ea->modrm |= (d->spare << 3) & 0x38;  /* plug in provided bits */    }    if (d->imm) {	insn->imm = yasm_imm_create_expr(d->imm);	insn->imm->len = d->im_len;	insn->imm->sign = d->im_sign;    } else	insn->imm = NULL;    insn->opcode[0] = d->op[0];    insn->opcode[1] = d->op[1];    insn->opcode[2] = d->op[2];    insn->opcode_len = d->op_len;    insn->addrsize = 0;    insn->opersize = d->opersize;    insn->def_opersize_64 = d->def_opersize_64;    insn->special_prefix = d->special_prefix;    insn->lockrep_pre = 0;    insn->rex = d->rex;    insn->shift_op = d->shift_op;    insn->signext_imm8_op = d->signext_imm8_op;    insn->shortmov_op = d->shortmov_op;    insn->mode_bits = arch_x86->mode_bits;    return (yasm_bytecode *)insn;}/*@=compmempass =mustfree@*//*@-compmempass -mustfree@*/yasm_bytecode *yasm_x86__bc_create_jmp(yasm_arch *arch, x86_new_jmp_data *d){    yasm_arch_x86 *arch_x86 = (yasm_arch_x86 *)arch;    x86_jmp *jmp;    jmp = (x86_jmp *) yasm_bc_create_common(&x86_bc_callback_jmp,					    sizeof(x86_jmp), d->line);    jmp->target = d->target;    jmp->origin = d->origin;    jmp->op_sel = d->op_sel;    if ((d->op_sel == JMP_SHORT_FORCED) && (d->near_op_len == 0))	yasm__error(d->line,		    N_("no SHORT form of that jump instruction exists"));    if ((d->op_sel == JMP_NEAR_FORCED) && (d->short_op_len == 0))	yasm__error(d->line,		    N_("no NEAR form of that jump instruction exists"));    jmp->shortop.opcode[0] = d->short_op[0];    jmp->shortop.opcode[1] = d->short_op[1];    jmp->shortop.opcode[2] = d->short_op[2];    jmp->shortop.opcode_len = d->short_op_len;    jmp->nearop.opcode[0] = d->near_op[0];    jmp->nearop.opcode[1] = d->near_op[1];    jmp->nearop.opcode[2] = d->near_op[2];    jmp->nearop.opcode_len = d->near_op_len;    jmp->farop.opcode[0] = d->far_op[0];    jmp->farop.opcode[1] = d->far_op[1];    jmp->farop.opcode[2] = d->far_op[2];    jmp->farop.opcode_len = d->far_op_len;    jmp->addrsize = d->addrsize;    jmp->opersize = d->opersize;    jmp->lockrep_pre = 0;    jmp->mode_bits = arch_x86->mode_bits;    return (yasm_bytecode *)jmp;}/*@=compmempass =mustfree@*/voidyasm_x86__ea_set_segment(yasm_effaddr *ea, unsigned int segment,			 unsigned long line){    x86_effaddr *x86_ea = (x86_effaddr *)ea;    if (!ea)	return;    if (segment != 0 && x86_ea->segment != 0)	yasm__warning(YASM_WARN_GENERAL, line,		      N_("multiple segment overrides, using leftmost"));    x86_ea->segment = (unsigned char)segment;}voidyasm_x86__ea_set_disponly(yasm_effaddr *ea){    x86_effaddr *x86_ea = (x86_effaddr *)ea;    x86_ea->valid_modrm = 0;    x86_ea->need_modrm = 0;    x86_ea->valid_sib = 0;    x86_ea->need_sib = 0;    x86_ea->pcrel = 0;}yasm_effaddr *yasm_x86__ea_create_reg(unsigned long reg, unsigned char *rex,			unsigned int bits){    x86_effaddr *x86_ea;    unsigned char rm;    if (yasm_x86__set_rex_from_reg(rex, &rm, reg, bits, X86_REX_B))	return NULL;    x86_ea = yasm_xmalloc(sizeof(x86_effaddr));    x86_ea->ea.callback = &x86_ea_callback;    x86_ea->ea.disp = (yasm_expr *)NULL;    x86_ea->ea.len = 0;    x86_ea->ea.nosplit = 0;    x86_ea->segment = 0;    x86_ea->modrm = 0xC0 | rm;	/* Mod=11, R/M=Reg, Reg=0 */    x86_ea->valid_modrm = 1;    x86_ea->need_modrm = 1;    x86_ea->sib = 0;    x86_ea->valid_sib = 0;    x86_ea->need_sib = 0;    x86_ea->pcrel = 0;    return (yasm_effaddr *)x86_ea;}yasm_effaddr *yasm_x86__ea_create_expr(yasm_arch *arch, yasm_expr *e){    x86_effaddr *x86_ea;    x86_ea = yasm_xmalloc(sizeof(x86_effaddr));    x86_ea->ea.callback = &x86_ea_callback;    x86_ea->ea.disp = e;    x86_ea->ea.len = 0;    x86_ea->ea.nosplit = 0;    x86_ea->segment = 0;    x86_ea->modrm = 0;    x86_ea->valid_modrm = 0;    x86_ea->need_modrm = 1;    x86_ea->sib = 0;    x86_ea->valid_sib = 0;    /* We won't know whether we need an SIB until we know more about expr and     * the BITS/address override setting.     */    x86_ea->need_sib = 0xff;    x86_ea->pcrel = 0;    return (yasm_effaddr *)x86_ea;}/*@-compmempass@*/yasm_effaddr *yasm_x86__ea_create_imm(yasm_expr *imm, unsigned int im_len){    x86_effaddr *x86_ea;    x86_ea = yasm_xmalloc(sizeof(x86_effaddr));    x86_ea->ea.callback = &x86_ea_callback;    x86_ea->ea.disp = imm;    x86_ea->ea.len = (unsigned char)im_len;    x86_ea->ea.nosplit = 0;    x86_ea->segment = 0;    x86_ea->modrm = 0;    x86_ea->valid_modrm = 0;    x86_ea->need_modrm = 0;    x86_ea->sib = 0;    x86_ea->valid_sib = 0;    x86_ea->need_sib = 0;    x86_ea->pcrel = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美videos中文字幕| 国产一区二区视频在线| 日韩av电影免费观看高清完整版| 免费成人结看片| 91麻豆国产香蕉久久精品| 3d成人动漫网站| 亚洲视频在线一区二区| 狠狠色丁香久久婷婷综合丁香| 在线日韩一区二区| 中文字幕一区二区三区在线观看| 日本强好片久久久久久aaa| 色噜噜久久综合| 国产精品久久久久久久久免费丝袜 | 亚洲福利一区二区三区| 成人精品视频一区| 久久亚洲一级片| 轻轻草成人在线| 欧美日韩一卡二卡三卡| 一区二区在线看| 国产高清一区日本| 日韩一区二区麻豆国产| 亚洲小说欧美激情另类| 91社区在线播放| 中文字幕亚洲成人| 不卡视频一二三四| 亚洲国产高清在线| 国产91在线观看| 国产午夜亚洲精品羞羞网站| 国产一区在线精品| 久久久蜜桃精品| 国产91清纯白嫩初高中在线观看| 久久婷婷综合激情| 国产成人亚洲精品青草天美| 国产欧美中文在线| 成人禁用看黄a在线| 国产精品美女久久久久久2018 | 日日夜夜免费精品| 欧美高清dvd| 蜜臀av一区二区三区| 日韩视频中午一区| 久久69国产一区二区蜜臀| 精品国产乱码久久久久久久| 激情五月婷婷综合网| 亚洲精品在线免费观看视频| 国产福利一区二区三区视频在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲成人av电影| 欧美日韩激情一区| 麻豆国产欧美日韩综合精品二区| 日韩一区二区三区精品视频| 精品亚洲成av人在线观看| 国产视频亚洲色图| 91麻豆swag| 亚洲国产精品一区二区www| 91精品福利在线一区二区三区| 久久国产精品露脸对白| 中文在线一区二区 | 欧美tk丨vk视频| 高清av一区二区| 亚洲黄色免费网站| 日韩欧美综合在线| 91在线porny国产在线看| 亚洲成人精品一区| 26uuu色噜噜精品一区二区| 丁香六月综合激情| 亚洲高清在线精品| 久久品道一品道久久精品| 色婷婷香蕉在线一区二区| 免费看欧美女人艹b| 国产精品你懂的| 欧美一区三区二区| zzijzzij亚洲日本少妇熟睡| 首页欧美精品中文字幕| 国产精品视频一二三| 日韩欧美一级二级三级| aaa亚洲精品| 精品一区二区三区久久| 亚洲精品国产第一综合99久久| 日韩欧美一区二区视频| av高清不卡在线| 精品亚洲aⅴ乱码一区二区三区| 国产精品大尺度| 欧美大片在线观看一区| 91亚洲精品久久久蜜桃网站 | 精品久久久久久无| 欧美性做爰猛烈叫床潮| 成人综合婷婷国产精品久久蜜臀| 日日夜夜精品免费视频| 中文字幕五月欧美| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久激情综合网| 亚洲在线一区二区三区| 国产精品天干天干在线综合| 日韩欧美123| 这里是久久伊人| 欧美日韩免费一区二区三区视频| www.日韩av| 成人激情免费网站| 国产成人综合精品三级| 老色鬼精品视频在线观看播放| 欧美大度的电影原声| 91精品国产入口| 成人av电影在线网| 色噜噜夜夜夜综合网| 国产成人日日夜夜| 中文字幕av一区二区三区高| 久久国产精品露脸对白| 日韩一二三区不卡| 亚洲一区二区三区激情| 欧美一区二区人人喊爽| 亚洲与欧洲av电影| 91精品国产综合久久福利| 懂色av一区二区三区免费看| 亚洲国产人成综合网站| 国产日本欧美一区二区| 欧美一区二区国产| av网站一区二区三区| 欧美视频日韩视频在线观看| 一本高清dvd不卡在线观看| 91福利国产精品| 久久网站最新地址| 日韩制服丝袜先锋影音| 日韩一区日韩二区| 亚洲国产成人一区二区三区| 一区二区三区四区国产精品| 日本不卡视频在线| 91亚洲男人天堂| 日本韩国精品一区二区在线观看| 欧美一区二区私人影院日本| 国产精品视频一二| 国产乱人伦偷精品视频免下载| 日本91福利区| 成年人国产精品| 4438x成人网最大色成网站| 亚洲一区二区欧美| 国产美女精品一区二区三区| www.亚洲色图.com| 欧美一区永久视频免费观看| 国产精品福利一区| 成人性生交大片免费看中文| 成人夜色视频网站在线观看| 久久综合色婷婷| 蜜臀av一区二区三区| 国产欧美日韩激情| 国产一区二区影院| 欧美日韩一区二区三区在线| 有坂深雪av一区二区精品| 欧美电影影音先锋| 久久草av在线| 91福利国产精品| 亚洲欧美日韩国产手机在线| 成人av在线电影| 亚洲欧美视频一区| 国产日韩欧美一区二区三区综合| 欧美视频一区二区三区四区| 制服丝袜国产精品| 亚洲一级不卡视频| 色综合一区二区三区| 日韩一区中文字幕| 成人aaaa免费全部观看| 国产校园另类小说区| 国产专区综合网| 精品成人在线观看| 激情综合色播激情啊| 精品1区2区在线观看| 国产乱码字幕精品高清av | 天天av天天翘天天综合网| 在线免费亚洲电影| 亚洲一区二区偷拍精品| 欧美性受xxxx| 婷婷中文字幕综合| 91精品国产综合久久蜜臀| 五月激情综合色| 欧美丰满少妇xxxxx高潮对白 | 欧美日韩一级片在线观看| 一区二区激情小说| 欧美亚一区二区| 日韩国产一二三区| 精品久久久久99| 国产成人亚洲综合a∨婷婷| 中文字幕二三区不卡| 色婷婷激情综合| 舔着乳尖日韩一区| 欧美成人性战久久| 国产精品一二三区| 136国产福利精品导航| 欧美色网一区二区| 美女看a上一区| 中文字幕欧美日韩一区| 色婷婷av一区二区三区软件| 天天色图综合网| 久久综合给合久久狠狠狠97色69| 丰满少妇久久久久久久| 亚洲女性喷水在线观看一区| 欧美精品视频www在线观看| 久久99国产乱子伦精品免费| 国产女人水真多18毛片18精品视频 | 91美女片黄在线观看91美女| 亚洲成人激情社区| 久久一二三国产|