关于跳转指令的理解。
大家看对不对。
所有的跳转指令都是通过位移来进行的,不管是段间还是段内跳转,它都是在当前的程序计数器上加上相应的位移然后转移到目的地址
继续执行。
所以跳转指令格式是:
指令字节 n字节位移
指令字节:
如jmp是0xE9, ja是0x77,jg是0x7F具体参考反汇编器
位移字节:
跳转的目的地址 - 跳转指令所在地址 - 跳转指令长度 = n字节位移(n=跳转指令长度-1)
因为cpu执行跳转指令时已经从内存获取了指令并增加了程序计数器,所以要减去跳转指令的指令长度,才能算出正确位移。
32位CPU中jmp指令长度为5 一字节指令 四字节位移
条件跳转指令长度一般为2 一字节指令 一字节位移
示例:
77D172C4 E9 2A4A4188 JMP 0012BCF3(Intel小尾序)
0012BCF3 - 77D172C4 - 5 = 0x 88 41 4A 2A = 0x 2A 4A 41 88(转换成Intel小尾序)
77D172FD 74 00 JE 77D172FF
77D172FF - 77D172FD - 2 = 0x00
77D17308 7F F5 JG 77D172FF
77D172FF - 77D17308 - 2 = 0xF5
[解决办法]
那是你不会找
http://developer.amd.com/documentation/guides/pages/default.aspx
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html