【问题标题】:Using assembly code written for 32-bit in 64-bit application在 64 位应用程序中使用为 32 位编写的汇编代码
【发布时间】:2011-09-22 17:43:53
【问题描述】:

我可以使用下面链接中为 32 位 x86 从 x86-64 机器上的 64 位程序编写的 Serpent 加密的汇编例程吗?也就是说,不用为它启动一个单独的 32 位进程吗?如果没有,是否有人有一个指向在 32 位和 64 位下都可以工作的 Serpent 优化实现的指针(LGPL 可以,但不能使用 GPL,因为它是一个商业项目)? http://gladman.plushost.co.uk/oldsite/cryptography_technology/serpent/serpent.asm

【问题讨论】:

    标签: encryption assembly 64-bit


    【解决方案1】:

    您需要转换将结果和数据传输到内存或从内存传输的代码部分,以使用 64 位地址寄存器。此外,堆栈操作代码将需要使用 64 位堆栈寄存器。除此之外,它很可能在没有重大变化的情况下工作。

    【讨论】:

    • 谢谢你,bdonlan。我想我会尝试找到一个快速的 C 版本,只要 S-box 的分解相同,我怀疑它会慢得多。
    • 使其适应 x86-64 不会太困难 - 主要是将 exx 指针寄存器更改为 rxx 寄存器。您不能按原样使用它,因为它会截断堆栈和数据指针。
    【解决方案2】:

    这段代码似乎兼容,至少对我来说是这样(通常,IA32 程序集是相当向后兼容的,因为寄存器的大小不会改变,只是在 x86-64 上添加了新的)。另外,最好的方法是自己检查。

    【讨论】:

    • bdonlan 是正确的,由于内存加载/存储操作,代码兼容;它使用[esi + ...][edi + ...]作为地址操作数,64位模式需要更改。
    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多