00462CEF: 83 C4 18 ADD ESP,18
00462D01: 83 C6 0F ADD ESI,0F
00462D3F: 83 C4 14 ADD ESP,14
00462D57: 83 C6 0F ADD ESI,0F
像上面第一行 83代表add C4代表esp 18代表18
是不是每个指令自己多有对应的二进制(十六进制)代码呀
还是怎么样呢??
00462C5D: E8 5F FF FF FF CALL 00462BC1
00462C62: 59 POP ECX
00462C63: E9 6F 01 00 00 JMP 00462DD7
像这些代码 最后一行“E9 6F 01 00 00 ”和“JMP 00462DD7” 根本不是一一对应嘛~~
好难理解哟
------解决方案--------------------------------------------------------
承蒙提示,敝人认真滴看了所谓的INTEL官方文档。但是,发现和你说的不太符合。
首先,相对短转移,用的是8位相对偏移量,这个与你所说符合;
其次,16位相对近转移,用的是相对偏移量,这个与你所说符合;
再次,32位相对近转移,用的是相对偏移量,这个与你所说符合;
第四,16位直接远转移,用的是绝对地址,你没说。如jmp 0x2000:0x5500
第五,32位直接远转移,用的是绝对地址,你也没说。如jmp 0x2000:0x6000000
第六,16位间接绝对近转移,用的是绝对地址,你也没说。如jmp cx或者jmp near [bx]
第七,32位间接绝对近转移,用的是绝对地址,你也没说。如jmp ecx或者jmp near [ecx]
第八,16或32位间接绝对远转移,用的是绝对地址,你也没说。如jmp far [5]