郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

郁金香终身VIP管理员QQ150330575项目合作(有实力的+)视频教程+每月更新+QQ群
飞郁视频分享(每周更新)
查看: 1515|回复: 0

disAsm32 中的结构 及函数 Assemble

[复制链接]
发表于 2016-8-24 19:29:07 | 显示全部楼层 |阅读模式
//disAsm32.h
#ifndef MAINPROG
#define unique extern
#else
#define unique
#endif

#define TEXTLEN        256             // 文本字符串的最大长度 Maximal length of text string
#define MAXCMDSIZE     16              // 80x86单个指令最大长度 Maximal length of 80x86 command
//disasmmode:
#define DISASM_SIZE    0               // 仅确定命令大小 Determine command size only
#define DISASM_DATA    1               // 确定大小和分析数据 Determine size and analysis data
#define DISASM_FILE    3               // 汇编不解析符号 Disassembly, no symbols
#define DISASM_CODE    4               // 完整汇编 Full disassembly
static int       ideal;                // 强制理想解码模式 Force IDEAL decoding mode
static int       lowercase;            // 强制使用小写模式 Force lowercase display
static int       tabarguments;         // 参数间使用TAB空制 Tab between mnemonic and arguments
static int       extraspace;           // 参数间增加额外空格 Extra space between arguments
static int       putdefseg;            // 显示默认参数列表 Display default segments in listing
static int       showmemsize;          // 总是显示内存大小 Always show memory size
static int       shownear;             // 显示NEAR修饰符 Show NEAR modifiers
static int       shortstringcmds;      // 使用短格式的字符串命令 Use short form of string commands
static int       sizesens;             // 如何解码尺寸敏感的记忆 How to decode size-sensitive mnemonics
static int       symbolic;             // Show symbolic addresses in disasm
static int       farcalls;             // Accept far calls, returns & addresses
static int       decodevxd;            // Decode VxD calls (Win95/98)
static int       privileged;           // Accept privileged commands
static int       iocommand;            // Accept I/O commands
static int       badshift;             // Accept shift out of range 1..31
static int       extraprefix;          // Accept superfluous prefixes
static int       lockedbus;            // Accept LOCK prefixes
static int       stackalign;           // Accept unaligned stack operations
static int       iswindowsnt;          // When checking for dangers, assume NT

typedef struct t_disasm {              // Results of disassembling
  unsigned long          ip;           // Instrucion pointer
  char           dump[TEXTLEN];        // Hexadecimal dump of the command
  char    cmdstr[8];      // 返回的汇编指令字串 Disassembled command
  char           result[TEXTLEN];      // 不包括汇编指令的汇编代码
  unsigned char  bytes;       // 机器码指令的字节数
  char           comment[TEXTLEN];     // Brief comment
  int            cmdtype;              // One of C_xxx
  int            memtype;              // Type of addressed variable in memory
  int            nprefix;              // Number of prefixes
  int            indexed;              // Address contains register(s)
  unsigned long          jmpconst;             // Constant jump address
  unsigned long          jmptable;             // Possible address of switch table
  unsigned long          adrconst;             // Constant part of address
  unsigned long          immconst;             // Immediate constant
  int            zeroconst;            // Whether contains zero constant
  int            fixupoffset;          // Possible offset of 32-bit fixups
  int            fixupsize;            // Possible total size of fixups or 0
  int            error;                // Error while disassembling command
  int            warnings;             // Combination of DAW_xxx
  unsigned long  index;       // 当前数据缓冲区的索引直
  int       ideal;                // Force IDEAL decoding mode
  int       lowercase;            // Force lowercase display
  int       putdefseg;            // Display default segments in listing
  int       code_format;     // 反汇编代码格式.0-普通,1-在立即数后面加上'H',2-立即数为C格式
} t_disasm;
typedef struct t_asmmodel {            // Model to search for assembler command
  char           code[MAXCMDSIZE];     // 二进制指令代码 Binary code
  char           mask[MAXCMDSIZE];     // Mask for binary code (0: bit ignored)
  int            length;               // 机器指令所占字节数 Length of code, bytes (0: empty)
  int            jmpsize;              // 相对跳转偏移量 Offset size if relative jump
  int            jmpoffset;            // 偏移量 Offset relative to IP
  int            jmppos;               // 指令跳转偏移位置Position of jump offset in command
} t_asmmodel;
int    Assemble(
void *cmd, //待汇编成机器指令的 指令字串
unsigned long ip, //汇编指令EIP地址
t_asmmodel *model,//汇编模式
int attempt, //
    int constsize,//内容长度
char *errtext);//出错字串
//返回指定地址开始的 汇编 字串存放到
unsigned long Disasm(
void *src,//起始地址
unsigned long srcsize, //反汇编大小
unsigned long srcip, //反汇编起始地址
    t_disasm *disasm, //返回反汇编 结果的结构
int disasmmode); //反汇编模式
unsigned long Disasm32(
void *src, //起始地址
t_disasm *disasm,//返回汇编结构
unsigned long startaddr=0x401000, //汇编起始地址
int disasmmode=DISASM_CODE  //汇编模式 默认是4 完全汇编
);

郁金香外挂教程,学习中...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

限时限量优惠

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2019-12-13 08:58 , Processed in 0.052392 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表