use*_*016 51
只是CTRL+F,你已经完成了!请务必阅读正确的行,C8例如可能出现在多个位置.
ili*_*ode 19
这是一个非常好的视觉.不详细说明,但如果你只是需要快速查找十六进制值,那么应该这样做 -
资料来源:http://pnx.tf/files/x86_opcode_structure_and_instruction_overview.png
还有asmjit/asmdb项目,它以类似 JSON 的格式提供公共域X86/X64 数据库(它实际上是一个节点模块,只需从节点 require() 或包含在浏览器中)。它是为额外的处理而设计的(例如编写验证器、汇编器、反汇编器),但也很容易打开数据库文件并对其进行探索。
AsmDB 附带一个名为 x86util.js 的工具,它可以将 x86 数据库索引为更友好的表示形式,可用于实际使用它做一些事情。让我们在 node.js 中编写一个简单的工具来打印所有与您提供的操作码字节相同的指令:
const asmdb = require("asmdb");
const x86isa = new asmdb.x86.ISA();
function printByOpCode(opcode) {
x86isa.instructions.forEach(function(inst) {
if (inst.opcodeHex === opcode) {
const ops = inst.operands.map(function(op) { return op.data; });
console.log(`INSTRUCTION '${inst.name} ${ops.join(", ")}' -> '${inst.opcodeString}'`);
}
});
}
if (process.argv.length < 3)
console.log("USAGE: node x86search.js XX (opcode)")
else
printByOpCode(process.argv[2]);
Run Code Online (Sandbox Code Playgroud)
尝试一下:
$ node x86search.js A9
INSTRUCTION 'pop gs' -> '0F A9'
INSTRUCTION 'test ax, iw' -> '66 A9 iw'
INSTRUCTION 'test eax, id' -> 'A9 id'
INSTRUCTION 'test rax, id' -> 'REX.W A9 id'
INSTRUCTION 'vfmadd213sd xmm, xmm, xmm/m64' -> 'VEX.DDS.LIG.66.0F38.W1 A9 /r'
INSTRUCTION 'vfmadd213sd xmm, xmm, xmm/m64' -> 'EVEX.DDS.LIG.66.0F38.W1 A9 /r'
INSTRUCTION 'vfmadd213ss xmm, xmm, xmm/m32' -> 'VEX.DDS.LIG.66.0F38.W0 A9 /r'
INSTRUCTION 'vfmadd213ss xmm, xmm, xmm/m32' -> 'EVEX.DDS.LIG.66.0F38.W0 A9 /r'
$ node x86search.js FF
INSTRUCTION 'call r32/m32' -> 'FF /2'
INSTRUCTION 'call r64/m64' -> 'FF /2'
INSTRUCTION 'dec r16/m16' -> '66 FF /1'
INSTRUCTION 'dec r32/m32' -> 'FF /1'
INSTRUCTION 'dec r64/m64' -> 'REX.W FF /1'
INSTRUCTION 'fcos ' -> 'D9 FF'
INSTRUCTION 'inc r16/m16' -> '66 FF /0'
INSTRUCTION 'inc r32/m32' -> 'FF /0'
INSTRUCTION 'inc r64/m64' -> 'REX.W FF /0'
INSTRUCTION 'jmp r32/m32' -> 'FF /4'
INSTRUCTION 'jmp r64/m64' -> 'FF /4'
INSTRUCTION 'push r16/m16' -> '66 FF /6'
INSTRUCTION 'push r32/m32' -> 'FF /6'
INSTRUCTION 'push r64/m64' -> 'FF /6'
Run Code Online (Sandbox Code Playgroud)
此外,还有一些命令行工具可用于快速反汇编,但这些工具需要完整的指令(与只有操作码字节相反),这里有一些提示:
使用LLVM项目中的llvm-mc :
$ echo "0x0f 0x28 0x44 0xd8 0x10" | llvm-mc -disassemble -triple=x86_64 -output-asm-variant=1
.text
movaps xmm0, xmmword ptr [rax + 8*rbx + 16]
Run Code Online (Sandbox Code Playgroud)
使用nasm项目中的ndisasm :
$ echo -n -e '\x0f\x28\x44\xd8\x10' | ndisasm -b64 -
00000000 0F2844D810 movaps xmm0,oword [rax+rbx*8+0x10]
Run Code Online (Sandbox Code Playgroud)
还有一个AsmGrid项目与AsmDB来自同一作者。它是一个正在进行中的在线 AsmDB 资源管理器,它使用颜色来可视化每条指令的各种属性。
| 归档时间: |
|
| 查看次数: |
29042 次 |
| 最近记录: |