X86IL: X86 Instruction Length Analysis

需积分: 16 19 下载量 133 浏览量 更新于2024-10-16 收藏 21KB TXT 举报
"X86IL.H 是一个与X86和X86-64指令集相关的头文件,主要用于分析和处理X86指令的长度和格式。它包含了一个名为 `X86IL` 的函数,该函数用于解析不同位宽(16位、32位、64位)的X86指令,并且支持AMD64架构的部分前缀。文件中还记录了多次更新的历史,修复了一些已知问题并增加了新功能。" 在X86IL.H中,核心是`X86IL` 函数,它接受以下几个参数: 1. `int Bits`:表示代码的位宽,可以是+16(16位)、0(32位)或负数(64位)。 2. `const unsigned char *pOriI`:指向原始指令的指针,即待分析的指令序列。 3. `unsigned char *pAnaI`:用于存储分析后指令的缓冲区,分析后的指令将被复制到这里。缓冲区大小至少需要26个字节。 4. `int *pnPfx`:指向一个变量,用于存储指令前缀的数量。 5. `int *pModRM`:如果存在,`pAnaI + *pModRM` 指向 ModRM 字节,否则 *pModRM = 0。 6. `int *pISize`:指向一个变量,用于存储立即数或偏移量的大小。 `X86IL`函数的主要任务是分析X86指令结构,包括识别和处理前缀、ModRM字节以及立即数的大小。值得注意的是,对于某些特定指令(如0F20-26),CPU会忽略Mod字段,因此在这些情况下,`*pModRM=0`且`*pISize=1`。 文件中的更新历史记录了以下改进: - 2006年1月5日:修正了0FA5和0FAD指令的问题,感谢Villi的反馈。 - 2006年1月4日:修复了A0-3, B8-F, 0F20-6的参数问题,以及16位地址模式到Bits的转换。 - 2005年5月21日:添加了对基本AMD64架构的支持,仅限前缀部分。 - 2005年4月8日:引入了`pModRM`参数,增强了功能。 这个头文件对于理解X86指令集的解析过程,特别是在进行反汇编或代码分析时非常有用。通过使用`X86IL`函数,开发者可以获取关于X86指令的各种关键信息,如前缀数量、操作模式、ModRM字段以及立即数的大小,这对于编写兼容性良好的处理器模拟器或静态分析工具至关重要。

checking whether the compiler supports GNU C++... yes checking whether g++ accepts -g... yes checking for g++ option to enable C++11 features... none needed checking dependency style of g++... gcc3 checking how to run the C preprocessor... gcc -std=gnu11 -E checking for x86_64-w64-mingw32-ranlib... no checking for ranlib... ranlib checking for x86_64-w64-mingw32-dlltool... no checking for dlltool... no checking for x86_64-w64-mingw32-ar... no checking for x86_64-w64-mingw32-lib... no checking for x86_64-w64-mingw32-link... no checking for ar... ar checking the archiver (ar) interface... ar checking dependency style of gcc -std=gnu11... gcc3 checking for x86_64-w64-mingw32-as... no checking for as... as checking whether dlltool supports --temp-prefix... yes checking whether to build a w32api package for Cygwin... no checking whether to build the Win32 libraries... yes checking whether to build the Win64 libraries... yes checking whether to build the WinARM32 libraries... no checking whether to build the WinARM64 libraries... no checking whether to use genlib... no checking whether to enable globbing... no checking whether to enable private exports... no checking whether to enable delay import libs... no checking what to provide as libmsvcrt.a... msvcrt-os checking whether to include support for Control Flow Guard... no checking whether to enable experimental features... no checking whether the compiler supports -municode... no checking for stdio.h... yes checking for stdlib.h... yes checking for string.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for strings.h... yes checking for sys/stat.h... yes checking for sys/types.h... yes checking for unistd.h... yes checking for _mingw_mac.h... no

2023-06-10 上传