下面的代码来自 IDA。
这是解析函数之前的代码:
movzx eax, byte ptr [rbp+nineth_char+3]
movsx eax, al
mov edi, eax
call sub_898
这是解析函数的代码:
push rbp
mov rbp, rsp
mov eax, edi
mov [rbp+var_14], al
movsx eax, [rbp+var_14]
mov [rbp+var_1], al
mov [rbp+var_2], 250
movzx edx, [rbp+var_1]
movzx eax, [rbp+var_2]
add eax, edx
nop
pop rbp
retn
此函数的参数是二进制文件参数中第 9 个字符的 ascii 值。该值与 [rbp+var_2] 中的值相加,即 250。此函数返回相加的结果。
这是解析函数后的代码:
mov edx, eax
movzx eax, [rbp+var_35] ; 101
cmp dl, al
jz short loc_F6
结果与 101 值进行比较,当设置 ZF 标志时,处理器将跳转到下一个标签。
等式是:ascii_value_of_char + 250 = 101,但字符的ascii值不能是负数。那么我对这段代码的理解好不好?如果没有,你能告诉我我做错了什么吗?