这可能是什么原因?我是汇编(asm)编程的新手,我对代码中发生的事情感到沮丧,因为我一直试图弄清楚它几个小时。
$access_token ="token_here";
$verify_token = "my_password";
$hub_verify_token = "my_password";
fwrite ( $fl, json_encode($_REQUEST));
if (isset ( $_REQUEST ['hub_challenge'] )) {
$challenge = $_REQUEST ['hub_challenge'];
$hub_verify_token = $_REQUEST ['hub_verify_token'];
}
$fl = fopen ( "request.txt", "a" );
fwrite ( $fl, json_encode($_REQUEST));
$fh = fopen ( "/testbot/log.txt", "a" );
if ($hub_verify_token === "my_password") {
echo $challenge;//exit;
}
我很确定代码正常运行,它会正常运行直到返回部分。 PS:我还有其他代码,其中将调用wordMatching PROC。
答案 0 :(得分:0)
在代码的开头放置一个断点(在执行push EDX
之前),记下堆栈地址esp
加上堆栈中的值(返回给调用者的地址)。
然后在ret
处设置一个断点。运行代码。检查esp
。
(你永远不会执行pop EDX
,你在代码中有它,但它在对je
+ jne
后面,所以实际上无法访问)。
关于比较的逻辑,你可以简化它:
.code
push EDX
mov EDX, OFFSET stringInput
mov ECX, inputSize
call readString
mov EBX, OFFSET wrongInput
loopWord:
mov AL, [ESI]
cmp AL, [EDX]
jne loopWord_wrongInput ; first difference -> wrongInput
inc ESI
inc EDX
test AL,AL
jnz loopWord ; until 0 is found in both strings
; here is the branch for correct word
mov EBX, OFFSET correctInput ; no difference -> switch result string
loopWord_wrongInput:
; display result string
mov EDX,EBX
call WriteString
pop EDX ; your missing "pop EDX" fixed here
ret
编辑:我忘了在第一个版本中增加esi / edx,现在修复。