[AFCTF2018]MagicNum


題目是六行浮點數,百度之后才明白這道題的考點是出在計算機保存浮點數的問題上

72065910510177138000000000000000.000000
71863209670811371000000.000000
18489682625412760000000000000000.000000
72723257588050687000000.000000
4674659167469766200000000.000000
19061698837499292000000000000000000000.000000

這是出題人的代碼

#include <stdio.h>
char flag[]="afctf{sec_is_everywhere}";

int main()
{
	for(int i=0;i<6;++i){
		printf("%20f\n",*(float*)(flag+i*4));
	}
	return 0;
}

  

所以我們要做的就是將浮點數恢復成二進制

直接用c寫

#include <stdio.h>

int main()
{   float i = 72065910510177138000000000000000.000000; 
	char *p = &i;
	printf("%c\n",*(p));
	printf("%c\n",*(p+1));
	printf("%c\n",*(p+2));
	printf("%c\n",*(p+3));
	return 0;
}

  

將浮點數賦值給變量 i

然后把i的地址賦值給指針p

直接輸出指針p 指向的內容即可

 

 

 其他幾個浮點數同理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM