2012-07-28 22 views
6

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

En el momento en que sabemos que puede ser

Pero es posible para que sea cualquier otro códigos de operación? Y si es así, ¿qué código (prefiero C#) los produciría?

Por "Última" quiero decir "el código de operación final definida en el cuerpo del método"

+2

Por "último", ¿se refiere al código de operación final definido en el cuerpo del método, o quiere decir que se ejecutó el último código de operación? (un método no necesita salir de la parte inferior) –

+0

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

+0

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

Respuesta

2

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

Además, si tenemos en cuenta un método recursivo cuya condición de salida no se encuentra en el extremo, el último código de operación podría ser un call o tail.call en lugar de un ret.

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

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

Actualización 2: códigos de operación de salto incondicional como br y br.s también pueden ser las últimas instrucciones de un método, si su punto de salida se produce anteriores (gracias de nuevo Marc).

+1

"llamar" aún necesitaría un ret después de él, iirc; tail.call 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 la cola). Creo que "jmp" es válido, sin embargo. –

+2

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" (preguntaré al OP) –

Cuestiones relacionadas