C / C ++ Поиск указателей

Я недавно закончил базовый сканер памяти, и, как и все люди, которые когда-либо делали это … Я понял, что сканирование значений при каждом запуске программы — это боль!

Было бы полезно разработать базовые указатели для этих значений, чтобы их можно было жестко закодировать в приложении. Чтобы понять, как это сделать, я создал это короткое консольное приложение, используя Visual C ++ для моей «цели».

int main(int argc, char *argv[], char *envp[])
{
unsigned int * Pointer1;
Pointer1 = (unsigned int *)malloc(sizeof(unsigned int));
char s[20];
while(1)
{
std::cout<<"(Pid:"<<GetCurrentProcessId()<<") Please enter a value to be stored in memory (type 'q' to exit): \n";
std::cin>>s;
std::cout<<"\n";
if(s[0] =='q')
{
break;
}
*Pointer1 = str2int(s);
std::cout<<"Value:"<<*Pointer1<<" addr:0x"<<Pointer1<<"\n";
}
free(Pointer1);

return 0;
}

Затем я использовал это приложение в соответствии со своим сканером памяти для определения адресов указателя и адреса памяти, на который указывает указатель. Я делал это несколько раз, чтобы сопоставить приведенные ниже данные. (Вставьте, используя «|» в качестве разделителя в Excel)

pid |P Hex|P Val|PHx to Dec|M Hex|M Val|MHx To Dec
7028|002afcfc|216032|2817276|00034BE0|10|216032
6312|0032fa70|4541408|3340912|00454BE0|20|4541408
1512|0043fb1c|3242304|4455196|00317940|30|3242304
8140|0036f9fc|1997096|3602940|001E7928|30|1997096

Однако я не могу найти надежный способ подсчета того, каким адресом памяти будет указатель, какие методы / вычисления я мог бы выполнить для этого? Я знаю, что существует более похожий на жизнь пример цепочки указателей, однако это показалось хорошей отправной точкой, прежде чем сделать его сложнее.

-1

Решение

Адрес памяти любой malloc возвращается. Не существует надежного способа расчета того, что он вернет. Все зависит от того, как ваш malloc библиотека работает, какие виртуальные диапазоны адресов ей дает ОС (через sbrk или же mmap или другие) и т. д.

4

Другие решения

Вы спрашиваете, как предсказать адрес, который будет возвращен с malloc,

Это не важно

если ты мог предсказать, что будет возвращено из malloc, malloc не нужно ничего возвращать.

На практике не имеет значения, какой адрес возвращается из malloc, кроме NULL, Вызов malloc подразумевает, что вам нужно несколько байтов памяти. И Маллок даст вам это. Вы получили то, что вам нужно.

И наоборот, если бы вы могли определить, какие адреса будут возвращены из malloc, вам никогда не понадобится вызывать malloc. Вы можете просто использовать адреса, которые вы предсказали.

Проще говоря, malloc существует, потому что нетрудно предсказать, какая память может быть доступна.

0