冒险解谜游戏中文网 ChinaAVG

标题: 【汉化资料】关于OD调试Jmp指令的问题 [打印本页]

作者: shane007    时间: 2009-1-25 11:35
标题: 【汉化资料】关于OD调试Jmp指令的问题
Q
- t9 s& F7 P: n! D7 G
  B% V# `0 P* X
有2个问题, - J: O# f' n) L) p' x  o' V
1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说
2 v. ^; g$ y  U4 g8 z2 sjmp 00485ada 对应的机器码每次都不一样,
( s! W$ ^2 H+ N/ t; I004A2FCE ^ E9 072BFEFF jmp 00485ADA
" m. Y8 t) a6 K1 E: A, Z; s004A2FD3 ^ E9 022BFEFF jmp 00485ADA 5 n9 D+ {: u( w5 X4 T
004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA
7 j8 k  X0 w1 ^9 O4 D* d6 k004A2FDD ^ E9 F82AFEFF jmp 00485ADA
. P# @. P* j: G: b5 H5 S004A2FE2 ^ E9 F32AFEFF jmp 00485ADA & N% P; G! F. \6 G& D* R
004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA
1 G1 w2 z% F9 Q$ V/ D我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决? # O1 x$ R0 s$ O# S  Q! @/ S0 m& F
2,如果我用vb向内存写这条指令应该怎样写?
) T! |& d0 Q- j比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢``
7 p& D+ o% s. L! L: x5 bWriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&) " D8 p/ J( Q1 _+ A7 ~( T& ]4 R6 W5 _
, [, d! E- W. k
A
- a* B- J( C2 f5 n" [9 J5 f直接的jmp分3种
9 m% `# x. U  R, D2 h7 eShort Jump(短跳转)机器码 EB rel8
/ @, S$ q& i& [! u5 T8 T; _# Q9 i* B# R只能跳转到256字节的范围内
1 s$ R' G4 ~" w0 Q% G& dNear Jump(近跳转)机器码 E9 rel16/32 0 f3 n7 x, m, f) O+ s
可跳至同一个段的范围内的地址 - ?, N4 W9 i* L2 F  ~9 k4 |
Far Jump(远跳转)机器码EA ptr 16:16/32
- p7 K/ }7 \, Z2 K5 `可跳至任意地址,使用48位/32位全指针 9 j! \- x( `8 D! J: }3 L* J

' ~* x* I0 k2 T. z* W要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同
( V% o9 u3 i7 Y+ {( N
---------------------------------------------------------------
8 b6 @0 h, y, b' c, Y8 B$ r) t
下面的指令是这样计算偏移的.
" M/ j: t) c8 |- Y8 W004A2FCE    ^ E9 072BFEFF  jmp    00485ADA
1 |: ]% W( Q9 k$ m& S                ========   J' T/ ?( f, r/ Y7 Z
485ADA-4A2FCE=  FFFE2B0C  这里只是指向当前指令的IP处,实际计算跳转地址要去 + G5 r) F) o3 P. }" u- V# e
掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
+ ]5 A/ v) A& y
( y; B  x+ a& Q0 c; d; n注意颠倒顺序,高位在后,就是了.
/ E0 _, |* l4 P; G9 ]以下同.
- G3 E5 I2 C, s5 V; v2 B, D! H, P0 h. |" {: K' d. A0 Z- C8 o) E6 H
004A2FD3    ^ E9 022BFEFF  jmp    00485ADA
4 z; ?! a* p: d0 |7 k6 S
----------------------------------------------------------------   t0 v: D& h' n1 y+ S+ Z5 s+ z
有一个叫opcoder的程序,可以计算跳转对应的机器码
' I9 [' h) `  r3 H, ]$ E----------------------------------------------------------------
/ _" I3 l" {4 k' o! l2 ~补充一句,因为(E)IP总是指向下一条指令,所以相对偏移 = 目标 - (E)IP




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2