SaKuLa 发表于 2016-9-15 15:40

jmp和jnz跳转机器码计算方式求解

这个两个是我玩DNF碰上的两个crc




088DB970^\0F85 2CB6FFFF   jnz 088D6FA2第一
088D6FA2    8BF0            mov esi,eax
088D6FA4    C1E1 0B         shl ecx,0xB
088D6FA7    C1EE 05         shr esi,0x5
088D6FAA    33CE            xor ecx,esi
088D6FAC    0FB632          movzx esi,byte ptr ds:
088D6FAF    33CE            xor ecx,esi
088D6FB1    F7D1            not ecx




088DB976^\E9 CDC1FFFF   jmp 088D7B48第二
088D7B48    8BF0            mov esi,eax                              ; 这里
088D7B4A    C1E1 07         shl ecx,0x7
088D7B4D    C1EE 03         shr esi,0x3
088D7B50    33CE            xor ecx,esi
088D7B52    0FB632          movzx esi,byte ptr ds:
088D7B55    33CE            xor ecx,esi



第一个   088DB970      0F 85 2C B6 FFFF   转到了088D6FA2这个地址   2C B6 FF FF这个是相关的机器码


第二个 088DB976E9 CD C1 FF FF    转到了088D7B48地址   CD C1 FF FF 相关机器码






那么问题来了 我不看汇编光看机器码应该怎么计算出 他跳转的位置?????


   在线求等大神赐教 过程求详细点。


SaKuLa 发表于 2016-9-15 23:51

不用了 我自己百度找到方法了

00401000 >- E9 FBF3FFFF   jmp 某逆向.00400400


E9 FB F3 FF FF   

FB F3 FF FF就是这个了
计算器00401000+FFFFF3FB+5=100400400
汇编中只是取00400400 八位
一个jmp就是5字节+上5字节就是的了

SaKuLa 发表于 2016-9-15 23:55

00401005      B9 00104000                   mov ecx,00401000
0040100A      81C1 FBF3FFFF               add ecx,-0xC05
00401010      83C1 05                     add ecx,0x5

ecx=00400400

(小风) 发表于 2016-9-16 07:08

支持…谢谢了

Icc 发表于 2016-9-17 10:57

jmp远跳转指令偏移 = 要跳转的地址 - 当前地址 - 5(0xe9 0x00 0x00 0x00 0x00)
jcc远跳转指令偏移 = 要跳转的地址 - 当前地址 - 6(0x0f 0x?? 0x00 0x00 0x00 0x00)

破匣求禅 发表于 2016-9-17 11:04

佩服楼主,自学研究的精神很强
页: [1]
查看完整版本: jmp和jnz跳转机器码计算方式求解