У меня есть функция, и назвать его:При возврате ссылочный GCC добавляет 0x30 в% EAX
Class1& Class2::get()
{
return *m_ptr;
}
Class1& c = m_class2->get();
m_ptr обычай смарт-указатель, и я могу видеть в отладчике, что m_ptr.m_p является 0, и я могу см. внутри своего оператора T *, что он действительно возвращает 0. Однако адрес c (& c) не равен NULL, это 0x30! То, что я вижу в разборке:
13059 return *m_ptr;
eaabbc7e: mov 0x8(%ebp),%eax
eaabbc81: add $0xb4,%eax
eaabbc86: mov %eax,(%esp)
eaabbc89: call 0xea9ce4c0 <operator T*>
eaabbc8e: add $0x30,%eax
13060 }
Непосредственно перед линией добавить $ 0x30,% EAX я могу видеть, что% EAX = 0, то оператор правильно возвращается NULL.
Почему линия для добавления 0x30 здесь ???
Этот вопрос связан? http://stackoverflow.com/questions/6368647/gcc-x64-stack-manipulation – trojanfoe
Ну, я не знаю, я не _that_ большой эксперт в ас. – queen3
Я не уважаю его. Это даже не мой код, но он проверяет, есть ли (& c! = NULL) и & c! = NULL. – queen3