29-2

讲一讲区块链逆向函数涉及到的接收参数的指令集

当你在逆向一个 EVM 字节码时,你会发现函数参数的传递和处理主要涉及到以下几种指令集和概念:

1. CALLDATALOADCALLDATASIZE

  • CALLDATALOAD: 这个指令用于从交易的调用数据(calldata)中加载参数。calldata 是一个只读的、外部调用的数据区域,它存储了函数选择器(Function Selector)和所有传入的参数。CALLDATALOAD 接收一个内存偏移量作为参数,然后从该偏移量处加载一个32字节(256位)的数据到栈顶
    • 逆向分析中的应用: 当你看到一个 CALLDATALOAD 指令时,你需要查看它加载的偏移量
    • 0x04 偏移量通常是第一个参数的开始。这是因为前4个字节(0x000x03)是函数选择器,用于识别要调用的函数
    • 随后的偏移量(例如 0x240x44 等)则对应后续的参数
  • CALLDATASIZE: 这个指令用于获取 calldata 的总大小。在逆向分析中,它通常用于进行边界检查,确保传入的参数数量和大小是正确的