Assembly 使用寄存器运算符的ARM程序集加密

Assembly 使用寄存器运算符的ARM程序集加密,assembly,encryption,stack,arm,Assembly,Encryption,Stack,Arm,我正在为大学班学习手臂装配。分配是使用SP或r13模拟用于消息加密的堆栈。我们必须 使用异或异或加密消息 解码信息 比较原始和解码的消息,如果它们是相同的,然后欺负如果不是,它回到绘图板。 我得到了跳转表的基本概念。主要问题是,如果我使用“EOR r2,r2,r8”,是否还有其他方法使用异或 AREA Encrypter, CODE, READONLY SWI_Exit EQU &11 ;finish program

我正在为大学班学习手臂装配。分配是使用SP或r13模拟用于消息加密的堆栈。我们必须

使用异或异或加密消息 解码信息 比较原始和解码的消息,如果它们是相同的,然后欺负如果不是,它回到绘图板。 我得到了跳转表的基本概念。主要问题是,如果我使用“EOR r2,r2,r8”,是否还有其他方法使用异或

    AREA        Encrypter,  CODE,       READONLY

SWI_Exit    EQU     &11     ;finish program

    ENTRY               ; mark the first instruction
main    
    MOV r0, #0
    BL  JumpTable
    MOV r0, #1
    BL  JumpTable
    SWI SWI_Exit    

MESSAGE DCD "Yesterday all my troubles seemed so far away. Now it looks as though they're here to stay."
KEY DCD &12345678

JumpTable   
    ADR r1, SubTable
    MOV r0, r0,LSL #2
    LDR pc, [r1, r0]

SubTable
    DCD Encrypt0
    DCD Decrypt1
    DCD Print2

Encrypt0
    LDR r8 , KEY
    ADR 7r13, MESSAGE
    LDMFD   r13!, {r2-r7}
    EOR r2, r2,  r8
    EOR r3, r3, r8
    EOR r4, r4,  r8
    EOR r5, r5,  r8
    STMFD   r13!, {r2-r7}   
    MOV pc, r14

Decrypt1
    MOV pc, r14

Print2
    MOV pc, r14
    END

这段代码甚至没有汇编,这使得人们很难相信问题的其余部分。我尝试用GNU语法重写指令,修复了构建错误,使其在一个哑指令集模拟器中运行,它似乎都按预期执行,因此可能是与您的环境相关的问题,您没有提供任何详细信息。试着用调试器一步一步地调试,看看它到底偏离了轨道-我的猜测可能是stmfd指令提示:仔细看你的区域指令。诺兰,请花点时间格式化你的问题。尽量简洁。我很感激你们看了我的问题,但这些都是虚情假意的。如果我们在中间某个地方看到这个句子,我们已经在看你的问题了。而且,使用堆栈指针R13作为数据指针并不是很好的实践,它应该被用来“仿真”堆栈。为什么要使用堆栈指针模拟堆栈?此外,代码似乎只加密前16个字符。现在还不清楚这个堆栈应该用来做什么。子程序调用?我放弃了使用r13,这解决了我的很多问题。我仍然不确定我的老师是怎么说的,关于使用r13模拟堆栈,但我确实完成了这项工作,并使其正常运行。谢谢您的帮助。