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

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

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

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

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

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

Q
, r& ~0 g" d) F; o
8 A" E8 o6 p6 I% t1 R
有2个问题, , u) Z% y' X5 {& ~$ G
1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说 6 Q( T- y7 G+ ]9 f3 g
jmp 00485ada 对应的机器码每次都不一样,
" v# f! w% K, J! k% H004A2FCE ^ E9 072BFEFF jmp 00485ADA % \# G% B& t  @) y" J8 `: m( N  s
004A2FD3 ^ E9 022BFEFF jmp 00485ADA . Q/ R0 p- y) V8 `  e. O
004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA $ j2 V8 M! d# U  j: @
004A2FDD ^ E9 F82AFEFF jmp 00485ADA
- {2 ]$ k; q  _004A2FE2 ^ E9 F32AFEFF jmp 00485ADA
7 I5 x4 N' j7 ?; s# o7 {004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA
" l2 r5 U6 j. J我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决?
" \; b1 Y+ ^6 ~$ R4 I2,如果我用vb向内存写这条指令应该怎样写? 6 E6 V6 U, |$ {# l9 j! u3 k
比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢``
# X8 Y2 M8 v  v) N' {. |WriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&)
+ K8 T  y. d$ Y! q
! ?0 s* L4 |# ]* r7 M, j$ K  Q9 U- UA ) i$ ~5 R4 V' D& o6 S0 F/ s
直接的jmp分3种
$ j" ]! R- T4 v9 G4 XShort Jump(短跳转)机器码 EB rel8
) A3 w) s1 U& t+ }3 Y只能跳转到256字节的范围内
2 C0 L7 }: z' }3 u* DNear Jump(近跳转)机器码 E9 rel16/32
( |, h- K. W4 a* |1 b2 \可跳至同一个段的范围内的地址 # D8 _1 l) |6 W" f1 O
Far Jump(远跳转)机器码EA ptr 16:16/32
8 s& S9 ~$ X/ C7 P; V/ n可跳至任意地址,使用48位/32位全指针 1 q- v2 I7 t: E" }0 y) b5 {. G
5 [. t" \. j8 U  n, K2 X
要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同 2 N, Y7 B; p3 ~/ @6 \8 @6 ~
---------------------------------------------------------------

0 X4 y& m" F: ?7 z8 @5 q下面的指令是这样计算偏移的. & r! e7 n! S* b" w9 Y) j8 A: l3 n
004A2FCE    ^ E9 072BFEFF  jmp    00485ADA 8 G1 [% ^2 @5 \" j" Q: o
                ========
/ E- o1 w( e2 T6 ]5 ?3 V485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去
8 r1 i' E+ q  i$ c0 c1 \掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
4 F( [5 T2 p( U0 k' f" P+ W$ M" T$ x4 k) c- C4 t
注意颠倒顺序,高位在后,就是了.
; C# o8 Z% [+ h" |2 s4 h以下同. $ e- S" Y; h6 m+ P- z; p
8 ~3 B, M  \# e6 z' d$ H9 b
004A2FD3    ^ E9 022BFEFF  jmp    00485ADA
/ H7 F( M! k% r# z- ]: h
---------------------------------------------------------------- , j9 n6 y9 ]0 Y2 o
有一个叫opcoder的程序,可以计算跳转对应的机器码
) X. i1 |9 [; a# q8 X6 z- u---------------------------------------------------------------- , @9 V. g. W/ H7 ^/ ]
补充一句,因为(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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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