use*_*948 2 x86 assembly memory-address
我试图通过用一个JMP指令替换它的开头来挂钩一个函数,这个指令应该导致我的函数.但问题是我不知道如何计算JMP偏移量来定位我的函数地址.好吧,我知道如果你在内存中向前跳转怎么做(目标地址 - 当前地址),但我没有任何想法,当你跳回内存时如何确定它.
有人可以帮忙吗?
这是您应该能够弄清楚的基本数学。:)
如果向前 JMP 为Destination - Origin,则JMP向后为Origin - Destination
用简单的数字来思考:如果你想JMP从 100 转发到 110,你的JMP结果就是110 - 100 = 10。如果你想JMP向后移动相同的量,那就是100 - 110 = -10。
只需使用负偏移量即可向后跳跃.
并记住要考虑JMP指令的大小.偏移量相对于JMP指令的结尾而不是开头.如果当前地址是您要编写的地址,JMP那么您需要一个5 + dest-current的offet,因为JMP指令的大小加上5个字节的偏移量.