960050023 发表于 2012-5-28 09:59:25

关于jmp 8位位移的问题

指令jmp short s
其(IP)=(IP)+8位位移
8位位移=标号地址-jmp指令后第一位字节地址 ====>>标号地址=8位位移+jmp指令后第一位字节地址

8位位移的范围为-128-127

那么标号地址的范围为-128+jmp指令后第一位字节地址-127+jmp指令后第一位字节地址
也即标号地址的IP与jmp指令的地址之间的距离完全可以大于127
也即IP向后转移的字节可以大过127个字节
为何书9.10(王爽)中 说IP向后转移的字节不超过127个字节

Yara 发表于 2012-5-28 11:11:43

你这样理解吧,向后转移地址不是递增了吗?地址递增就相当于本来的ip再加上1个偏移量,那么因为8位能储存的范围是-128~127,所以最多只能增加到127这么大的偏移量,即向后最多能偏移127d的地址

960050023 发表于 2012-5-28 11:37:37

Yara 发表于 2012-5-28 11:11 static/image/common/back.gif
你这样理解吧,向后转移地址不是递增了吗?地址递增就相当于本来的ip再加上1个偏移量,那么因为8位能储存的 ...

还是不懂
根据公式变换得到 标号地址IP-jmp指令地址IP=jmp指令长度+8位位移
难以理解你的想法

Yara 发表于 2012-5-28 12:17:00

960050023 发表于 2012-5-28 11:37 static/image/common/back.gif
还是不懂
根据公式变换得到 标号地址IP-jmp指令地址IP=jmp指令长度+8位位移
难以理解你的想法

你懂得8位的偏移量是-128到127是吧,那么根据你变换的公式,标号地址=位移+ip地址,那么标号地址=[(-128+ip地址)到(127+ip 地址)],而标号地址在这里是一个偏移地址,而王爽老师说的ip向后转移的只是-128到127而已,没说标号地址

960050023 发表于 2012-5-28 16:27:00

Yara 发表于 2012-5-28 12:17 static/image/common/back.gif
你懂得8位的偏移量是-128到127是吧,那么根据你变换的公式,标号地址=位移+ip地址,那么标号地址=[(-128+ ...

转移的目的地址IP-jmp指令地址IP=jmp指令长度+8位位移
所以应该是向后转移的范围为-128+jmp指令长度----127+jmp指令长度

Yara 发表于 2012-5-28 18:03:48

960050023 发表于 2012-5-28 16:27 static/image/common/back.gif
转移的目的地址IP-jmp指令地址IP=jmp指令长度+8位位移
所以应该是向后转移的范围为-128+jmp指令长度---- ...

{:5_99:}首先我们不说他向前还是向后,而jmp short 标号的转移范围是ip-128到ip+127,而所谓的向前向后转移,是看你转移后(ip)大于还是小于转移前(ip)而已

960050023 发表于 2012-5-30 10:59:55

Yara 发表于 2012-5-28 18:03 static/image/common/back.gif
首先我们不说他向前还是向后,而jmp short 标号的转移范围是ip-128到ip+127,而所谓的向前向后转 ...

我看了视频后才知道原来执行指令jmp short s 前IP已经变成jmp short s 后的第一个字节的地址
不过也谢谢你的帮忙

wAterLoo 发表于 2012-5-30 15:26:48

你还是没理解2楼的意思
-128 -127 ..... 0 ,1,2,3,.....127
前                                 后
{:7_168:} 数小的为前
页: [1]
查看完整版本: 关于jmp 8位位移的问题