冒险解谜游戏中文网 ChinaAVG
标题:
【汉化资料】关于OD调试Jmp指令的问题
[打印本页]
作者:
shane007
时间:
2009-1-25 11:35
标题:
【汉化资料】关于OD调试Jmp指令的问题
Q
+ e! t3 V% w# j8 K
% s M# a3 u/ L# j0 J3 g9 M* f
有2个问题,
0 I' ^# ]# E( I$ N S
1.用od调试的时候,我发现jmp指令的机器码(Hex 数据)不唯一,比如说
( k7 y" S5 _8 M* E) E( I4 a5 q
jmp 00485ada 对应的机器码每次都不一样,
# b! \) y- N/ Y0 m! T# X! @0 r
004A2FCE ^ E9 072BFEFF jmp 00485ADA
, q0 E$ Q1 A, `# H
004A2FD3 ^ E9 022BFEFF jmp 00485ADA
5 h! g& k9 h$ Z- y) i; E
004A2FD8 ^ E9 FD2AFEFF jmp 00485ADA
/ D9 V( S6 W6 T$ G/ y E
004A2FDD ^ E9 F82AFEFF jmp 00485ADA
) @% A% O s" P# O' k7 z7 E7 |% P
004A2FE2 ^ E9 F32AFEFF jmp 00485ADA
% ~4 \7 y& {- r* t" d) J) b6 @2 d
004A2FE7 ^ E9 EE2AFEFF jmp 00485ADA
7 _7 E8 N+ B+ v# R# m/ U
我从数据窗口中输入相同的机器码所对应的 jmp指令跳转的地址就不是原来的地址了,请问如何解决?
$ _6 @& M: Y. Y, `! O' P) ^) ~
2,如果我用vb向内存写这条指令应该怎样写?
$ J# N/ o1 Y+ H# N& z$ o' ]6 t
比如我要向内存地址444AE2中写入机器码E9 EE2AFEFF,下面的问号部分应该怎么写?谢谢``
3 k; o' g N: R v
WriteProcessMemory(phandle, ByVal &H444AE2, ????, 4, 0&)
- ~1 G5 M8 N8 K* U" r* i
. k3 y8 ^& O2 l" ]' ^ x
A
7 E5 A& d& N6 d3 S7 I- N
直接的jmp分3种
3 }1 r3 S! Y: v! g: K
Short Jump(短跳转)机器码 EB rel8
6 z1 ` m) U6 l; k/ f! j% |6 G. F
只能跳转到256字节的范围内
# W d0 i, \* C5 M) D/ m
Near Jump(近跳转)机器码 E9 rel16/32
4 H+ h2 K+ _" o6 \0 ^
可跳至同一个段的范围内的地址
6 K) H; I0 V. S5 i" d+ n
Far Jump(远跳转)机器码EA ptr 16:16/32
( Q6 s# h2 J [/ Q
可跳至任意地址,使用48位/32位全指针
' J. a$ v: F4 c
# x7 F h# C) |7 r' d
要注意的是,短跳转和近跳转指令中包含的操作数都是相对于(E)IP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同,不仅会不同,而且应该不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同
+ n7 G( m! R& F! A4 X
---------------------------------------------------------------
$ m. P; @0 w+ W" |( O: I
下面的指令是这样计算偏移的.
. ~& c/ @; D: C- z- w& I4 l: o
004A2FCE ^ E9 072BFEFF jmp 00485ADA
$ E2 j: |+ U; C+ w5 \
========
6 j( m( G; G l7 x' L# O- g
485ADA-4A2FCE= FFFE2B0C 这里只是指向当前指令的IP处,实际计算跳转地址要去
$ u2 p/ j7 ]0 z% Y2 P. J% s
掉当前指令的长度,当前的跳转指令需要5个字节,FFFE2B0C-5=FFFE2B07
- x8 l; W5 N" a
; K; [5 n0 D$ D' s. s z }8 h$ L- `
注意颠倒顺序,高位在后,就是了.
2 H" c. D1 z0 \% ]/ z8 ]! T
以下同.
3 f! L( H, D5 `- g7 v& \8 Y
0 q# x% _- T* r+ Y) O
004A2FD3 ^ E9 022BFEFF jmp 00485ADA
+ m0 E' c$ [3 W) C
----------------------------------------------------------------
3 i# `6 L1 l( F/ w) ~
有一个叫opcoder的程序,可以计算跳转对应的机器码
. n) U9 M' J7 F* j8 d
----------------------------------------------------------------
/ H2 |4 G' @& \$ X8 s
补充一句,因为(E)IP总是指向下一条指令,所以相对偏移 = 目标 - (E)IP
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2