必须chatgtp啊,强到无边,写简单代码直接 CV搞定
你敢信下面代码是他写的,最最重要是他还可以配合写导入Letter shell爽歪歪。
看到他用的strtoull么,鬼记得库里面有这些东东。
[C] 纯文本查看 复制代码
/**
* 使用指定的值填充内存块。
*
* @param ptr 指向要填充的内存块的指针。
* @param value 要填充的值,可以是8位、16位、32位或64位。
* @param num 要填充值的数量。
* @param size 要填充值多少个字节。
*/
void mem_fill(void *_ptr, uint64_t _value, size_t _num, size_t _size)
{
unsigned char *p = (unsigned char *)_ptr; // 转换指针以便逐字节操作
while (_num-- > 0) // 遍历每个值
{
for (size_t j = 0; j < _size; ++j)
{ // 遍历每个值的每个字节
*p++ = (unsigned char)(_value >> (j * 8)); // 从value中提取字节并填充
}
}
}
// 适配器函数,用于将memset_custom适配为shell命令
int _cmd_memfill(int argc, char **argv)
{
/* 检查参数数量 */
if (argc != 5)
{
printf("Usage: memfill <address> <value> <num> <byte*x>\r\n");
return -1;
}
/* 解析命令行参数 */
void *ptr = (void *)strtoul(argv[1], NULL, 0);
uint64_t value = strtoull(argv[2], NULL, 0);
size_t num = strtoul(argv[3], NULL, 0);
size_t size = strtoul(argv[4], NULL, 0);
mem_fill(ptr, value, num, size); // 调用memset_custom函数
return 0;
}
// 使用SHELL_EXPORT_CMD宏注册命令
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), mem_fill, _cmd_memfill, "fill memory");
|