我们的源函数是,我们的接收器函数是。 从不返回空值。下面代码中的污染流是什么?sourcesinksource 1 void foo(char *arg) { 2 if (arg == nullptr) { 3 sink(arg); 4 } 5 } 6 7 int main(void) { 8 char *x = source(); 9 foo(x); 10 char *y = nullptr; 11 foo(y); 12 }A。There is no tainted flow. B. x@8 to y@11C.x@8 to x@9 D.x@8 to arg@3 答案选哪个
时间: 2024-01-26 09:03:54 浏览: 56
D. x@8 to arg@3。因为从源函数source()返回的指针x可能为nullptr,如果传递给foo()函数的参数为nullptr,则arg指针也为nullptr,但是在foo()函数中我们尝试使用arg指针,这可能会导致空指针解引用,从而产生安全漏洞。因此,x@8到arg@3是有污染的流。
相关问题
我们的源函数是source,我们的接收器函数是sink, source从不返回空值.下面代码中的污染流是什么?1 void foo(char *arg) { 2 if (arg == nullptr) { 3 sink(arg); 4 } 5 } 6 7 int main(void) { 8 char *x = source(); 9 foo(x); 10 char *y = nullptr; 11 foo(y); 12 }
在上面的代码中,污染流发生在第 3 行,因为在这一行中,如果传递给 foo 函数的参数 arg 是 nullptr,那么它将被直接传递给了 sink 函数。如果在 foo 函数中调用 sink 函数时传递了 nullptr,那么就会出现未定义行为,这可能导致程序崩溃或者执行不可预测的操作。因此,我们应该在调用 sink 函数之前检查 arg 是否为 nullptr。
上述代码中的clear(&Students[num-count-1]);函数的代码是什么
根据你提供的信息,我猜测这里的代码是在清空一个结构体类型的变量,该变量的地址为`&Students[num-count-1]`。这里的`Students`是一个结构体类型的数组,`num`是数组中元素的个数,`count`是已经删除的元素的个数。
具体的清空操作取决于结构体的定义和实现。通常来说,清空一个结构体变量的操作可以使用以下两种方式之一:
1. 使用赋值操作将结构体变量的每个成员都赋为初始值或者空值,例如:
```c
Students[num-count-1].name = "";
Students[num-count-1].age = 0;
Students[num-count-1].score = 0.0;
```
2. 使用memset()函数将结构体变量中的所有内存空间都清零,例如:
```c
memset(&Students[num-count-1], 0, sizeof(struct Student));
```
其中,第一个参数是结构体变量的地址,第二个参数是清零的值,这里使用0表示清空,第三个参数是结构体变量所占用的内存空间的大小。
阅读全文