Если у вас есть доступ к символам отладки (и понять, как их читать, то есть у вас есть код, который анализирует символы отладки), можно точно определить, какой регистр соответствует тому регистру. Тем не менее, это, вполне возможно, меняется с одной строки на другую, поскольку компилятор решает переместить вещи по той или иной причине (например, некоторые вычисления начинаются с R1 и заканчиваются результатом в R2, потому что это лучше, чем пытаться сохраните значение в R1 [или нам нужно исходное значение в R1 тоже - подумайте array[x++]
- теперь у нас есть новое значение x
, надеюсь, в регистре и значение старого x
, которое нам нужно использовать для индексирования, также необходимо быть в реестре, чтобы добавить в базовый адрес array
.
Не все переменные в конечный итоге в регистрах (в зависимости от процессора, и «какие регистры доступны»).
отладчика БУДУ знать, где каждая переменная в любой момент времени - но иногда это может быть большой запутаться, например:
int array[10000];
...
for(int i = 0; i < 10000; i++)
{
array[i] = rand();
}
может перевести что-то вроде этого в процессе оптимизации:
int array[10000];
int *ptr = array;
int *ptr2 = &array[10000];
while(ptr < ptr2)
{
*ptr++ = rand();
}
Теперь попробуйте печать i
...;)
Даже если есть несколько регистров, связанных с переменной, я все еще хочу знать, глядя на регистр. – cmo
Я не уверен, что это операция, которая имеет смысл. Разве вы не можете просто посмотреть на разборку и посмотреть? –
Я действительно прихожу с другой точки зрения. Учитывая список регистров, как их сопоставить с переменными? Это противоположно определению значения данной переменной. – cmo