function_msgSender()internaloverridevirtualviewreturns(addresspayableret){if(msg.data.length >=24&&isTrustedForwarder(msg.sender)){// At this point we know that the sender is a trusted forwarder,// so we trust that the last bytes of msg.data are the verified sender address.// extract sender address from the end of msg.dataassembly{ ret :=shr(96,calldataload(sub(calldatasize(),20)))}}else{returnmsg.sender;}}
我们看到_msgSender()的实现上,并不总是返回msg.sender。在某一条件下,会返回一个奇怪的汇编代码 (通过注释也能看出,这段代码返回的是calldata中最后一个地址变量) ret := shr(96,calldataload(sub(calldatasize(),20)))