コード例 #1
0
ファイル: Scanner.cs プロジェクト: ghmole/reko
        /// <summary>
        /// Adds a new basic block to the procedure <paramref name="proc"/>.
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="proc"></param>
        /// <param name="blockName"></param>
        /// <returns></returns>
        public Block AddBlock(Address addr, Procedure proc, string blockName)
        {
            Block b = new Block(proc, addr, blockName);

            if (Program.User.BlockLabels.TryGetValue(blockName, out var userLabel))
            {
                b.UserLabel = userLabel;
            }
            if (!blocks.TryGetUpperBound(addr, out var br))
            {
                var lastMem = segmentMap.Segments.Values.Last().MemoryArea;
                blocks.Add(addr, new BlockRange(b, addr.ToLinear(), lastMem.BaseAddress.ToLinear() + (uint)lastMem.Length));
            }
            else
            {
                blocks.Add(addr, new BlockRange(b, addr.ToLinear(), br.Start));
            }
            blockStarts.Add(b, addr);
            proc.ControlGraph.Blocks.Add(b);

            imageMap.AddItem(addr, new ImageMapBlock(addr)
            {
                Block = b
            });
            return(b);
        }