Если у объекта нет указателя на его "родительский объект" или вы явно не отслеживаете его самостоятельно, я не верю, что есть способ решить эту проблему. Вы действительно должны проследить через память, чтобы найти то, что в основном составляет «кто указывает на меня». По сути, это та же проблема, что и при поиске предыдущего узла в односвязном списке - вы должны начинать с начала и останавливаться при достижении узла, который указывает на интересующий узел.
Проблема с попыткой отследить foo
от адреса до bar
состоит в том, что foo.bar
- это указатель, который содержит адрес объекта, и только foo
называет его "bar". Для простоты представьте, что foo
находится по адресу 0x1000, а foo.bar
находится по адресу 0x1008 и указывает на другой объект в 0x2000. Теперь, если у вас есть адрес 0x2000, нет простого способа узнать, что 0x1008 указывает на него.
Еще сложнее, если вы представите, что N других адресов также могут указывать на 0x2000, поэтому даже если бы вы сканировали память, вы не знали бы, принадлежал ли указатель объекту, структуре, локальной переменной или даже просто случайный шаблон, который совпадает с адресом, который вы ищете.