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

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

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

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

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

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

Q
: Q9 v$ d7 Z5 U+ d( n; n/ r9 o7 x
  j9 ^1 e' a6 _4 q- o; r" M
有2个问题,
6 U/ H6 |3 \% ?; X9 o6 H5 F+ d1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说
+ J; k" ]- T6 y0 qjmp 00485ada 对应的机器码每次都不一样,
% W1 Y1 s8 [2 C/ f* |/ y004A2FCE ^ E9 072BFEFF jmp 00485ADA
, f6 w, I. |8 S0 e5 n5 e! t/ a7 I004A2FD3 ^ E9 022BFEFF jmp 00485ADA 3 A& R) x5 v; l
004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA # N& P5 A* z7 \
004A2FDD ^ E9 F82AFEFF jmp 00485ADA ' d" I- {; V3 a: Q
004A2FE2 ^ E9 F32AFEFF jmp 00485ADA
" |6 B/ c; W, T: S/ r4 r( h* y5 T9 Y004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA
5 u1 B6 ?8 N, x2 q  A我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决?
; k3 X- a/ p+ @* W% V2,如果我用vb向内存写这条指令应该怎样写? 7 A5 U$ E& v4 c
比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢``
$ ~6 |. J) L4 ?, z: a% h/ lWriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&)
8 F0 \/ V( _+ Z1 q1 f/ [$ l
5 {2 Y9 a! X! g; d1 w3 t% YA
  g; t' l' r* [& ^1 R. P* S: u$ s直接的jmp分3种
) _( g# h6 T0 t  g! {Short Jump(短跳转)机器码 EB rel8
/ J$ C) Q' S" W只能跳转到256字节的范围内
3 g0 M$ ]( v; L. r8 J, z  nNear Jump(近跳转)机器码 E9 rel16/32
# o; h: l! d) G  W可跳至同一个段的范围内的地址 " j4 J  `# B) f; i8 W2 D/ G
Far Jump(远跳转)机器码EA ptr 16:16/32
4 ]5 |) g. d2 g6 Q8 P可跳至任意地址,使用48位/32位全指针
2 R, W* _7 k9 y  O; n& m! T6 o0 }0 g! t- E; }5 ]
要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同   c  p& o: i3 l7 E# D& M( v! v
---------------------------------------------------------------

2 r: x; B- M  J6 |' A下面的指令是这样计算偏移的. 6 I$ Y1 L0 Y$ V  J. s1 c( }
004A2FCE    ^ E9 072BFEFF  jmp    00485ADA
3 S9 h+ k- O) d  s( _# J                ======== / _" h; b* U! j8 u
485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去
" D* V7 K6 R! ^6 `9 I掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
/ d8 k9 M/ p* a" p# Z+ k  J! F  L+ C$ r3 f
注意颠倒顺序,高位在后,就是了.
7 r$ m$ T* k- }$ |2 n, l& p! s以下同.
  d# D2 _, C% X% z( ?% X
& b+ Q& |' E( d, ~8 D004A2FD3    ^ E9 022BFEFF  jmp    00485ADA

" B: W& s2 u6 l5 R5 f) ^  q---------------------------------------------------------------- 0 C$ J# \" H) I6 c1 q. R
有一个叫opcoder的程序,可以计算跳转对应的机器码
; q* _' }2 j/ Z: m/ ~# Z  [: D---------------------------------------------------------------- - _& e& z- ^7 a1 H0 q5 v2 J
补充一句,因为(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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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