gdzie do malloc() i free() przechowują przydzielone adresy i ich rozmiary (Linux GCC)? Czytałem, że niektóre implementacje przechowują je gdzieś przed faktyczną przydzieloną pamięcią, ale nie mogłem tego potwierdzić w moich testach.Gdzie zrobić malloc()/free() Przechowywać przydzielone rozmiary i adresy?
Tło, może ktoś ma inną wskazówkę na ten temat: Trochę eksperymentuję z analizowaniem pamięci sterty procesu, aby określić aktualną wartość ciągu w drugim procesie. Uzyskiwanie dostępu do pamięci sterty procesów i przechodzenie przez nią nie stanowi problemu. Jednak ponieważ wartość ciągu zmienia się i proces przydziela za każdym razem nową część pamięci, adres łańcucha zmienia się. Ponieważ ciąg ma ustalony format, nadal jest łatwy do znalezienia, ale po kilku zmianach stare wersje ciągu nadal znajdują się w pamięci sterty (prawdopodobnie zostały zwolnione, ale nadal nie są ponownie używane/nadpisywane), więc nie jestem w stanie powiedzieć, który ciąg jest aktualny.
Tak więc, aby nadal znaleźć bieżący, chcę sprawdzić, czy ciąg znajdujący się w pamięci jest nadal używany przez porównanie jego adresu z adresami malloc/free.
ciao, Elmar
Oprócz mojej odpowiedzi poniżej, może to pomóc trochę http://www.linuxforums.org/forum/linux-programming-scripting/52375-reading-memory-other-processes.html –
Możesz również chcieć wykopać w części pamięci dotyczącej mapowania jądra/glibc –