Utilizando Br_S OpCode para apuntar a la siguiente instrucción usando Reflection.Emit.Label

Estoy experimentando con el análisis de IL para emitir un método. Obtuve el código IL de un método en una cadena [] donde cada cadena es una instrucción IL. Estoy recorriendo esta matriz y agregando OpCodes usando un 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); 
            }

Aquí está la IL que necesito reproducir:

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

Y esto es lo que obtengo como salida:

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

omo puede ver, la llamada de br.s apunta a sí misma, lo que, por supuesto, causa un bucle infinito. ¿Cómo consigo que apunte a las siguientes instrucciones como en la fuente? Esto tiene que ver con el uso de Reflection.Emit.Label pero no estoy seguro de cómo funciona.

EDITA Por cierto, el IL visto anteriormente es para este método simple,

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta