gpt4 book ai didi

c++ - 我怎样才能故意用未初始化的数据初始化一个变量,以便 valgrind 将该变量视为未初始化的?

转载 作者:太空狗 更新时间:2023-10-29 20:13:23 26 4
gpt4 key购买 nike

我的代码中有一个垃圾数据缓冲区,我将其传递给写入它的函数。我不需要这个垃圾缓冲区的数据。由于我在多个地方需要这样的垃圾数据缓冲区,但从未从中读取,所以我在所有地方都使用相同垃圾缓冲区。

当某些伪造代码从垃圾数据缓冲区读取时,这将是致命的,或者,例如,当我使用垃圾数据缓冲区时,我应该使用适当的专用缓冲区来代替。

理想情况下,我想让伪代码快速倒下,所以我在调用写入函数后对数据进行了打乱,这样就没有人可以使用(和依赖)这些垃圾数据。

现在我有了一个想法,我可以将未初始化的数据复制到垃圾数据上而不是对其进行加扰,这样 valgrind 就可以找到垃圾缓冲区中的所有读取。

我目前的解决方案是新建[]一些字节并将未初始化的内容复制到垃圾缓冲区,然后删除[]未初始化的数据。由于大部分时间(不幸的是)未初始化的数据为 0,我将其与模式异或。对于这么简单的事情,这一切似乎都相当复杂。

有没有人提出更好的解决方案?

最佳答案

Valgrind(和 memcheck)有一个 C API !

你可以简单地这样做:

#include <memcheck.h>

// ....

VALGRIND_MAKE_MEM_UNDEFINED(trash_buffer, trash_length);

如果您希望 valgrind 认为数据不可访问而不仅仅是单元化,您也可以使用 VALGRIND_MAKE_MEM_NOACCESS

在 valgrind 之外运行时,这将有非常小的运行时开销。即使不在 valgrind 中运行,您复制内容的方法也可能很昂贵。

关于c++ - 我怎样才能故意用未初始化的数据初始化一个变量,以便 valgrind 将该变量视为未初始化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752416/

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