2012-01-09 31 views
0

ファイルを暗号化/復号化するアセンブラで書かれたプログラムを探しています。 NASMをコンパイラとして使用します。私は、サンプルコードを見つけましたが、それは私がエラーに持っエラーアセンブラXOR暗号化/復号化ファイル

encrypt_xor proc lpBuffor:dword, dwSize:dword, dwKey:dword 

    mov eax,lpBuffor 
    mov ecx,dwSize 
    mov edx,dwKey 

    next_byte: 

    xor byte ptr[eax+ecx-1],dl 
    dec ecx 
    jne next_byte 

    ret 

暗号_xor ENDP

をスロー:

encrypt_xor proc lpBuffor:dword, dwSize:dword, dwKey:dword 

encrypt_xor proc lpBuffor:dword, dwSize:dword, dwKey:dword 

エラーパーサーを:命令は を期待し、ここでも

xor byte ptr[eax+ecx-1],dl 

エラー昏睡または行の最後には、このコードで間違っている

何期待しましたか?

+0

あなたはどのCPU /アーチをターゲットにしていますか?あなたはOpenSSLソースやAES-NI命令(Sandybridge以上)をチェックアウトできます。 – Elalfer

+0

@Elalfer x86プロセッサ – quba88

+0

quba88、与えられた答えを受け入れるか、受け入れられない理由を述べてください –

答えて

3

あなたが提供したコードは、MASM構文のようです。 equivilent NASMの構文は次のようなものになります

; void encrypt_xor(LPBYTE lpBuffor, DWORD dwSize, DWORD dwKey) 
encrypt_xor: 
    push ebp 
    mov  ebp,esp 

    %stacksize flat 
    %arg lpBuffor:dword, dwSize:dword, dwKey:dword 

    mov eax,[lpBuffor] 
    mov ecx,[dwSize] 
    mov edx,[dwKey] 

    next_byte: 

    xor [eax+ecx-1],dl 
    dec ecx 
    jne next_byte 

    mov esp, ebp 
    pop ebp 

    ret 

ここで注意すべきいくつかのものがあります。 %stacksize%argの使用は、cdecl呼び出し規約(つまり、すべてのパラメータがスタックに渡されます)を前提としています。 NASMでは、スタックフレームを含める必要があります(したがって、espおよびebp文)。

最後のメモ - このコードが共有されている場合は、名前の変更について考える必要があります。このルーチンはどんな種類の強力な暗号化も提供しておらず、開発者を間違ったセキュリティに陥らせるという悪い考えです。

+0

dec ecx、jne next_byte * is *最適化...ループは読みやすくなりますが、現代のプロセッサでは遅くなります。 –

+0

@BrianKnoblauch本当に?私は2つの命令 "dec ecx、jne next_byte"の証明/デモンストレーションが単一のLoop命令より高速であることに感謝します。 – adelphus

+1

@adelphus http://www.agner.org/optimize/instruction_tables.pdf – harold