Метод "Hello World" требует только 2 инструкции (и это довольно интуитивно понятно)

периментирую с разбором IL для создания метода. Я получил код IL метода в строке [], где каждая строка является инструкцией IL. Я перебираю этот массив и добавляю коды операций с помощью ILGenerator:

        foreach (string ins in instructions) //string representations of IL          
        {
            string opCode = ins.Split(':').ElementAt(1);

            // other conditions omitted

            if (opCode.Contains("br.s"))
            {
                Label targetInstruction = ilGenerator.DefineLabel();

                ilGenerator.MarkLabel(targetInstruction);

                ilGenerator.Emit(OpCodes.Br_S, targetInstruction); 
            }

Вот IL, который мне нужно воспроизвести:

Source IL:
IL_0000: nop
IL_0001: ldstr "Hello, World!"
IL_0006: stloc.0
IL_0007: br.s IL_0009
IL_0009: ldloc.0
IL_000a: ret

И вот что я получаю в качестве вывода:

Target IL:
IL_0000: nop
IL_0001: ldstr "Hello, World!"
IL_0006: stloc.0
IL_0007: br.s IL_0007   // this is wrong -- needs to point to IL_0009
IL_0009: ldloc.0
IL_000a: ret

Как видите, вызов br.s указывает на себя, что, конечно, вызывает бесконечный цикл. Как я могу получить указание на следующую инструкцию, как в источнике? Это связано с использованием Reflection.Emit.Label, но я не уверен, как это работает.

РЕДАКТИРОВАТЬ Кстати, ИЛ, показанный выше, для этого простого метода,

    public string HelloWorld()
    {
            return "Hello, World!";
    }

Ответы на вопрос(3)

Ваш ответ на вопрос