Calldata数据结构解析
Blog iconFuzzingq
May 30
在研究multicall+ERC2771造成任意地址欺骗的漏洞时发现自己对calldata的内部数据结构不太明了。因此特地研究了下,在此记录。什么是calldatacalldata是智能合约调用时按照约定规范做编码和结构化处理后的数据。client在调用合约函数时,通过abi.encodeWithSignature或abi.encodeWithSelector可以把函数选择器和参数列表打包成calldata数据。calldata中如何存储数据在calldata中,约定俗成的前4个bytes为函数选择器。函数选择器由函数原型进行keccak-256计算生成,如:bytes4 selector = bytes4(keccak256("transfer(address,uint256)")) 在函数选择器之后的就是编码过的实参。根据参数数据类型不同,在calldata的存储方式也不相同(以32字节作为一个编码单元)。 大致的存储编排方式如下:int uint address bool等类型的参数值会以16进制原样存储strings array 等类型的参数值 会以偏移量 + 长度的方式...

Most popular by Fuzzingq

Calldata数据结构解析

Calldata数据结构解析

EGD_finance Reentry

EGD_finance Reentry

Solidity Reentry

Solidity Reentry

Fuzzingq

Written by
convolutionnn

Hacker & Web3er

Subscribe

2025 Paragraph Technologies Inc

PopularTrendingPrivacyTermsHome
Search...Ctrl+K

Fuzzingq

Subscribe