在函数内调用内联汇编时,如果
bytes memory data = 0x1234;
uint size = data.length;
assembly{
pop(call(gas(), addr, 0, add(data,0x20), size, 0,0))
}
这里的call调用中,指向内存0x1234的指针为什么是data+0x20 而不是data? 我在remix调试中确实看到数据存放位置是0x80+0x20, 但是这里为啥呢??
bytes memory data = **0x1234**;
uint size = data.length;
assembly{
pop(call(gas(), addr, **0**, add(data,**0x20**), mload(data), **0**,**0**))
}
因为solidity编译时,data指针指向的是内存数据块的大小,而紧接着的data+0x20指针指向的是内存数据库开始位置处
如果觉得我的回答对您有用,请随意打赏。你的支持将鼓励我继续创作!