извините, я полный нуб, когда дело доходит до 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 — первый фрагмент.
Извините, если я бессвязно, и я ценю любые советы, спасибо.
По совету Йенса я попытался добавить точку останова трассировки записи, но место в памяти меняется, т.е. адрес ecx+679h каждый раз разный. Если у кого-то есть еще идеи, это очень ценится, спасибо.
If the result isn't 0
: JNE и JNZ являются синонимами одного и того же кода операции. Not-equal в данном случае является правильной семантической интерпретацией. (ZF устанавливается, еслиbyte ptr [ecx+679h]
-1
равно нулю, потому что cmp похож на подпрограмму, которая только устанавливает флаги). - person Peter Cordes   schedule 27.07.2016