2010-12-06 68 views
1

爲了完成一個彙編程序項目,我們需要對輸入字符串進行加密,傳輸和解密,我在其中一個類中使用了C和ASM {}。在彙編程序中訪問陣列成員

該鍵被加載到一個空的C字符數組中(20個字符長),然後稍後用XOR語句進行加密。

的代碼來加載陣列的地址是:

LEA ESI,鍵

這使 '關鍵' 的地址放入ESI。當我們在調試模式下檢查寄存器時,這裏的地址與關鍵數組的地址相同,所以我們知道這是有效的。

MOV EDX,[ESI]

,我們認爲這將移動ESI的第一指標的值到EDX,我們用 「MOV [ESI],EAX」 把一個價值註冊到esi數組中。反過來似乎是合理的。

然而,edx實際得到的值是「875575655」(上次運行)或類似。對於char值來說太大了。

我感覺我們可能訪問錯誤的數組, 任何意見,將不勝感激。

注意:通常要增加數組索引,我們只是簡單地使用inc esi,然後像上面那樣讀取,這也是我們計劃從數組讀取數據的方式。

回答

2

隨着mov edx, [esi]你讀DWORD(因爲edx大小是雙字)。使用mov dl, [esi]來讀取字節。

2

875575655 in hexa is 0x34303967,that is string'g904'。

解釋:在邏輯上它是一個字符串,你可以一次加載更多的字符。所以,不要做20字節的加載和xors,你可以在DWORD上做5個這樣的操作。