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

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

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

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

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

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

Q - s  {$ g2 U" g  y: H" j# B

+ n/ {* {$ u; s有2个问题,
) Y- p( R  ~, ^1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说
6 v7 i  p+ H3 h8 e" ?. P$ G. |& Zjmp 00485ada 对应的机器码每次都不一样,
; l$ W6 [7 T, a5 y' M$ n004A2FCE ^ E9 072BFEFF jmp 00485ADA 8 N$ z6 x  O; H7 v
004A2FD3 ^ E9 022BFEFF jmp 00485ADA
8 Q2 e7 E9 H5 |3 s& A: S1 c* M004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA
9 ^$ I: \- r6 b  X! R$ v004A2FDD ^ E9 F82AFEFF jmp 00485ADA
) a, d# |( v7 Z! E+ [  g4 Z6 Y1 i004A2FE2 ^ E9 F32AFEFF jmp 00485ADA $ f1 I5 ~: `" G& c! B9 Y- f/ r- o
004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA ) K; Q8 l" a  F, E9 ^6 A* y
我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决?
* @* s/ b% M- Q6 R2,如果我用vb向内存写这条指令应该怎样写?
4 J) U' D" Q, ]5 r比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢``
" H  X& _" f% U  ^1 m' {WriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&)
" ]; a" w& r) Q) }" \2 w/ T5 Y1 e; Q( s  U/ F
A
. _6 w3 I8 Y& g# u直接的jmp分3种 6 p; Q& i( v% q! w! l1 M0 W, a
Short Jump(短跳转)机器码 EB rel8
  x) r4 {9 E  K7 t% F只能跳转到256字节的范围内
  Z3 Q" F1 Y& s2 y+ fNear Jump(近跳转)机器码 E9 rel16/32 ) k8 P& L0 a" J8 b0 \: F$ h' Z
可跳至同一个段的范围内的地址 * K  j" @- Z8 O( G7 @8 g; |2 ]
Far Jump(远跳转)机器码EA ptr 16:16/32
, g6 T: r+ ~8 o- a可跳至任意地址,使用48位/32位全指针 4 _# w% S2 a2 j6 J" c* a

+ l9 \6 d9 w; q+ J9 \2 G, o1 d0 m要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同
1 G# Z- N% ?9 V# B% ^4 b
---------------------------------------------------------------

- k* [; R) h$ g4 \4 N* v6 K下面的指令是这样计算偏移的. : [4 c* U& X7 G" z
004A2FCE    ^ E9 072BFEFF  jmp    00485ADA - z. O! c4 v3 s+ c  B
                ======== * d+ Q. C, g4 A) K+ n" x; s7 c
485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去 % E; R+ D# W2 ?: S1 R# f
掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
  `! b, o3 D. s4 U! u9 E6 w# t2 R7 }2 a
注意颠倒顺序,高位在后,就是了.
3 @6 E; I/ b) M* I- E以下同.
+ d; a3 y3 A7 a# K% c# n6 @% @9 Q4 y3 x. X1 i6 W
004A2FD3    ^ E9 022BFEFF  jmp    00485ADA

3 ?- F$ c% {& p4 S2 ]---------------------------------------------------------------- 8 P1 w2 P2 n) C$ t: B4 o: p' p3 E
有一个叫opcoder的程序,可以计算跳转对应的机器码
4 e% Q% }, s9 t8 }: R5 h---------------------------------------------------------------- 0 ~7 i( P$ {  \. n
补充一句,因为(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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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