printf(&unix["\021%siz\012\0"].....
2012-08-14 15:53
204 查看
快点来看printf(&unix["\021%siz\012\0"].....
看这行代码:
printf(&unix["\021%siz\012\0"], (unix)["have"] + "fun" - 0x60);
看下面解释:
首先看一段代码:
代码: |
#include int main() { int a[5]={1,2,3,4,5}; printf("%d\n",3[a]); return 0; } |
再看下面一段代码:
代码: |
#include int main() { int a[5]={1,2,3,4,5},i=4; printf("%d\n",3[a]); printf("%d\n",i[a]); return 0; } |
再看下面一段代码:
代码: |
#include int main() { printf("%d\n",unix); return 0; } |
相当于#define unix 1 这样打印出来1
下面来解释一下这个问题.
代码: |
#include int main() { printf("%c\n",(unix)["have"]); return 0; } |
代码: |
#include int main() { printf("0x%x",'a'); return 0; } |
(unix)["have"]+"fun"-0x60
中就相当于0x61-0x60+"fun"相当于 0x01+"fun" 相当于字符指针后移相当于"un"了
这样后面的部分解释完了。~
代码: |
#include int main() { printf(&unix["\021ix\012\0"]); return 0; } |
我们知道unix宏的值 是1. 那么
代码: |
printf(&unix["\021ix\012\0"]); |
代码: |
printf(&1["\021ix\012\0"]); |
代码: |
printf(&"\021ix\012\0"[1]); |
这个引用和上面的有所区别 区别在于&. 那么一个字符数组从它的下标为1 的元素取地址就可以得到一个字符串了.
还原回去.
相当于
代码: |
printf(&"\021%six\012\0"[1],"un"); |
代码: |
printf("%six\012\0","un"); |
\012 是asc码里的回车.这个串相当于
代码: |
printf("%six\n\0","un"); |
问题应该是.printf(&unix["\021%six\012\0"], (unix)["have"] + "fun" - 0x60);
http://hj9707.bokee.com/4022327.html
相关文章推荐
- printf(&unix["\021%six\012\0"], (unix)["have"] + "fun" - 0x60);
- printf(&unix["\021%six\012\0"], (unix)["have"] +"fun" - 0x60);
- printf "%.*s"
- unix shell "$"
- linux下printf中"\n"刷新缓冲区的疑问(已解决)
- printf("%p\n",&A::m_a) 中%p的意思
- printf("%*s);
- C中对 printf("%.*s/n",len,content) 的意思理解。
- c语言中printf("N多字怎么打的快");(vim编辑器)
- printf("%x,%x",ptr1[-1],*ptr2)的思考
- How to input "EOF" signal in unix?
- printf("%s",s) 与 printf(s) 的区别
- printf("%d",5.01)和printf("%f",5)的输出结果
- int a[5]={1,2,3,4,5}; int *p=(int*)(&a+1); printf("%d",*(p-1)); 答案为什么是5?
- printf("%*.*s\n")
- printf("%d",5.01)和printf("%f",5)的输出结果
- "Worse is better" -- Unix哲学之一
- void Traverse()//while( walker!=rear) { printf("%c",buff[walker]); walker=(walker+1)%10;
- if和if else的区别if(a>=b&&b>=c) printf("&d\n",a);
- printf("%s! c is cool!\n","%s! c is cool!\n");