¿En qué caso usaría la programación orientada al salto sobre la programación orientada al retorno?

Voy a suponer que por orientado al salto te refieres al estilo de paso continuo.

[ Editar : en realidad existe un término ” programación orientada al salto “, pero se refiere a un tipo de vector de ataque, no a un estilo de programación. Entonces, tal vez todos los que respondieron (incluido yo mismo) hayan entendido mal la intención de la pregunta].

El estilo de paso de continuación es muy útil en sistemas asíncronos y paralelos. Como estos sistemas tienen una ejecución no secuencial, no encajan bien con la estructura clásica de llamada / retorno base de la pila. Muchos lenguajes de programación hacen que los programadores salten a través de todo tipo de aros (cadenas de devolución de llamada, etc.) para lidiar con esto (evitando saltos).

El código de estilo de paso de continuación escrito explícitamente es en sí bastante esotérico. En consecuencia, algunos lenguajes (especialmente C # ) proporcionan construcciones alternativas para escribir código CPS. Estas construcciones proporcionan una metáfora que es lo suficientemente similar al código secuencial, que coincide con la intuición de los programadores.

Respuesta corta : el enfoque orientado al salto (orientado a la continuación) es una buena opción para el código asíncrono y paralelo, pero si es posible, prefiere el soporte del lenguaje de programación.

Permítanme comenzar diciendo que nunca atacaría el software, excepto para fines de investigación.

Dicho esto, hablemos brevemente sobre lo que son JOP y ROP.

ROP: manipule los destinos de retorno en la pila (grabable) de tal manera que las secuencias cortas de instrucciones benignas existentes antes de las instrucciones de retorno se “engrapen” en un gran programa malicioso.

JOP: manipule los registros de tal manera que las secuencias cortas de instrucciones de bening existentes antes de los saltos indirectos se “peguen”, con un pequeño programa de despacho que actúe como pegamento, de modo que la ejecución se vuelva maliciosa.

Ahora la pregunta es: ¿bajo qué circunstancias un atacante usaría uno y no el otro?

La respuesta más probable es que un atacante o investigador siempre intentaría descubrir cuál funciona y cuál no funciona en un programa determinado. ¿Por qué hay una necesidad de elegir?