函数intlen、len和iptoa提供了一种很纠结的方式,来计算表示一个整数所需要的十进制数字的个数。我们利用它来研究GCC栈保护者措施的一些情况。
int len(char *s) { return strlen(s); } void iptoa(char *s, long *p) { long val = *p; sprintf(s, "%ld", val); } int intlen(long x) { long v; char buf[12]; v = x; iptoa(buf, &v); return len(buf); }
下面是intlen的部分代码,分别由带和不带栈保护者编译: