请教在工程中重新实现new和delete问题

liangchencf 2011-11-03 11:49:19
现在的状况是这样的,一个项目中有已经有编译完的几个第三方库和本地代码直接编译的dll。
有没有可能在不重新编译第三方dll的情况下,让所有的new delete调用新实现的new和delete。我试了下只在一个地方实现void * __cdecl operator new (size_t size)和delete后。发现在其他库中的内存申请都没有调用新的实现。
另外在dll中能否声明线程本地存储的全局变量,这个变量怎么导出来呢?
就是类似
__declspec( thread ) int i;
写成 __declspec(dllexport) __declspec( thread ) int i;?

多谢。
...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kevin_qing 2011-12-06
  • 打赏
  • 举报
回复
如果是动态连接的crt:
找dll导入表,decode函数名字有new operator()这种的,应该是call到vc runtime dll里面
然后修改下函数指针就ok了。


如果dll是静态连接的crt,你就很痛苦了,要看反汇编,找到new/delete的实现处,然后jmp到你的代码里面去。
龙行天下之Sky 2011-12-05
  • 打赏
  • 举报
回复
什么叫线程本地存储的全局变量?
dll中可以自定义段存放dll的数据
让所有的new delete调用新实现的new和delete是可以的

liangchencf 2011-12-05
  • 打赏
  • 举报
回复
能否给个简单的例子,万分感谢
[Quote=引用 1 楼 waistcoat07 的回复:]
1.可以,采用inline patch方法,替换第三方库里的new delete即可
2.可以啊,详细见Window核心编程,那里面有例子
[/Quote]
WaistCoat07 2011-11-04
  • 打赏
  • 举报
回复
1.可以,采用inline patch方法,替换第三方库里的new delete即可
2.可以啊,详细见Window核心编程,那里面有例子

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