一、转义字符
1 #include<stdio.h> 2 3 void main(){ 4 printf("hello \nworld\a");// \n换行 \a机器响一声 5 getchar();//等待 6 }
1 #include<stdio.h> 2 3 void main(){ 4 //printf("hello world"); 5 putchar(‘h‘); 6 putchar(‘e‘); 7 putchar(‘l‘); 8 putchar(‘l‘); 9 putchar(‘o‘); 10 putchar(‘\n‘);//转义字符也是一个字符 11 putchar(‘w‘); 12 getchar(); 13 }
1 #include<stdio.h> 2 3 void main1(){ 4 while(1) putchar(‘\a‘); 5 putchar(‘A‘);//输出一个字符 6 putchar(‘\n‘);//换行 7 getchar(); 8 } 9 void main(){ 10 //printf("\\");//只有一个“\”会报错 11 //putchar(‘\\‘); 12 //printf("\""); 13 putchar(‘\‘‘); 14 getchar(); 15 }
二、hello world的N种做法
1 #include<stdio.h> 2 3 void hello1(){ 4 printf("hello world"); 5 } 6 void hello2(){ 7 printf("A%sB","hello world");//hello world取代%s 8 } 9 void hello3(){ 10 printf("%c%c%",‘h‘,‘e‘); 11 } 12 void hello4(){ 13 putchar(‘h‘); 14 putchar(‘e‘); 15 } 16 void hello5(){ 17 putchar(65);//ASCLL码 18 putchar(66); 19 } 20 void notepad(){//练习:用ascll码打印notepad 21 putchar(110); 22 putchar(111); 23 putchar(116); 24 putchar(101); 25 putchar(112); 26 putchar(97); 27 putchar(100); 28 } 29 void hello6(){//按照8进制输出helloworld 30 putchar(0150);//前面带0表示8进制 31 putchar(0145); 32 putchar(0154); 33 putchar(0154); 34 } 35 void hello7(){//按照16进制输出helloworld 36 putchar(0x68);//前面带0x表示16进制 37 putchar(0x65); 38 putchar(0x6c); 39 putchar(0x6c); 40 } 41 void hello8(){//按照8进制输出helloworld 42 putchar(‘\150‘);//8进制的150所标志的字符 43 putchar(‘\145‘);// ‘\ddd‘,3位八进制代表的字符 44 putchar(‘\154‘); 45 putchar(‘\154‘); 46 } 47 void hello9(){//按照16进制输出helloworld 48 putchar(‘\x68‘);// ‘\xhh‘,16进制数据转换成编号,查找字符 49 putchar(‘\x65‘); 50 putchar(‘\x6c‘); 51 putchar(‘\x6c‘); 52 } 53 void hello10(){ 54 puts("hello world"); 55 } 56 57 void main(){ 58 hello10(); 59 getchar(); 60 }
三、打开程序的n种做法
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void main(){ 5 //char str[50]="notepad"; 6 char str[50]; 7 //sprintf(str,"%s%s","note","pad"); 8 //sprintf(str,"%s","notepad"); 9 //sprintf(str,"%c%c%c%c",‘c‘,‘a‘,‘l‘,‘c‘); 10 //sprintf(str,"%c%c%c%c",99,97,108,99); 11 //sprintf(str,"%c%c%c%c",0143,0141,0154,0143);//8进制 12 //sprintf(str,"%c%c%c%c",0x63,0x61,0x6c,0x63);//16进制 13 //sprintf(str,"%c%c%c%c",‘\143‘,‘\141‘,‘\154‘,‘\143‘);//8进制 14 sprintf(str,"%c%c%c%c",‘\x63‘,‘\x61‘,‘\x6c‘,‘\x63‘);//16进制 15 16 printf(str); 17 system(str);//执行指令 18 system("pause");//暂停 19 }
四、通过内存地址改变变量的值
首先设置断点,进行调试
到达第一个断点时,打印出num变量的地址,根据地址查看到该地址存储的值为01
到达第二个断点,值变成了03
到达第三个断点,值变成了05,对其进行修改,将05改成59
16进制的59就等于10进制的89,最终打印出修改后的89,而非之前的5,这就是外挂改血量改蓝改攻击力的原理(找到需要修改数据的地址,然后对其进行修改)
五、加法改值
03改成09
六、打开多个程序
有的编译器一定要把变量的定义放在最前面,而不能随时定义char str[50];这条语句需要放在前面声明
时间: 2024-10-29 09:52:27