¿Existe una característica del comstackdor para inyectar una entrada de función personalizada y un código de salida?

Actualmente codifico en Windows con VS2005 (pero no me importaría saber si hay opciones para otros comstackdores y plataformas. Estoy más interesado en OSX como plataforma alternativa). Tengo un progtwig C (no C ++) y me gustaría para hacer lo siguiente …

Dada una función, digamos …

int MyFunction(int myparam) { // Entry point. ... // Exit point. return 1; } 

Me gustaría poner un fragmento de código en el punto de entrada y en el punto de salida. PERO, prefiero no tener que modificar los cientos de funciones que ya están disponibles. ¿Hay una manera de definir la entrada de la función y el código de salida que el comstackdor inyectará para todas mis funciones sin tener que modificarlas todas?

La mayoría de las soluciones que encontré o probé requerirán que edite cada función, lo cual es mucho trabajo. Me imagino que alguien más debe haber golpeado algo como esto y haberlo resuelto. No puedo ser único en esta petición que sospecho.

Es específico de Microsoft, pero puede conectarse a las funciones _penter y _pexit para hacer algo al ingresar y salir de una función; tendrá que comstackr su proyecto con algunas banderas especiales.

Aquí hay un pequeño tutorial y puedes encontrar algunos resultados más sobre cómo usarlos en Google. Además, esta publicación de blog incluye algunos detalles sobre el ensamblaje que debe hacer para evitar estropear la stack al entrar y salir.

GCC tiene el indicador -finstrument-functions que le permite definir dos funciones que se llamarán al principio y al final de cada llamada a función:

 void __cyg_profile_func_enter(void *this_fn, void *call_site); void __cyg_profile_func_exit(void *this_fn, void *call_site); 

Estás buscando algo llamado progtwigción orientada a aspectos o AOP.

Esto no es algo que se admita de forma nativa en C (o C ++). Hay algunas implementaciones basadas en bibliotecas listadas en la página enlazada para C (aunque no sé cuán maduras / útiles son)

Los comstackdores OpenWatcom C y C ++ tienen parámetros -ee y -ep para eso:

 -ee call epilogue hook routine -ep[=] call prologue hook routine with  stack bytes available 

Harán que el comstackdor emita llamadas a las rutinas de enlace definidas por el usuario __EPI y __PRO.

También hay

 -en emit routine names in the code segment 

que emitirá el nombre de la función en el código del objeto como una cadena de caracteres justo antes de que se genere la secuencia de prólogo de la función. Puede ser útil para la rutina __PRO.

Puede encontrar más información sobre estas y otras opciones del comstackdor en la guía del usuario de C / C ++ disponible entre otros manuales en http://openwatcom.org/index.php/Manuals