我正在尝试对我的伪数据msg
使用模运算,如果味精多变8 msg%8
,然后给我printf("[-] Error: Size too long");
的输出,否则就可以了,但是使用直接使用msg%8
并不意味着可以解决该问题?
错误输出
Error C2296 '%': illegal, left operand has type 'char [1000]'
int main() {
char buf[8];
char msg[1000];
printf("Enter cookie:\n");
scanf("%s", buf);
printf("Your cookie %s \n", buf);
if (strlen(buf) == 16) {
printf(" [+] Header received: %d bytes \n", strlen(buf));
if (stricmp("0x41414141414141", buf) == 0)
{
strcpy(buf, "hello");
printf("Enter msg:\n");
scanf("%s", msg);
if (strlen(msg) <= 512) {
if (msg % 8) {
printf("[-] Error: Size too long");
}
else {
printf("[-] Good");
}
}
else {
printf(" [-] Error: Invalid \n");
}
}
else {
printf(" [-] Error: Invalid \n");
}
}
else {
printf(" [-] Error: Invalid \n");
}
return 0;
}
答案 0 :(得分:1)
您不能对指针或地址使用模运算。您可以在整数上使用它。因此,您需要类似strlen(msg)%8
的东西。像这样:
if (strlen(msg) <= 512) {
if (strlen(msg) % 8) {
printf("[-] Error: Size too long");
}
else {
printf("[-] Good");
}
}
在考虑字符数组时,您需要将它们视为一个序列。而且,获得数组的余数也不是什么,只有计数就可以除。但是序列是一个集合。除了集合之外,它没有其他任何价值。然后,您可以计算集合中的项目,安排它们,删除或添加项目。 Sequence没有复杂的成员。如果要以不同的方式使用模运算符,则需要自己实现。
还要注意,如果strlen(buf) > 7
,则说明缓冲区溢出并调用了未定义的行为。