设为首页收藏本站官方微博

【汉化资料】关于OD调试Jmp指令的问题

[复制链接]
查看: 1580|回复: 0
打印 上一主题 下一主题

【汉化资料】关于OD调试Jmp指令的问题

跳转到指定楼层
楼主
发表于 2009-1-25 11:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

【汉化资料】关于OD调试Jmp指令的问题

Q
% k! n  Q9 a7 s) F- ]8 p$ K. \
) p. J5 Z) F/ U9 c. O
有2个问题,
) G: p& L6 T( v& y8 Z, G1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说
' H0 }; K1 t" ^4 jjmp 00485ada 对应的机器码每次都不一样,
7 G( M) E2 |5 n- p" m3 k& Z004A2FCE ^ E9 072BFEFF jmp 00485ADA
6 T& H; G" L1 r" r- S; I: p2 n004A2FD3 ^ E9 022BFEFF jmp 00485ADA
, t9 `, Z' o" e$ C7 t004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA
# a$ y+ M5 H3 i% w* q' A004A2FDD ^ E9 F82AFEFF jmp 00485ADA % y+ R9 o& \; w6 D! O
004A2FE2 ^ E9 F32AFEFF jmp 00485ADA
' J/ Q+ w$ r: N' ?004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA
4 w& [, f- v$ w, ]! t我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决? * V* X5 k* I- v; X
2,如果我用vb向内存写这条指令应该怎样写?
' r9 [. \& y- C$ N6 i5 l比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢``
$ L, d7 I8 U1 PWriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&) % S  L. ?. H& J
) H: v9 w5 ]( t1 r. Z0 ]
A 4 C8 j6 s3 n6 s  Z2 t, u' l2 `
直接的jmp分3种 & c9 i& G2 P7 L$ G0 U) p
Short Jump(短跳转)机器码 EB rel8 $ D3 g9 Y' u6 g6 P3 v: H, |3 I$ \
只能跳转到256字节的范围内 3 S8 g# p4 w- X* _5 X( w5 b( P
Near Jump(近跳转)机器码 E9 rel16/32
$ B/ U8 H  S9 e" g! D% Z5 e可跳至同一个段的范围内的地址
  S$ y0 R' K* h# x! p$ Y% OFar Jump(远跳转)机器码EA ptr 16:16/32 ; [8 {. A$ A, E+ L4 H
可跳至任意地址,使用48位/32位全指针
4 |; K: q2 D* W0 U3 b* F2 e& u
" Z5 Y$ t/ R& K% b$ ~2 {* I, Z5 x$ Y要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同 : ^7 Z* b, M4 v  d) A" |2 h4 w6 h
---------------------------------------------------------------

  t+ Z* z6 s; R+ A9 R+ b下面的指令是这样计算偏移的.
6 @+ R$ r6 I' b6 i# i7 m004A2FCE    ^ E9 072BFEFF  jmp    00485ADA ) w5 n. M) s2 u1 b3 _
                ========
; {% i( ^) S9 ?1 r' p, E0 Z& i485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去 $ n' ]* ]! f2 e, h! o: U
掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
. X4 Q+ F& \& g, K) h
0 Y5 e1 n9 R+ D5 c: J' z注意颠倒顺序,高位在后,就是了. # H; k4 N, s8 v- p+ |
以下同.
$ l! y3 X2 Z; s3 M0 h* p; _3 O" {. E" V/ k8 p; \. C# T
004A2FD3    ^ E9 022BFEFF  jmp    00485ADA
& _, p* ?, \4 C$ V1 S# b9 x% G6 }
---------------------------------------------------------------- 6 h, S8 m$ q0 g6 H; c" `
有一个叫opcoder的程序,可以计算跳转对应的机器码
" l- s% i- Q7 P5 z! n( @2 R----------------------------------------------------------------
) N' [3 M' L6 W" W( d补充一句,因为(E)IP总是指向下一条指令,所以相对偏移 = 目标 - (E)IP
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表