抱歉,对于 ASM 和 IDA,我完全是个菜鸟。我的编程经验主要是作为一名 Java 开发人员,我觉得有点脱离了我的舒适区。
我正在做一些逆向工程,我设法找到了我想要的东西。我在我的程序中发现了以下情况:
mov ecx, [esi+500h]
cmp byte ptr [ecx+679h], 1
jnz loc_7256AAD
据我了解,它将 [esi+500h] 处的值移动到寄存器 ecx 中,然后将地址 [exc+679h] 处的字节与字节 1 进行比较。如果结果不是 0,则跳转到函数 loc_7256AAD .
我的问题是 [ecx+679h] 处的字节实际上是一个布尔值,总是 0 或 1。这很好,但我不知道如何找到决定结果是 0 还是 1 的函数。基本上我会很感激一些关于如何去寻找 [ecx+679h] 的值被设置的地方的建议。谢谢。
我将从调用此代码段的例程中提供一些代码,以防万一。
push ecx
lea eax, [esp+70h+arg_8]
mov ecx, esp
mov dword ptr [esp+70h+var_30], esp
push eax
call ds:mfc90u_280
mov byte ptr [esp+70h+var_4], 9
mov byte ptr [esp+70h+var_4], 1
mov ecx, [esi+500h]
call sub_7210050
mov ebp, eax
test ebp, ebp
jz loc_7256E73
loc_7256E73 是第一个片段。
对不起,如果我漫无目的,我很感激任何建议,谢谢。
在听取了 Jens 的建议后,我尝试添加一个 write trace 断点,但是内存位置发生了变化,即地址 ecx+679h 每次都不一样。如果有人有更多的想法,非常感谢,谢谢。