Tag: format string

%dn是格式字符串吗?

我最近在代码中遇到了这一行 – fprintf(logfile,” |-IP Version : %dn”,(unsigned int)iph->version); 这里的“%dn”是格式字符串吗? 如果是这样,它意味着什么?

printf转换规范的大小限制

printf转换规范是%后跟标志,宽度,精度,长度修改器和转换说明符。 转换规范的大小是否有实际限制? 即%s是2个字符长,而%08.2f是6个字符长。 我的问题是,根据C99标准,可以创建的格式字符串中的最大单一规范的长度是多少?

为什么gcc -Wformat没有在unsigned int上警告printf%d?

以下程序具有未定义的行为: #include int main(void) { unsigned int x = -100; // This is fine, becomes UINT_MAX – 100 printf(“%d\n”, x); // This is undefined behavior. return 0; } C99 7.19.6.1p8状态%d需要一个int参数。 C99 7.19.6.1p9声明“如果任何参数不是相应转换规范的正确类型,则行为未定义 。” 但是,gcc -Wformat (包含在-Wall )不会抱怨上面的程序,为什么呢? 这是一个错误,还是故意遗漏? 从gcc手册页: -Wformat 检查对”printf”和”scanf”等的调用,以确保提供的参数具有适合指定格式字符串的类型,并确保格式字符串中指定的转换有意义

printf()是否在C中分配内存?

这个简单的方法只是创建一个动态大小为n的数组,并使用值0 … n-1对其进行初始化。 它包含一个错误,malloc()只分配n而不是sizeof(int)* n个字节: int *make_array(size_t n) { int *result = malloc(n); for (int i = 0; i < n; ++i) { //printf("%d", i); result[i] = i; } return result; } int main() { int *result = make_array(8); for (int i = 0; i < 8; ++i) { printf("%d ", result[i]); } free(result); } […]

在printf中格式化字符串攻击

#include int main() { char s[200] int a=123; int b=&a; scanf(“%50s”,s); printf(s); if (a==31337) func(); } 目的是执行格式字符串攻击 – 通过输入字符串来执行func()。 我试图用%n覆盖变量,但我得出的结论是,如果不首先显示b变量是不可能的,我不知道如何。 任何提示将不胜感激。 对不起,我的英语不好。

格式字符串攻击

我有一个小的C程序可以被利用。 而且我也理解了要执行的攻击背后的逻辑。 但是,尽管我尝试过,但这对我来说并不适用。 #include #include #define SECRET1 0x44 #define SECRET2 0x55 int main(int argc, char *argv[]) { char user_input[100]; int *secret; int int_input; int a, b, c, d; /* other variables, not used here.*/ /* The secret value is stored on the heap */ secret = (int *) malloc(2*sizeof(int)); /* getting the secret */ secret[0] […]

如何使用格式字符串攻击

假设我有以下代码: #include #include #include int num1 = 0; int main(int argc, char **argv){ double num2; int *ptr = &num1; printf(argv[1]); if (num1== 2527){ printf(“Well done”); } if(num2 == 4.56) printf(“You are a format string expert”); return 0; } 我正在努力了解如何正确行事,但我无法用互联网上的指南来组织我的思想。 它假设是这样的: ./Program %p %p %p %p 然后 ./Program $( printf “\xAA\xAA\xAA\xAA”) %.2523d%n 我只是想不出来,请帮我解决这个问题。 其重点是通过prinft函数将字符串利用到正在运行的程序中。 我需要得到“做得好”和“你是格式字符串专家”才能打印出来。 就我而言,通过Linux终端/ […]