Anulación de "nuevo" y registro de datos sobre la persona que llama

Estoy tratando de escribir un generador de perfiles de memoria y, hasta ahora, he podido lograr que mis funciones personalizadas funcionen para malloc, free, new y delete. Traté de usar__FILE__ y__LINE__ para registrar el originador dentro del nuevo método sobrecargado, pero (como se esperaba) solo da los detalles de dónde está la función sobrecargada. ¿Hay alguna forma de obtener los detalles sobre el originador de las funciones sobrecargadas sin hacer cambios al código existente del componente que se está probando (como #define para malloc)?

La función que estoy usando es:

void* operator new (size_t size)
{
    if(b_MemProfStarted)
    {
        b_MemProfStarted = false;
        o_MemLogFile << "NEW: " << "| Caller: "<< __FILE__ << ":"
                << __LINE__ << endl;
        b_MemProfStarted = true;
    }

    void *p=malloc(size);
    if (p==0) // did malloc succeed?
    throw std::bad_alloc(); // ANSI/ISO compliant behavior

    return p;
}

El bool b_MemProfStarted se utiliza para evitar llamadas recursivas en ofstream y map.insert.

Respuestas a la pregunta(2)

Su respuesta a la pregunta