在没有EIP-150的情况下如何避免调用栈攻击?

How to avoid call-stack attack in the case of absence of EIP-150?

在 EIP-150 之前,我们是否可以通过检查低级函数 .send()、.call()、.delegatecall() 和 .staticcall 的 return 值来避免调用堆栈攻击(), 是否为假?

例如(msg.sender是合同):

...
msg.sender.send(amount);
...

更改为:

...
if(!msg.sender.send(amount)) revert Error("Call failed!");
...

整个合同在: https://hackernoon.com/smart-contract-attacks-part-2-ponzi-games-gone-wrong-d5a8b1a98dd8

我找到了答案:不。因为,在这种攻击中,call-stack 个槽在执行到达调用合约的 return 之前就被填充了。 一种预防方法是计算被调用函数所需的预期气体量;设置调用函数的气体量。