этот метод сравнивает два целых числа с нулевой проверкой, см. тесты
public static boolean compare(Integer int1, Integer int2) {
if(int1!=null) {
return int1.equals(int2);
} else {
return int2==null;
}
//inline version:
//return (int1!=null) ? int1.equals(int2) : int2==null;
}
//results:
System.out.println(compare(1,1)); //true
System.out.println(compare(0,1)); //false
System.out.println(compare(1,0)); //false
System.out.println(compare(null,0)); //false
System.out.println(compare(0,null)); //false
System.out.println(compare(null,null)); //true
вы можете разработать, чтобы использовать другие псевдорежимы общего назначения: t0..t19
bp your-address "r$t1=your-other-address; ba w4 @$t1 /1 \"dd @$t1;gc\""
Если вы знаете, что никогда не будет больше определенной «контрольной точки» ba
«ребенка», вы можете фактически использовать псевдореестр @$bpN
, установив команду «control» breakpoint:
ba1 w4 /1 @esp+4 "dd @$bp1"
То есть укажите номер точки останова, который должен назначить эта новая точка останова, и псевдоопределение для этой точки останова все еще определено в команде точки останова.
Однако, если вы считаете контрольную точку останова будет ударяться несколько раз и хочет определить несколько контрольных точек ba
, которые, очевидно, не будут работать, потому что тогда «точка останова 1» будет просто переопределяться каждый раз. Но вы все равно можете это сделать!
Фокус в том, чтобы заставить контрольную точку контрольной точки фактически содержать литеральный адресный текст, а не пытаться пройти псевдореестр. И вы можете сделать это с помощью текстовых псевдонимов.
Попробуйте это для вашей контрольной точки останова:
bu @WHATEVER "aS /x ${/v:baaddy} @esp+4; .block{ ba w4 /1 baaddy \"dd baaddy\"; ad ${/v:baaddy} }"
Когда контрольная точка останова ударяется, происходит следующее:
@esp+4
. .block
гарантирует, что расширение псевдонима произойдет для чего Далее. ad
(из-за переключателя / v). @esp+4
равно 0x1234
, команда точки прерывания доступа буквально становится: ba w4 /1 0x1234 \"dd 0x1234\"
с фактическим адресом, встроенным в нее. Важно удалить псевдоним текста в конце или в следующий раз, когда эта контрольная точка останова будет удалена, расширение псевдонима произойдет до того, как команда aS
и «baaddy» будет расширена используя значение previous . Это также означает, что важно, чтобы этот псевдоним текста не существовал при первом установлении команды контрольной точки останова.