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

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

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

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

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

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

Q
+ _3 z8 T. L  V+ I
- j* X3 r; h* k" K) k! A
有2个问题, 6 x4 [  T& X' d
1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说
' b) i: p4 S2 M; sjmp 00485ada 对应的机器码每次都不一样, , i: n+ e' }+ ]
004A2FCE ^ E9 072BFEFF jmp 00485ADA 2 q6 a: ?; P1 b
004A2FD3 ^ E9 022BFEFF jmp 00485ADA
# p$ b' L1 X8 P8 e% p004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA
. C- l) x3 z% J004A2FDD ^ E9 F82AFEFF jmp 00485ADA
0 w: [4 L' S; e0 b5 |* K5 a004A2FE2 ^ E9 F32AFEFF jmp 00485ADA / V0 C% y. L3 x% {! m6 Q  Q9 D. C
004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA
3 l3 z! F0 v, c2 l7 L我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决?
: i4 W1 q2 u; J3 e2 c2,如果我用vb向内存写这条指令应该怎样写? ! X! L7 L1 M$ [+ h& C# Y
比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢`` 1 O4 _* q: V8 E" ^2 e1 G+ i0 L
WriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&) / n: Y) r4 O3 _& @' Q
% Z8 F  ^! o+ {2 V- X$ Y9 ~
A
  `2 D5 \  \; j6 ]  S直接的jmp分3种 - h( w$ @1 s2 S# ~0 ?! P1 w3 P
Short Jump(短跳转)机器码 EB rel8
* n# ?1 s6 P5 z9 n# E只能跳转到256字节的范围内 2 p2 h( h" v3 ]* D. D/ L, b" b* C
Near Jump(近跳转)机器码 E9 rel16/32
- n0 I3 j1 f) s. l; I: J可跳至同一个段的范围内的地址 6 g& d0 ]* u7 C5 N8 j; y
Far Jump(远跳转)机器码EA ptr 16:16/32 $ J; Y( n1 m$ ^
可跳至任意地址,使用48位/32位全指针
& Q; n$ `, Z7 Q7 v" _+ t* N3 c# e: J* n/ o$ w: [; s+ A
要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同 $ M$ l5 q  T9 A$ M! R: z, w
---------------------------------------------------------------

8 k7 K7 K+ r% B0 J- C4 T下面的指令是这样计算偏移的. 9 v! ?, ~6 E+ n, V/ i
004A2FCE    ^ E9 072BFEFF  jmp    00485ADA
, m* w' \) {7 E1 Q- b( J! K. B7 Z6 w                ======== $ k# e$ z. p- Y# e
485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去 3 [# H+ M4 f5 g4 I. ~* A
掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
: O9 o) |" q9 U/ t  O/ W; q+ ?$ u4 O  f( J9 i7 M
注意颠倒顺序,高位在后,就是了.
3 G; U, ~. J" _$ ]4 a1 T# n以下同.
1 ?% X, f9 p: a' ^
/ Q; f* E7 q: M4 v5 Q9 d; i) L004A2FD3    ^ E9 022BFEFF  jmp    00485ADA
! Q9 n0 B- i+ n0 T, T
----------------------------------------------------------------
0 _2 C2 n8 M$ E, @9 n/ {有一个叫opcoder的程序,可以计算跳转对应的机器码
, P2 `& Y+ R9 S# W----------------------------------------------------------------
9 P0 F) l" y; p" X4 U+ E补充一句,因为(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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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