2011-12-11 63 views
0

我與一些AT & T彙編語法問題所困擾。不區分大小寫字符串匹配

進出口使用在Linux x86 「視」 的編譯器。

林做一個密碼程序,但它必須是不區分大小寫。澄清一下,無論任何特定角色的情況如何,它都應評估真實。

我有正常的評估程序正常工作,我有它設置爲通過字符串進行迭代。

#Comparison Routine 

    movl $Password, %ebx  #Move the entire hardcoded password into ebx 
    movl $buffer_data, %edx #Move the entire input password into edx 
    movl $Password_len, %ecx #Move the length of the input password into ecx 

0: 
    movb (%ebx), %al   #Move one byte of the hardcoded password into al 
    xorb (%edx), %al   #Compare one byte of the input password to one byte of the hardedcoded 
    jz SkipCase    #If they match, jump to SkipCase 

##### 

    andb $32, %al # 
    xorb (%edx), %al 

    jz SkipCase 
    jnz IncorrectOutput # 

SkipCase: 
    inc %ebx    #Iterate through the 
    inc %edx    #strings and decrease 
    dec %ecx    #the length variable 
    jnz 0b     #if we're not finished, continue 
    jmp CorrectOutput  #If all is good, goto CorrectOutput 

這是部分IM着,我無法弄清楚如何真正轉換的情況下的字符掙扎。我知道我需要添加或減去32,但有些不對。任何意見或建議都會非常有幫助。謝謝。

andb $32, %al # 
xorb (%edx), %al 

這是coverting的情況下的部分,我已經試過addsubandor,我只是無法得到它的工作。這並不是必然的,我意識到jz SkipCase

的比較例程在很大程度上是基於對關在這裏另外一個問題,我會如果nessessary鏈接。

道歉佈局和過度的哈希值,壞的評論風格,我知道。

+0

你的問題的標題是有點誤導,因爲你的問題顯然不是語法 – hirschhornsalz

+0

的問題是,我不知道什麼語法使用。我認爲程序的邏輯很好,我只需要澄清哪些代碼在哪裏使用。 – TheoVate

+0

嗯,我會建議使用_cmp_代替_sub_甚至_xor_。它具有不改變操作數的優點(像sub一樣)。對於從小寫到大寫的轉換,我建議'sub $ 20h'而不是'xor $ 20h',除非你想混淆你的代碼。但是,這一切與AT&T語法無關。 – hirschhornsalz

回答

1

我看到你第一次嘗試將角色「嚴格」匹配,並且當你失敗時繼續進行區分大小寫的匹配。

andb $32, %al  # this 'and' operation only leaves the $32 bit if it is 
        # present in al, all other bits are set to 0 

# al is now either 0 (for a lower case character) 
# or $32 (for an upper case character) 

xorb (%edx), %al # so this operation will become zero if the upper case 
        # bit ($32) is set in the hardcoded password character 

什麼,而不是你需要做的是這樣的:

xorb $32, %al  # invert case of the character by toggling the upper case bit 
cmp (%edx), %al # try to match again 
je SkipCase 

希望幫助,我覺得真的很難在很短的帖子是這樣解釋的位操作。 :)


另外,我想這是任何家庭作業或某種鍛鍊; Tibial,因爲一個真正的密碼程序就必須更聰明 - 例如只對字母,數字或其他字符執行不區分大小寫的檢查。

+0

非常感謝你,這完美地工作,確切地說我正在尋找。是的,而不是它是一個可用的產品,它更多的是爲了展示組裝的使用。我想如果我能厚臉皮和要求你有一個快速瀏覽一下這其中也http://stackoverflow.com/questions/8182165/att-assembly-masked-input涉及我AT&T之間的差異之間遇到問題英特爾彙編。感謝您的完美回覆。 – TheoVate

+0

@TheoVate遺憾的是,其他問題似乎與DOS系統調用,我不知道任何有關 – Martin

相關問題