У меня есть следующий код:
class Base {
public:
int x,y;
Base() { x=10; y=20; }
virtual void myfunction() { }
};
int main() {
Base *b = new Base();
return 0;
}
Разборка дает мне что-то вроде:
push 0Ch ; size of Base
call j_<some giberrish> ; IDA gives the comment "operator new(uint)"
add esp, 4 ; function epilogue
mov [ebp+var_E0], eax
Через несколько строк у вас вызывается конструктор.
mov ecx, [ebp+var_E0]
call j_Base__Base
mov [ebp+var_F4], eax
- Сначала я думал, что
var_E0
будет содержать указатель на экземпляр, но теперь я почти уверен, что var_F4
делает то, что содержит возвращаемое значение конструктора. - В таком случае, что вообще содержит
var_E0
?Почему он перемещен в ecx
до вызова конструктора?