鱼C论坛

 找回密码
 立即注册
查看: 2731|回复: 20

[已解决]求大佬看一下这个代码

[复制链接]
发表于 2023-2-16 16:31:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#define PAYLOAD_COUNTER_OFFSET      4
VOID CPayloadGenerator::GenerateIncrementalData(PUCHAR a_pucBuffer, ULONG a_ulBytesToCopy)
{
    for (ULONG i=0, j=m_ucPayloadIncrementalLastCharUsed; i<a_ulBytesToCopy; )
    {
        // Add the header counter for every 512 bytes
        if (i%m_ulPayloadHeaderCounterInterval == PAYLOAD_COUNTER_OFFSET && 
            a_ulBytesToCopy >= i+m_ulPayloadHeaderCounterSize)
        {
            AddDataHeader(a_pucBuffer+i);
            i+=m_ulPayloadHeaderCounterSize;
        }
        else
        {
            // Set the incremented payload character
            a_pucBuffer[i] = j%256;
            m_ucPayloadIncrementalLastCharUsed = a_pucBuffer[i];
            i++;
            j++;
        }
    }
}
不懂为什么// Add the header counter for every 512 bytes 为什么每512bytes就增加一个counter
最佳答案
2023-5-14 18:39:22
这段代码中的注释 "// Add the header counter for every 512 bytes" 是因为该程序在生成增量数据时,在每隔m_ulPayloadHeaderCounterInterval字节后(即512字节之后)添加一个4字节的计数器来跟踪当前生成的数据量。

这个计数器在 `AddDataHeader` 函数中实现,并将被附加到a_pucBuffer数组的正确位置。具体而言,计数器通过将此函数中的i作为偏移量并使用等于 `PAYLOAD_COUNTER_OFFSET` 的常量进行引用。所以,每输入512字节,该函数会调用一次 `AddDataHeader` ,并在缓冲区中插入一个新的计数器值。

对于此语句 "if (i%m_ulPayloadHeaderCounterInterval == PAYLOAD_COUNTER_OFFSET && a_ulBytesToCopy >= i+m_ulPayloadHeaderCounterSize)" ,表示当处理到512字节数组时,才会在该缓冲区的当前位置附加一个额外的计数器。除非已经接近缓冲区边界或不足以容纳计数器和 extra byte(每个整数是4字节长),否则将尝试将计数器附加到缓冲区。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-16 16:44:03 | 显示全部楼层

回帖奖励 +6 鱼币

本帖最后由 两手空空儿 于 2023-2-16 16:56 编辑

