一行C语言关机代码进阶之路,细节拉满,轻松解读复杂代码

c语言关机程序最终版

#include <stdio.h> #include <stdlib.h> #define code(p,行C细节r,i,n,t,f) r##f##r##i##t##p #define xxoo code(m,s,t,o,e,y) int main() {         xxoo((char*)(int []) {  1953851507, 1853321060, 7548192, 7613728, 3159584 });     return 0; } 

 你没看错,以上代码就可以实现程序关机。关机

知识刨析之宏操作

#define code(p,代码代码r,i,n,t,f)  r##f##r##i##t##p #define xxoo code(m,s,t,o,e,y) 

 宏操作之##:

define NAME(i)  name##i int main() {      int NMAE(1)=0;    //等效 int name1=0; } 

 宏操作之宏替换

#define code(p,r,i,n,t,f)  r##f##r##i##t##p #define xxoo code(m,s,t,o,e,y) /* code(m, s,  t,  o,  e,  y) code(p,  r,     i,  n,  t,  f)  //p=m ,r=s, t=i ,n=o, t=e,f=y; r##f##r##i##t##p */ 

 综上代码: r##f##r##i##t##p 合并为 system,即 xxoo 可直接改为system

知识刨析之复合文字

//通过上述代码程序可以简化为以下程序 #include <stdio.h> #include <stdlib.h> int main() {         system((char*)(int []) {  1953851507,进阶解读 1853321060, 7548192, 7613728, 3159584 });     return 0; } 

 复合文字 其实是C语言匿名数组的定义,返回的拉满是数组首地址,如下程序:

int iArray[]={ 10,轻松20};             //普通数组   int *pArray=(int []){ 10,20};      //一个复合文字  返回一个数组指针 

 知识刨析之数据存储

//根据复合文字,程序可简化如下: #include <stdio.h> #include <stdlib.h> int main() {       int array[]={  1953851507,复杂 1853321060, 7548192, 7613728, 3159584 };     system((char*)array);     return 0; } 

 而稍微学过C语言的同学应该知道关机是指令是网站模板:system("shutdown -a -t 60"); 故这串数据应该表示的shutdown -a -t 60,而数据存储到计算机中都是行C细节数字,所以可以借助vs开发工具 查看指令存储内存数据。关机先写如下程序:

#include <stdio.h>   int main() {      char str1[] = "shutdown" ;          char str2[] = " -s" ;               char str3[] = " -t" ;               char str4[] = " 60" ;         } 

 将指令分为4个模块,代码代码进入断点测试,进阶解读打开内存窗口,拉满具体如下图:

将鼠标放在变量上,轻松然后转接到内存1的复杂地址栏中查询即可:

关键的一步来了,香港云服务器点击内存中的行C细节数据,把数据调整为4个字节,并且改为无符号显示即可,如下图:

这就是我们要的指令的整数表示法。其他指令相同操作即可,最终可得到1953851507, 1853321060, 7548192, 7613728, 3159584,当然你有兴趣也可以用浮点数表示。

滇ICP备2023000592号-31