在delphi中使用彙編異常的簡單,只用使用關鍵字asm ....end來引導就行了。
得到乙個字元在字串中的位置有很多方法,最簡單的就是使用delphi自己的pos函式
另外乙個方法就是使用 迴圈查詢字串陣列的方法,二分法等,這幾種是比較常規的方法,其中建議最好不使用pos函式。 因為,雖然使用該函式寫的**是很簡單,只用一句話
charindex := pos(mychar,str)
就能夠完成,但是其實他的效率是最低的,因為delphi在使用它之前,先要開闢乙個陣列空間,然後將長度變成1
然後在把這個單字元拷貝到剛剛開闢的記憶體空間中去。然後才呼叫pos函式進行查詢,而查詢完成之後,delphi還
會 使用 try...finally...end機制來釋放分配開闢的記憶體空間,而try finally是很消耗資源的。所以不推薦使用。
順序迴圈查詢的方法也很簡單,二分法稍微複雜一點。
下面是自己寫的乙個得到乙個字元在字串中的位置函式:(採用的是順序查詢,有興趣可以在修改一下成為二分查詢,其查詢速度將會由數量級變成對數級)
止在討論如何在delphi中使用彙編!
functiongetcharpos(reschar:ansichar;consts:string;index:integer=0):integer;asm
//test指令執行的就是and與操作,唯一不同的是,不儲存結果,所以edx中的值不變
test edx,edx;// 判斷edx是否為0,如果為0則指標為 nil
jz @exit//如果為空, 則跳轉退出
mov edi,ecx;//儲存index的值,表示從什麼地方開始查詢
//使用乙個增量計數edi,可以在迴圈中使用[edx+edi]來得到s的每乙個字元
mov ecx, [edx-4];
test ecx,ecx;//看字串 s是否為''沒有乙個字元,長度為0
jz @exit;
cmp ecx,edi//查詢開始位置超過字串長度,退出
jb @exit
//mov edi,0;
@compore:
cmp al,[edx+edi]//al中存放字元
jz @found//相等則說明找到
inc edi;//edi計數器增加
loop @compore//迴圈比較
@found:
inc edi//由於edi從0計數開始,所以加1
mov eax,edi//將查詢結果傳遞給函式 返回結果儲存在eax中
ret
@exit:
mov eax,-1;
end;
Delphi中使用彙編 關於POS函式的問題
在delphi中使用彙編異常的簡單,只用使用關鍵字a end來引導就行了。得到乙個字元在字串中的位置有很多方法,最簡單的就是使用delphi自己的pos函式 另外乙個方法就是使用 迴圈查詢字串陣列的方法,二分法等,這幾種是比較常規的方法,其中建議最好不使用pos函式。因為,雖然使用該函式寫的 是很簡...
Delphi中使用彙編 關於POS函式的問題
在delphi中使用彙編異常的簡單,只用使用關鍵字asm end來引導就行了。得到乙個字元在字串中的位置有很多方法,最簡單的就是使用delphi自己的pos函式 另外乙個方法就是使用 迴圈查詢字串陣列的方法,二分法等,這幾種是比較常規的方法,其中建議最好不使用pos函式。因為,雖然使用該函式寫的 是...
iOS逆向 在OC專案中使用彙編函式
在開發或研發的時候,有兩種場景可能需要在oc中使用彙編函式 1.正向開發時你想把部分關鍵邏輯隱藏。2.逆向分析時你想直接使用別人的加密方法。1.1.建立彙編檔案 text align 4 globl funcadd arm funcadd arm add w0,w0,w1 add w0,w0,w2 ...