2010-12-06 15 views
1

入力文字列を暗号化して送信および復号化するアセンブラプロジェクトを完成させるために、クラスの1つでCとASM {}を使用しています。アセンブラの配列メンバーへのアクセス

鍵は空のC文字配列(20文字)にロードされ、後でXOR文で暗号化されて使用されます。

アレイのアドレスをロードするコードは:ESIへの 'キー' のアドレスを置く

LEAのESI、キー

。デバッグモードでレジスタを調べると、ここのアドレスはキー配列のアドレスと同じになりますので、そのことが分かります。

のMOV EDX、[ESI]

我々はAの値を入れて、 "MOVは、[ESI]、EAX" を使用し、これは、EDXにESIの最初のインデックスの値を移動するだろうと思いましたesi配列に登録します。その逆は論理的だったようだ。

しかし、edxが実際に得られる値は「875575655」(前回実行)またはこれに類するものです。 char値には大きすぎます。

アレイにアクセスしている可能性があります。 アドバイスをいただければ幸いです。

注:通常、配列インデックスを増やすには、単純にincsiを使用して、上で行ったように読み込みます。これが配列からの読み込みを計画していた方法です。

答えて

2

mov edx, [esi]とすると、DWORD(edxのサイズはダブルワード)が読み取られます。バイトを読み取るにはmov dl, [esi]を使用してください。

2

875575655は0x34303967です。これは文字列 'g904'です。

論理的には文字列ですが、一度に多くの文字を読み込むことができます。したがって、20バイトのロードとxorを作成する代わりに、DWORDに対して5つの操作を行うことができます。

関連する問題