我正在阅读“实用恶意软件分析”一书,并阅读了第 74 页,其中说:
lea ebx, [eax*4+4]是ebx = (eax+1)* 5whereeaxis a number的功能等价物。
由于我的理解,lea ebx, [eax*4 + 4]应该乘以eax4的值,加上4,然后将其存回ebx,这比不同(eax+1) * 5。
这是一个错字吗?还是我做错了?
我觉得应该是: ebx = (eax+1) * 4
我正在阅读“实用恶意软件分析”一书,并阅读了第 74 页,其中说:
lea ebx, [eax*4+4]是ebx = (eax+1)* 5whereeaxis a number的功能等价物。
由于我的理解,lea ebx, [eax*4 + 4]应该乘以eax4的值,加上4,然后将其存回ebx,这比不同(eax+1) * 5。
这是一个错字吗?还是我做错了?
我觉得应该是: ebx = (eax+1) * 4
这是一个错字。指令lea ebx,[eax*4+4]将设置ebx为4*eax+4或4*(eax+1)。
我相信我在网上找到了该书的修订版,其中包含:
例如,经常看到像lea ebx, [eax*5+5]这样的指令,其中eax是一个数字,而不是一个内存地址。该指令的功能等效于 ebx = (eax+1)*5, ...
所以它似乎在某个时候得到了纠正。请注意,从技术上讲,lea ebx, [eax*5+5]它实际上是作为lea ebx, [eax*4+eax+5].