首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >静态代码分析工具报告的缓冲区溢出问题

静态代码分析工具报告的缓冲区溢出问题
EN

Stack Overflow用户
提问于 2019-12-18 05:51:34
回答 1查看 184关注 0票数 0

我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void temp(char *source)
{
    char dest[41];

    for(int i = 0; i < 20; i++)
    {
        sprintf(&dest[i*2], "%02x", (unsigned int)source[i]);
    }
}

当我运行静态代码分析工具时,我会得到以下警告:

在循环的第19次迭代中,

:这段代码可以写过由&desti * 2指向的缓冲区的末尾。&desti *2的计算结果为dest + 38。sprintf()写入最多9个字节,从&desti * 2所指向的缓冲区的开头开始,从偏移量38开始,其容量为41 bytes.The,写入的字节数可能超过超出该偏移量的分配字节数。溢出发生在堆栈内存中。

我的问题是:由于在每个循环迭代中,我们只复制2个字节(考虑到机器上无符号int的大小为2个字节)从源复制到目标,那么在最后一个迭代中复制9个字节的可能性在哪里?

EN

回答 1

Stack Overflow用户

发布于 2019-12-18 06:16:16

可以对char进行签名,在x86编译器中也是如此。在我的电脑上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int main(void) {
    printf("%02x\n", (unsigned int)(char)128);
}

打印ffffff80

您要做的是使用格式"%02hhx"和参数(unsigned char)c

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59393480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文