ida演算法解析

2021-08-09 06:45:40 字數 880 閱讀 1828

int sub_401130()

sub_402702("yes,you get it!");

return 0;

}

bool __thiscall sub_401000(int

this)

else

return result;

}

這是演算法的具體內容,這裡出現的第乙個問題就是 v4的值

char v4[48]; // [sp+0h] [bp-40h]@1

int v5; // [sp+30h] [bp-10h]@1

這裡定義了v4 下面緊跟著定義v5,如果sp作為v4,也就是基位址,v5是v4+30h

v5 = 0x2020908;

v6 = 0x9030106;

第二個問題是this指標

sub_402702(「do you know flag?\n」);

((void (__thiscall )(char ))loc_4010a0)(&v1);

if ( !sub_401000((int)&v1) )

這段**很容易知道v1是輸入資料存放的地方loc_4010a0讀入資料。

其實this是=v1 不過這裡把*this強制轉換成了int型,v4+ascii-30h=v5[a](這裡a表示ascii-30h後的值)

a=[2,0,1,6,1,1,1,1,0]

for i in a:

print(chr(i+48),end=」「)

輸出結果為 201611110

注意 result = v3 == 8;

這裡的v3==8時會result=1否則result還是0!

搜尋 A 演算法和IDA 演算法

a 演算法概述 採用廣度優先搜尋策略,在搜尋過程中使用啟發函式,即有大致方向的向前進雖然目標有時候不是很明確。a 演算法核心 a演算法的關鍵在於啟發函式,啟發函式的優劣直接影響a演算法的效率。f n g n h n 這個式子中 f n 表示從初始狀態到目標狀態的估測代價。g n 表示從初始狀態到當前...

IDA 演算法 騎士精神

騎士精神 description 在乙個5 5的棋盤上有12個白色的騎士和12個黑色的騎士,且有乙個空位。在任何時候乙個騎士都能按照騎士的走法 它可以走到和它橫座標相差為1,縱座標相差為2或者橫座標相差為2,縱座標相差為1的格仔 移動到空位上。給定乙個初始的棋盤,怎樣才能經過移動變成如下目標棋盤 為...

八數碼(IDA 演算法)

八數碼 ida 就是迭代加深和a 估價的結合 在迭代加深的過程中,用估計函式剪枝優化 並以比較優秀的順序進行擴充套件,保證最早搜到最優解 需要空間比較小,有時跑得比a 還要快 include include include include include using namespace std in...