【发布时间】:2020-04-18 02:51:36
【问题描述】:
所以我们在组装中遇到了这样的保险箱挑战,您需要创建保险箱和钥匙来破坏它们并结束无限循环。 以下是保险箱的示例:
loopy:
mov ax, [1900]
cmp ax,1234
jne loopy
还有一把钥匙:
loopy2:
mov ax, 1234
mov [1900],ax
jmp loopy2
所以我有保险箱和钥匙,但我不明白为什么它不起作用:
这是我的保险箱:
org 100h
mySafe:
mov dx,5
mov ax, [5768h]
mov bx,7
mov word [180h],2
mul word [180h]
mov [180h],bx
push ax
dec bx
mov cx,dx
mov ax,dx
loopy1:
add bx,ax
loop loopy1
dec bx
pop ax
add ax,bx
mul word [180h]
cmp ax,350
jne mySafe
这是我的钥匙:
org 100h
loopy:
mov word [5768h],10
jmp loopy
ret
打破循环的正确答案应该是 10 并且当我放入保险箱时它可以工作,不知何故用钥匙它不起作用,我不知道为什么.. (nasm需要“单词”)
【问题讨论】:
-
你的“钥匙”永远不会退出。这不是问题吗?它应该只需要运行一次,就可以永远解锁“安全”循环。除非您在多任务操作系统下运行多个进程,否则无限循环是不好的。
-
你的“保险箱”太复杂了,我无法在脑海中模拟。当您在调试器中单步执行它时,您是否看到它从
[5768h]加载10?如果是这样,那么它最终不会以ax == 350结束吗?对于minimal reproducible example,“不起作用”不够详细。 -
我的密钥应该无限循环运行。它在 codeguru 的程序中运行,并且密钥应该获胜,这意味着它应该打破保险箱的无限循环。但是,它总是以平局告终。表示钥匙不起作用..
标签: debugging assembly reverse-engineering x86-16 corewars