gpt4 book ai didi

c - 视觉 C++ : replace malloc/free

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:43 24 4
gpt4 key购买 nike

我正在尝试用我自己的实现替换标准的 C 函数。

void* malloc(size_t size) {}
void free(void*) {}

给我以下警告/错误:

1>main.cpp(26): warning C4273: 'malloc': inconsistent dll linkage
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(97): note: see previous definition of 'malloc'
1>main.cpp(31): warning C4273: 'free': inconsistent dll linkage
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\corecrt_malloc.h(85): note: see previous definition of 'free'
1>ucrtd.lib(ucrtbased.dll) : error LNK2005: _free already defined in main.obj
1>ucrtd.lib(ucrtbased.dll) : error LNK2005: _malloc already defined in main.obj
1> Creating library ..\bin\\app.lib and object ..\bin\\app.exp
1>..\bin\\app.exe : fatal error LNK1169: one or more multiply defined symbols found

有没有办法在不使用 #define 的情况下替换 Visual C++ 2015 中的 malloc/free 函数? (我使用第三方库,不想修改他们的代码)。

最佳答案

是的,这是可能的。这样做的方式是,您的代码必须在任何代码有机会调用这些函数之前 Hook msvcrt.dll 中的 malloc() 和 free()。我相信您应该能够使用 Microsoft Detours 来挂接这些功能。此外,您可能还想 Hook kernel32.dll 中的 HeapAlloc() 和 HeapFree(),因为它们最终会调用此 API。

关于c - 视觉 C++ : replace malloc/free,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com