所以我有一个程序,我要求用户输入一个条目,并将其与值“zoidberg”进行比较。如果不是 zoidberg,那么它会告诉用户输入不正确。我没有写它,但我得到了它并告诉我找到漏洞并修复它。
首先,我想确认(或否认他们是否错了)两件事。我还没有完成 asm 编程,所以我不确定这个假设是否正确。
我的假设:
用户入口所在的内存地址是:[esp+410h+var_410]?
入口zoidberg存放的内存地址为:[esp+410h+var_40C]?
我真的不知道那是临时位置还是最终位置。我很混乱。
此外,测试调用将 eax 与自身进行比较,这可能是需要修复的漏洞吗?
; Attributes: bp-based frame
public main
main proc near
var_410= dword ptr -410h
var_40C= dword ptr -40Ch
var_400= dword ptr -400h
push ebp
mov ebp, esp
and esp, 0FFFFFFF0h
sub esp, 410h ; char *
mov [esp+410h+var_410], offset anEntry ; "enter an entry to continue:"
call _puts
lea eax, [esp+410h+var_400]
mov [esp+410h+var_410], eax
call _gets
mov [esp+410h+var_40C], offset aZoidberg ; "zoidberg"
lea eax, [esp+410h+var_400]
mov [esp+410h+var_410], eax
call _strcmp
test eax, eax
jnz short loc_804846E
mov [esp+410h+var_410], offset aNeedAnEntry?Wh ; "need an entry? why not zoidberg?"
call _puts
jmp short loc_804847A
loc_804846E: ; "your entry is bad, and you should feel"...
mov [esp+410h+var_410], offset aYourEntryIsBa
call _puts
loc_804847A:
mov eax, 0
leave
retn
main endp