gpt4 book ai didi

c++ - 查看接收到的指针是字符串、ushort 还是数组

转载 作者:行者123 更新时间:2023-11-28 01:10:10 27 4
gpt4 key购买 nike

我在 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 进行交互。

非常感谢。

最佳答案

作为void*代表一个原始内存块,无法确定那里有什么实际数据。

但是,您可以对每个操作进行“类似字符串”的内存转储,只需为结果输出提供某种“输出上限”。

这可以通过以下方式实现:

const size_t kUpperLimit = 32;

void output_memory_dump(void* memory) {
std::cout.write(reinterpret_cast<char*>(memory), kUpperLimit);
}

对于类似非字符串的数据,输出将很难解释,但否则您会得到您正在搜索的内容。

您可以尝试应用一些基于猜测的方法,例如遍历 reinterpret_cast<void*>(memory)并制作is_alphanumeric && is_space检查每个符号,但这种方法似乎不是很稳定(谁知道 void* 中实际隐藏着什么......)。

无论如何,对于某些可能没问题的情况。

关于c++ - 查看接收到的指针是字符串、ushort 还是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833261/

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