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

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

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

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

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

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

Q , N8 v8 `0 v7 h/ F

/ t6 {$ N8 Y+ L8 W  ?有2个问题, ( M# E( y4 D: Q" z* S
1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说
0 m$ u9 F4 X/ Q: G% j# n# m/ cjmp 00485ada 对应的机器码每次都不一样,
2 S0 j) Y7 F% X( w1 P. w, D004A2FCE ^ E9 072BFEFF jmp 00485ADA
9 E9 [7 k0 |+ {1 M) v# `8 d004A2FD3 ^ E9 022BFEFF jmp 00485ADA ) d8 i4 J0 U- H6 E' X: U  o
004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA
1 K2 i8 S; g* z1 U6 Q  i/ y004A2FDD ^ E9 F82AFEFF jmp 00485ADA
* K- r% @1 [( _, D+ G6 z# h004A2FE2 ^ E9 F32AFEFF jmp 00485ADA & M  U5 u0 I5 }) x/ a  Y
004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA 6 j! \+ o2 s* m# w. [) `2 `: r
我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决? ( h. y% G, H" }  Y9 R( U
2,如果我用vb向内存写这条指令应该怎样写? ! [3 M" ^8 \0 w4 D
比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢``
7 u6 U$ ]# B: u: p9 ~WriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&)
6 w. R& p# g& A! d  [6 ^4 H" Y2 s. N" y+ G: I5 Y  B
A ! ]0 F! a2 u* p
直接的jmp分3种
' @' B3 R6 W. U: X3 {: gShort Jump(短跳转)机器码 EB rel8 5 W* V9 ~' M2 F
只能跳转到256字节的范围内
8 z# C& G3 r8 e) INear Jump(近跳转)机器码 E9 rel16/32
8 @' Y6 ?. Z8 N: I  W, u可跳至同一个段的范围内的地址 3 V+ [7 D/ E) M4 x5 D% j2 d# Y
Far Jump(远跳转)机器码EA ptr 16:16/32
$ h$ o! |6 `; `9 Q可跳至任意地址,使用48位/32位全指针
8 |' |+ D9 c# {! `! o, J( P
/ u6 D0 Q2 F7 X% j( V要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同 , v. Y, |/ ]- W1 M8 M6 N; z( }
---------------------------------------------------------------

0 i6 S; Z  N; b, f7 H) C下面的指令是这样计算偏移的. ) P" l% M) ~' p- {; k
004A2FCE    ^ E9 072BFEFF  jmp    00485ADA 8 G8 c- j3 J; t
                ========
. G8 S5 j3 g" T& B- z/ f485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去
5 t2 F! R  k7 N" Q. A8 o掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07 0 e) A/ S4 [6 l, o
+ I0 B" K' m* A8 B
注意颠倒顺序,高位在后,就是了.
: Y5 \1 g" c/ W以下同. - `7 Z8 h) W) M

8 O( P) l: P7 S* x2 P004A2FD3    ^ E9 022BFEFF  jmp    00485ADA
7 G$ P+ I. ]: V7 f/ Y- J1 a) l
----------------------------------------------------------------
9 p( Y9 ?1 [) k# t+ p# z1 s; B; a有一个叫opcoder的程序,可以计算跳转对应的机器码 7 A  n0 H- Q( `4 @# {* i
---------------------------------------------------------------- : n+ i+ N! p6 l
补充一句,因为(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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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