大概想实现目的说一下,就这么丢过来一段函数代码,生猜不好回答吧
猜一下
if (i%m_ulPayloadHeaderCounterInterval == PAYLOAD_COUNTER_OFFSET &&      //间隔达到一定数量
            a_ulBytesToCopy >= i+m_ulPayloadHeaderCounterSize)            // BytesToCopy数量没有结束,就是没有copy完
        {
            AddDataHeader(a_pucBuffer+i);
            i+=m_ulPayloadHeaderCounterSize;       //进入下一个存储段,可能是512Byte 一段
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 16:47:54 | 显示全部楼层

回帖奖励 +6 鱼币

薅个币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 16:49:50 From FishC Mobile | 显示全部楼层

回帖奖励 +6 鱼币

来看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 17:14:24 | 显示全部楼层

回帖奖励 +6 鱼币

有其他的代码吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-16 17:55:07 | 显示全部楼层

这是个很大的代码 这一部分其实和其他衔接的不多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 18:03:30 | 显示全部楼层

回帖奖励 +6 鱼币

给一下上下文吧,不然不好判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 18:13:32 | 显示全部楼层
本帖最后由 两手空空儿 于 2023-2-16 18:15 编辑
赋闲在家 发表于 2023-2-16 17:55
这是个很大的代码 这一部分其实和其他衔接的不多


就算是代码独立,逻辑也不是独立的,它可能是以512个byte为单位增加容量,就像是vector一样维护一个动态的内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 18:54:55 | 显示全部楼层

回帖奖励 +6 鱼币

不会,意思意思领个鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 19:31:18 | 显示全部楼层
sfqxx 发表于 2023-2-16 18:54
不会,意思意思领个鱼币


中奖绝缘体又来领币了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 20:16:21 From FishC Mobile | 显示全部楼层
liuhongrun2022 发表于 2023-2-16 19:31
中奖绝缘体又来领币了

你……
。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 20:49:03 | 显示全部楼层

回帖奖励 +6 鱼币

不会,单纯只为领币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 21:08:33 From FishC Mobile | 显示全部楼层

回帖奖励 +6 鱼币

膜拜大佬,小白来薅个币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 23:36:32 | 显示全部楼层

回帖奖励 +6 鱼币

我想要币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-17 07:19:44 From FishC Mobile | 显示全部楼层

回帖奖励 +6 鱼币

呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-17 07:20:40 From FishC Mobile | 显示全部楼层
myd0313 发表于 2023-2-17 07:19
呵呵

哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-17 09:52:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-17 20:48:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-20 22:05:50 | 显示全部楼层
这是一个 C++ 类的成员函数 CPayloadGenerator::GenerateIncrementalData 的实现,用于生成增量数据。下面是对该函数的注释和解释:

c++
Copy code
#define PAYLOAD_COUNTER_OFFSET      4

VOID CPayloadGenerator::GenerateIncrementalData(PUCHAR a_pucBuffer, ULONG a_ulBytesToCopy)
{
    // a_pucBuffer:目标缓冲区指针
    // a_ulBytesToCopy:需要生成的字节数
    for (ULONG i=0, j=m_ucPayloadIncrementalLastCharUsed; i<a_ulBytesToCopy; )
    {
        // 每生成 512 字节的数据,添加 4 字节的数据头(用于记录生成的数据量)
        if (i%m_ulPayloadHeaderCounterInterval == PAYLOAD_COUNTER_OFFSET &&
            a_ulBytesToCopy >= i+m_ulPayloadHeaderCounterSize)
        {
            // 添加数据头
            AddDataHeader(a_pucBuffer+i);
            i+=m_ulPayloadHeaderCounterSize;
        }
        else
        {
            // 设置增量数据字符,取值为上一个字符加 1 取模 256
            a_pucBuffer[i] = j%256;
            // 记录最后一个字符
            m_ucPayloadIncrementalLastCharUsed = a_pucBuffer[i];
            i++;
            j++;
        }
    }
}
函数的主要作用是生成增量数据,输入参数 a_pucBuffer 是目标缓冲区指针,a_ulBytesToCopy 是需要生成的字节数。在函数内部使用了两个计数器 i 和 j,分别表示当前已经生成的字节数和上一个增量字符的值。

对于每 512 字节的数据,函数会在生成的数据头部添加 4 字节的数据头。这个数据头用于记录已经生成的数据量。PAYLOAD_COUNTER_OFFSET 定义了数据头在每 512 字节数据中的偏移量。

对于非数据头部分,函数会根据上一个增量字符的值生成下一个字符。具体做法是将上一个增量字符的值加 1 后取模 256,得到的结果作为当前字符的值。函数还会记录下最后一个增量字符的值,以便下一次生成增量数据时使用。

需要注意的是,函数使用了一些类成员变量,例如 m_ulPayloadHeaderCounterInterval 和 m_ulPayloadHeaderCounterSize,这些变量可能在类的构造函数中进行初始化。此外,函数调用了 AddDataHeader 函数,但这个函数的实现并未在提供的代码中给出,因此需要从其他地方获得实现。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-20 22:06:33 | 显示全部楼层
#define PAYLOAD_COUNTER_OFFSET      4

VOID CPayloadGenerator::GenerateIncrementalData(PUCHAR a_pucBuffer, ULONG a_ulBytesToCopy)
{
    // a_pucBuffer:目标缓冲区指针
    // a_ulBytesToCopy:需要生成的字节数
    for (ULONG i=0, j=m_ucPayloadIncrementalLastCharUsed; i<a_ulBytesToCopy; )
    {
        // 每生成 512 字节的数据,添加 4 字节的数据头(用于记录生成的数据量)
        if (i%m_ulPayloadHeaderCounterInterval == PAYLOAD_COUNTER_OFFSET && 
            a_ulBytesToCopy >= i+m_ulPayloadHeaderCounterSize)
        {
            // 添加数据头
            AddDataHeader(a_pucBuffer+i);
            i+=m_ulPayloadHeaderCounterSize;
        }
        else
        {
            // 设置增量数据字符,取值为上一个字符加 1 取模 256
            a_pucBuffer[i] = j%256;
            // 记录最后一个字符
            m_ucPayloadIncrementalLastCharUsed = a_pucBuffer[i];
            i++;
            j++;
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表