首页 > 解决方案 > 在 C 中将 uint_8* 转换为任何类型,比如“double”或结构?

问题描述

在 C 语言中,我有一个程序,比如

void foo(A a);

在这里,类型 A 是已知的。它可以是任何类型、int、指针或结构,或任何用户编写的类型。

现在我有一个指针指向的数据,比如uint8_t* data大小n我如何转换dataaA 类型?

我正在使用模糊后端从 typeuint8_t*和 size的随机数据中测试 foo 。n

标签: ctype-conversionfuzzing

解决方案


假设您从流中读取字节(uint8_t)并希望将数据传递给您的函数foo

要遵循的步骤:

  • 您确定您阅读了数据类型 A 的序列化信息吗?
  • 您确定至少已读取 sizeof(A) 个字节吗?
  • 你确定你的类型 A 是(平凡的)可序列化的吗?(例如,如果 A 包含指向另一个对象的指针怎么办)

然后

foo((A) data); // <- remember: A is just a placeholder, but data is a pointer to uint8_t

推荐阅读