Beispiel #1
0
        private (Address, UserIndirectJump) LoadIndirectJump_v4(IndirectJump_v4 indirJump, Program program)
        {
            if (!platform !.TryParseAddress(indirJump.InstructionAddress, out Address addrInstr))
            {
                return(null, null);
            }
            if (!platform.TryParseAddress(indirJump.TableAddress, out Address addrTable))
            {
                return(null, null);
            }
            if (!program.User.JumpTables.TryGetValue(addrTable, out var table))
            {
                return(null, null);
            }
            var reg = program.Architecture.GetRegister(indirJump.IndexRegister);

            if (reg == null)
            {
                return(null, null);
            }
            return(addrInstr, new UserIndirectJump
            {
                Address = addrInstr,
                Table = table,
                IndexRegister = reg,
            });
        }
Beispiel #2
0
        private Tuple <Address, UserIndirectJump> LoadIndirectJump_v4(IndirectJump_v4 indirJump, Program program)
        {
            Address addrInstr;

            if (!platform.TryParseAddress(indirJump.InstructionAddress, out addrInstr))
            {
                return(null);
            }
            Address addrTable;

            if (!platform.TryParseAddress(indirJump.TableAddress, out addrTable))
            {
                return(null);
            }
            ImageMapVectorTable table;

            if (!program.User.JumpTables.TryGetValue(addrTable, out table))
            {
                return(null);
            }
            var reg = program.Architecture.GetRegister(indirJump.IndexRegister);

            if (reg == null)
            {
                return(null);
            }
            return(Tuple.Create(addrInstr, new UserIndirectJump
            {
                Address = addrInstr,
                Table = table,
                IndexRegister = reg,
            }));
        }