【发布时间】:2010-09-30 17:37:04
【问题描述】:
我在 C 中插入 memcpy() 函数,因为目标应用程序使用它来连接字符串,我想找出正在创建的字符串。代码是:
void * my_memcpy ( void * destination, const void * source, size_t num )
{
void *ret = memcpy(destination, source, num);
// printf ("[MEMCPY] = %s \n", ret);
return ret;
}
函数被成功调用,但第一个参数可以是任何参数,如果结果是字符串或数组,我只想跟踪它。我不得不问它是数组还是字符串。我知道这不能直截了当:有没有办法找出 RET 指向什么?
我在 MACOSX 下工作并与 DYLD 进行交互。
非常感谢。
【问题讨论】:
-
您可以访问地图文件吗?如果是这样,您可以找到放置字符串文字的位置并从中获取一些信息。全局数组也是如此。
-
你不应该在你的函数中调用
printf,因为printf非常复杂,它本身可能会再次调用memcpy。相反,我会选择简单的write或writev。或者您可以添加一些线程安全的激活计数器,如果printf部分尚未激活,则该计数器只执行。
标签: c++ pointers code-injection library-interposition