¿Cuáles son los posibles códigos de operación para la última instrucción de un método?

En .net cuáles son los posibles OpCodes que pueden existir como última instrucción de un método.

De momento se que puede ser

Pero, ¿es posible que sean otros códigos de operación? Y si es así, ¿qué código (preferir c #) los produciría?

Por "Último" me refiero a "el código de operación final definido en el cuerpo del método"

preguntado el 28 de julio de 12 a las 05:07

Por "último", ¿se refiere al código de operación final definido en el cuerpo del método, o se refiere al último código de operación ejecutado? (un método no necesita salir desde abajo) -

@MarcGravell "el código de operación final definido en el cuerpo del método". aclarado en la pregunta -

Genial, entonces sospecho que se aplica el comentario que agregué a la publicación de Frederic:

1 Respuestas

If throw puede ser el último código de operación en un método, lo más probable es que jmp también califica.

Además, si consideramos un método recursivo cuya condición de salida no se encuentra al final, el último código de operación podría ser una call or tail.call en lugar de un ret.

Actualizar: Bueno, no, no lo hará. Como señala correctamente Marc Gravell en su comentario, la documentación para tail.call dice:

La pila debe estar vacía excepto por los argumentos que se transfieren mediante la siguiente llamada. La instrucción que sigue a la instrucción de llamada debe ser una ret.

Update 2: Códigos de operación de rama incondicionales como br y br.s también pueden ser las últimas instrucciones de un método, si su punto de salida se produce antes (gracias de nuevo, Marc).

Respondido 28 Jul 12, 08:07

"llamar" aún necesitaría un ret después, iirc; tail.call de la que estoy menos seguro (actualización: "La instrucción que sigue a la instrucción de llamada debe ser un ret", de la página de cola). Sin embargo, creo que "jmp" es válido. - marc gravell

Dos más para reemplazar los 2 que maté: rama incondicional: br y br.s (con el método saliendo más arriba) - dependiendo del significado de "último" (le preguntaré al OP) - marc gravell

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.