コード例 #1
0
ファイル: Program.cs プロジェクト: emnh/inspector-vs
        static void Main()
        {
            // Process process = DebugProcessUtils.GetFirstProcessByName(Specifics.ProcessName);

            var c = Assembler.CreateContext <Action>();

            //c.Sub(c.Rcx, 1);
            c.Jae(0);
            c.Call((uint)0x100);
            c.Jmp(c.Sp);
            c.Jmp(c.Rax);
            c.Jmp(Memory.QWord(c.Rax));
            c.Fadd(c.Fp0, c.Fp1);
            c.Mov(c.Rax, (Immediate)0x0102030405060708);
            c.Mov(c.Rax, 0x0102030405060708);
            c.Mov(c.Rax, (ulong)0x0102030405060708);
            c.Call(Memory.QWord(CodeContext.Rip, 10));
            //c.Call((Immediate) 0);
            //c.Nop();
            var length = AssemblyUtil.GetAsmJitBytes(c).Length;

            Console.WriteLine($"length: 0x{length:X}");
            //c.Call(0x0102030405060708);
            //c.Call(new IntPtr(0x0102030405060708));
            //c.Compile();
            byte[] bs = AssemblyUtil.GetAsmJitBytes(c);

            //bs = new byte[] { 0xEB, 0xFF - 0xA };
            bs = new byte[] { 0x66, 0xFF, 0xE4 };
            Console.WriteLine($"bytes: {AssemblyUtil.BytesToHex(bs)}");

            var asms = AssemblyUtil.DisassembleMany(bs, 100);

            foreach (var asm in asms)
            {
                Console.WriteLine($"asm: {asm}, bytes: {AssemblyUtil.BytesToHex(asm.Bytes)}");
                if (asm.Operands.Length > 0)
                {
                    Console.WriteLine($"asm: {asm} operand size: {asm.Operands[0].Size}");
                }
                //var asm2 = AssemblyUtil.ReassembleNasm64(asm);
                //Console.WriteLine($"asm: {asm}, asm2: {asm2}");
                // PrintAsmDetails(asm);
            }

            // TestFormatContext(process);

            // TestDisassemble();

            // TestResolve(process);

            //var instr = dr2.Instructions.First();
            //instr.Operands

            // HexStartAddr();
            // DumpModuleSizes(process);

            // var ir = new ImportResolver(process);
            // ir.DumpDebug();

            // SizeOfDebugStuff();

            // testMain();

            Console.WriteLine("done");
            Console.ReadKey();
        }