Estoy tratando de encontrar una manera de anular globalmente funciones malloc y relacionadas en Visual C++ (2005). Mi configuración es una DLL con biblioteca de tiempo de ejecución estáticamente vinculada que consiste en mi propio código de C++, C++ externo y código c. Lo que quiero lograr es permitir que un usuario del dll establezca sus propias implementaciones de las funciones de asignación de memoria.Anular globalmente malloc en visual C++
Soluciones que no puedo utilizar:
- Anulación de nuevo y eliminar a nivel mundial, hay un montón de librerías externas en C mi base de código que significa esto no va a captura de muchas asignaciones.
que define malloc en un símbolo diferente. Esto me obligaría a llevar esta definición a la configuración de compilación de todas las bibliotecas externas utilizadas y realmente quiero evitar esto.
Cosas que no me importan
- Si cualquiera de las bibliotecas externas están asignando memoria de alguna otra manera (HeapAlloc, archivos de memoria asignada o lo que sea que llegar a), acepto que esto no se rastreará correctamente anulando malloc.
La solución más razonable que puedo llegar a es de alguna manera interferir con el proceso de enlace y asegurarse de que mi propia malloc está siendo vinculado en lugar de los estándar, preferiblemente Me gustaría ser capaz de utilizar el viejo malloc funciona como predeterminado
En google perf-tools parece que parchean el código de las funciones manualmente en tiempo de ejecución para permitir que se llame a una función de enlace antes de llamar a la función original. ¿Es esta la mejor manera de hacer esto?
¿Está intentando hacer lo mismo que LD_PRELOAD en Linux? – LB40
No estoy tan familiarizado con LD_PRELOAD, pero parece estar relacionado con la vinculación dinámica, en mi caso malloc, libre y sus amigos están vinculados estáticamente. – Laserallan
¿Podría explicar por qué cree que necesita hacer esto? –