百科问答小站 logo
百科问答小站 font logo



美剧《硅谷》第三季第一集神秘代码写的是什么? 第1页

  

user avatar   simonxia-OMG 网友的相关建议: 
      

试了一下,运行结果如红框所示,第一反应是HBO的编剧也是蛮拼的。。。

这是一段花式输出字符串的程序,源代码被黑科技玩坏了

原理其实很简单,我们注意到代码中有个特别的 magic number 是65,没错,那就是ASCII 表里的 A,前面那一堆不过是在叠加偏移量,以此来实现输出。

具体地说,偏移量的计算是用 0x1FULL 这个无符号长整型常量作为掩码(二进制表示为 11111),从低位开始每次从

       0x79481E6BBCC01223 + ((dcf_t)0x1222DC << 64)      

这个大整数中取出 5 位,所取出的 5 位二进制表示即为偏移量。

我们用同样的 trick 可以输出任意想要的字符串。比如:

       #include <stdio.h> #include <stdlib.h>  typedef unsigned long u64;  typedef void enc_cfg_t; typedef int enc_cfg2_t; typedef __int128_t dcf_t;  enc_cfg_t _ctx_iface(dcf_t s, enc_cfg2_t i){  int c = (((s & ((dcf_t)0x1FULL << i * 5)) >> i * 5) + 65);  printf("%c", c);}          enc_cfg2_t main() {  for (int i=0; i<10; i++){   _ctx_iface(0x28EC789572FC8 + ((dcf_t)0x000000 << 64), i);  } }      

将得到:



摸清了套路,我们也成了老司机,甚至可以写一段程序来生成这段看起来很黑科技的代码。

gen.c

       #include <stdio.h> #include <string.h>  #define MAX_LEN 25 // 128 的位整数最多用此方法可以存放25个字符  const char *text = "#include <stdio.h>
#include <stdlib.h>

typedef unsigned long u64;

typedef void enc_cfg_t;
typedef int enc_cfg2_t;
typedef __int128_t dcf_t;

enc_cfg_t _ctx_iface(dcf_t s, enc_cfg2_t i){
	int c = (((s & ((dcf_t)0x1FULL << i * 5)) >> i * 5) + 65);
	printf("%%c", c);}
	enc_cfg2_t main() {
	for (int i=0; i<%d; i++){
		 _ctx_iface(0x%llX + ((dcf_t)0x%X << 64), i);
	}
}
";   int main() {  char input[MAX_LEN];  memset(input, 0x00, sizeof(char)*MAX_LEN);  if (fgets(input, MAX_LEN, stdin) == NULL) {   printf("fail to read input
");   return -1;  }   unsigned long long mask1 = 0;  __int128_t mask2 = 0;  int i;  for (i = 0; input[i] != '
' && i < MAX_LEN; i++) {   if (i < 12) {    mask1 |= (unsigned long long)(((input[i] - 'A') & 0x1F)) << i*5;   } else if (i == 12) {    mask1 |= (unsigned long long)(((input[i] - 'A') & 0xF)) << i*5;    mask2 |= ((input[i] - 'A') & 0x10) >> 4;   }else{    mask2 |= (unsigned long long)(((input[i] - 'A') & 0x1F)) << (i-13)*5+1;   }  }  printf(text, i, mask1, mask2); }      


现在用这段程序,我们可以随意发挥了




  

相关话题

  如何看待腾讯副总裁质疑「用户在哪里看未播完的海外剧」?释放了什么信号? 
  Java如何打好牢固的基础? 
  《权游》大结局你希望谁坐上铁王座? 
  喜欢编程而又干着程序员的工作是一种什么样的体验? 
  如何评价2020年6月27号Netflix德剧《暗黑》(Dark)第三季? ? 
  PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点? 
  如何看待北京理工大学2018-2019求是书院C语言期末? 
  做游戏不仅要编程能力还要计算机其它方面的知识吗? 
  有人号称编程零基础学C#4天,用记事本1分钟写个计算器,而且信誓旦旦,这是怎么回事? 
  有哪些由世界名著改编而来的好看的电影或剧集? 

前一个讨论
能否推荐几个界面好看的个人网页设计?
下一个讨论
如何评价美剧《硅谷》?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利