【问题标题】:assembler XOR encrypt/decrypt file汇编器 XOR 加密/解密文件
【发布时间】:2012-01-09 13:22:15
【问题描述】:

寻找一个用汇编程序编写的可以加密/解密文件的程序。我使用 NASM 作为编译器。我找到了示例代码,但它抛出了错误

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

错误昏迷或预期行尾

这段代码有什么问题?

【问题讨论】:

  • 您的目标是哪个 CPU/Arch?您可以查看 OpenSSL 源代码和/或 AES-NI 说明(Sandybridge 及更高版本)
  • quba88,请接受给出的答案或说明您不能接受的原因

标签: assembly nasm xor encryption


【解决方案1】:

您提供的代码看起来更像 MASM 语法。 等效的 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 中,这需要包含堆栈帧(因此有 espebp 语句)。

最后一点 - 如果此代码是共享的,您应该考虑更改名称。该例程不提供任何类型的强加密,让开发人员陷入虚假的安全感是个坏主意。

【讨论】:

  • dec ecx, jne next_byte 优化...循环更具可读性,但在现代处理器上速度较慢。
  • @BrianKnoblauch 真的吗?我很高兴看到两条指令“dec ecx,jne next_byte”的证明/演示比单个 Loop 指令快。
  • “循环”在所有意图和目的上都已过时。我什至不希望它会持续更长时间。这里的实际优化是使用 SSE2 一次异或 16 个字节(当然,对未对齐的部分进行一些修复),或者在 GPR 中一次至少 4 个
  • 我认为 LOOP 将在可预见的未来继续存在。很难扔掉仍在使用的指令。是的,人们仍在使用它。追求可读性而不是速度的人。我相信它也比 dec/jne 序列短一个字节。放弃它会破坏很多代码......向后兼容性是为什么我们仍然坚持使用 x86/x64 并且还无法跳转到更好的架构。
  • 我的立场是正确的。英特尔优化手册还将 LOOP 列为具有相对较高的延迟。
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多