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

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

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

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

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

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

Q : [" j8 ?, L8 R9 g& I( N, r4 ]  g
( H, i% d! }: V0 d9 u" o0 d* \0 a
有2个问题,
/ A4 d9 X' k6 O: b' `7 K. W6 D$ Y' F1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说
# R$ ?  [0 ?$ e+ Y3 x0 ijmp 00485ada 对应的机器码每次都不一样,
' k. {3 a4 ^" F( P# g004A2FCE ^ E9 072BFEFF jmp 00485ADA % R* y2 d% R. u# X
004A2FD3 ^ E9 022BFEFF jmp 00485ADA : Q# [) L/ d: ^
004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA
/ @: ]3 ?0 `4 s6 Y. }004A2FDD ^ E9 F82AFEFF jmp 00485ADA
4 e0 D! s  l& K" o2 q004A2FE2 ^ E9 F32AFEFF jmp 00485ADA 0 ]6 ]5 e3 E3 g6 G, X8 ~0 m! X" t
004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA
6 S4 \, U; M  r% G; t0 ?9 J我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决? ( z+ w/ X9 }4 S3 u
2,如果我用vb向内存写这条指令应该怎样写? ( p# x+ _! p6 V* K% t0 Y& L
比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢``
. M  n. K# W' p8 \7 f9 m  a  aWriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&) $ A1 V7 _+ o& h; Q
; E* K: B8 V' W- u: W
A
( j. j# V: g6 O  b2 O) c2 }1 Z直接的jmp分3种
( e' U; _" W% a( G2 A) ]0 k2 fShort Jump(短跳转)机器码 EB rel8
! ^$ E) {$ u1 b  S+ V5 S只能跳转到256字节的范围内
1 L1 C, I) b+ C( O4 [8 K0 rNear Jump(近跳转)机器码 E9 rel16/32
3 u; x8 m" w, e5 i: z可跳至同一个段的范围内的地址
1 V6 t. v1 i' i% Z9 c, u+ {Far Jump(远跳转)机器码EA ptr 16:16/32
6 W4 _/ ^) w; D7 [* d; x可跳至任意地址,使用48位/32位全指针 * R' ^% Q* H" h) ]+ C
9 I* i# y# U6 p, z5 o( }
要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同 6 U) `  C: c$ S7 f# z+ y
---------------------------------------------------------------

& v: L, C% G% q+ M! X下面的指令是这样计算偏移的.
; h5 q4 {( j. @+ h9 U004A2FCE    ^ E9 072BFEFF  jmp    00485ADA
3 s) U3 K  V/ @/ \9 o! G                ======== 4 E2 R/ R0 L0 V# {, C# a  L
485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去 ! Z% z) _  r# A  V) y
掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
1 m: b: s* B5 T( ^2 {4 r" t3 Q/ \/ ^% P$ H) R
注意颠倒顺序,高位在后,就是了.   f/ y. B# B- Z+ |
以下同.
0 j- F3 j8 Q" E3 s! [
! }; E% k% d0 |2 G9 V004A2FD3    ^ E9 022BFEFF  jmp    00485ADA
+ A; C+ G- h' [  n, ~0 W
---------------------------------------------------------------- 4 }6 r1 m2 @% u/ G* a& q' v
有一个叫opcoder的程序,可以计算跳转对应的机器码 + v) ]- @* |2 x, r0 g# ^" a
---------------------------------------------------------------- 7 X7 ^/ ~8 k, }7 h4 ]
补充一句,因为(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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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