ubicacion systemprofile esta error disponible c windows

systemprofile - ¿Hay alguna manera de redefinir malloc en tiempo de enlace en Windows?



systemprofile desktop no esta disponible windows 10 2018 (4)

Me gustaría reemplazar el malloc predeterminado en tiempo de enlace para usar un malloc personalizado. Pero cuando intento redefinir malloc en mi programa, aparece este error:

MSVCRT.lib(MSVCR80.dll) : error LNK2005: _malloc already defined in test.lib(test.obj)

Esto funciona perfectamente en cualquier Unix, y funciona en Windows con la mayoría de las funciones, pero no con malloc. ¿Cómo puedo hacer esto? ¿Y qué es diferente con malloc que no permite anularlo?

Sé que podría reemplazar cada llamada a malloc con mi malloc personalizado, o usar una macro para hacer esto, pero preferiría no modificar cada biblioteca de terceros.


A partir de la versión 3.0, Firefox utiliza un asignador personalizado (AFAIR jmalloc). Podrías comprobar cómo lo hicieron. Leí que tenían algunos problemas con eso. Puedes consultar esta publicación en el blog .


Creo que depende en qué orden vincula los archivos. Creo que primero debe vincular su función personalizada y luego la biblioteca de importación.


Realmente hay una buena discusión sobre cuán difícil es esto aquí:

http://benjamin.smedbergs.us/blog/2008-01-10/patching-the-windows-crt/

Aparentemente, necesitas parchar el CRT

Editar: en realidad, un empleado de MS dio la técnica en la discusión. Debes mover tu malloc a una lib y luego vincularlo antes del CRT

"También menciona que si vincula su malloc como lib antes del CRT (es decir, asegúrese de activar ''ignorar libs predeterminadas'' e incluir explícitamente el CRT), obtendrá lo que quiera, y podrá redistribuir esta lib sin problemas "


¿Qué pasa con la definición de malloc = _custom_malloc en el archivo make del proyecto? Que agregar un archivo como:

my_memory.c #undef malloc #undef calloc ... void *_custom_malloc(int size) { return jmalloc(size); } void *_custom_calloc(int size) { return jcalloc(size); } ...