這道題emm,又讓我不停的踩以前的一個坑,題目是一種提示的坑,老忘記。
首先,打開ida反編譯
進入函數sub_400917先看看,然后發現這是個數獨(一開始我沒發現......看到第二個對比的時候懵了,然后看了下別人的博客,發現是數獨)
接着進入sub_400881函數,是一個賦值函數
接下來就是sub_400758和sub_400807函數了,這個時候就先分析前面那個函數
這里的v5=v4是讓v5和v4的地址相等,而*v4=v7,是讓v4指向的地址值為v7,所以這里是賦值v4[0],下面兩個是賦v4[1]和v4[2]的,由於有多次賦值,最后怎么賦值的我也不清楚。。。(推薦這里用動態調試。。可惜我是Windows,我linux上也沒裝ida,但我猜測就是換位置,所以我跑去別那看了看)
接着看后面這個函數, 又是遞歸,很明顯的是賦值語句在第9行,而這個加8和加16指的是指針數組,可以到外面看看這個傳進來的參數a1,所以這個也是賦值
然后我看了一位師傅的博客:https://blog.csdn.net/Palmer9/article/details/104613420這是那位師傅自己手動弄出來的交換后的結果,簡單明了
然后在回到先前的數獨
答案是0,4,2,1,4,2,1,4,3,0
寫腳本
#include<stdio.h> #include<iostream> int main() { char s1[255] = { '0','4','2','1','4','2','1','4','3','0' }; int sort[255] = { 7,3,8,1,9,4,0,5,2,6 }; char f[255]; for (int i = 0; i < 10; i++) { f[sort[i]] = s1[i]; } f[10] = '\0'; ::std::cout << f; }