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

汉化任务 【汉化与汇编】单字节内核模拟程序(深绿请进)

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

[汉化任务] 【汉化与汇编】单字节内核模拟程序(深绿请进)

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

【汉化与汇编】单字节内核模拟程序(深绿请进)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2009-10-10 19:10 | 只看该作者
我稍微改了一下程序,包里面有个input.txt和output.txt
$ W* i( S$ v$ f+ K先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
# R$ y4 [9 K, H$ |) [( w  p" W/ c( @- Y% @* e! [
但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-10-10 21:47 | 只看该作者
引用第1楼深绿于2009-10-10 19:10发表的  :" O% h; ^: \* p1 p
我稍微改了一下程序,包里面有个input.txt和output.txt8 {' p$ D; c( G
先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
! n8 q- D% u0 M( e# `+ a, t; P# y$ X& n, b8 B* a2 T/ F9 G8 I9 A
但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

' o  U/ J$ D# p3 }是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。
; D( Y8 R7 D, Z' ]# S1 E! g这就模拟了汉化了文本以后,中文字符被过滤的情况。
( O; q. `9 Q% V/ ^; Y& W4 ^+ s4 g, x/ {  O( k
接下去就可以在汇编级用OD载入,开展研究了。
0 I, B# H* D/ B. h9 i* k想办法把和0x80比较的地方去掉就行了。
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2009-10-10 21:51 | 只看该作者
看了代码,应该把ch<=128 改为 ch<128 吧?
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2009-10-10 22:02 | 只看该作者
由于这个程序很短,OD里面的汇编代码也很短。 ) X$ M! v" n' U  d. t* e
请看红色的部分,这就是和0x80比较的部分。
  ]. J+ ]3 k" Y1 q, x' d; U/ z( S把这2句NOP掉,然后保存修改后的文件为exe。
# J  X! e: u1 [  L. I我们发现input.txt里面的所有内容都能被输出了。 ; j' G/ ]2 q8 b6 h; {- e
附上修改后的exe.
- A" O2 s1 N( [) [; Q深绿,你可以把这个操作过程试一下,练习一下. # L  d+ C- E0 u. V

1 O7 k0 @: u7 F. ^0 `% }00401000  /$  55            push    ebp * \2 g  ~1 F: F) U7 N
00401001  |.  89E5          mov    ebp, esp
  ~, W' j5 {7 p: @00401003  |.  83EC 18      sub    esp, 18
* E8 F/ f1 T6 F00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0
% b$ R% g) I' c3 v2 a0040100D  |.  83C4 F4      add    esp, -0C 0 W7 P) o# Y* G% A& y5 C; F" E
00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4] ' I: ~5 V2 s; Q* c) d" C9 w/ a4 n
00401013  |.  50            push    eax ! w; p( ]* W6 L* @0 \/ O9 k3 l
00401014  |.  FF35 08204000 push    dword ptr [402008] ' _) O- M! C! Y: c
0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8] , A8 {- E9 p. \0 q
0040101D  |.  50            push    eax 5 o" c- z0 b/ d" l7 Q  a: m
0040101E  |.  68 04204000  push    00402004
7 l% P6 ~; Z3 J9 H- G5 _00401023  |.  68 00204000  push    00402000 * k1 k$ ^+ j0 o& I
00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs> 8 e- A6 k+ ]' t0 u
0040102D  |.  C9            leave 6 n2 z. R- d' d3 `; o- k
0040102E  \\.  C3            retn 4 e, t+ K7 G" ]' }. k+ q
0040102F      90            nop 5 @9 j; [% B: U6 D# ~9 w
00401030  /$  55            push    ebp
: Q3 E6 L. ]4 }" w00401031  |.  89E5          mov    ebp, esp
8 m1 g' Y! R: |* ~& ?+ D5 ^% F00401033  |.  83EC 08      sub    esp, 8
& K! C3 l0 `4 }5 D1 }) [00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C]
! ?# R' {2 t4 M1 g0040103C  |.  85D2          test    edx, edx
' q4 A( ~2 _- B9 X. k: o0040103E  |.  74 7B        je      short 004010BB
4 S! k" o$ h: J1 i00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>> 4 z3 @# \9 v: S" K2 F
00401045  |.  8910          mov    dword ptr [eax], edx
# l- t  f( P8 D$ I  ~2 A00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
; x" E# H2 L- D/ m' l, `5 }  b0040104C  |.  85C0          test    eax, eax 0 @; z% ~! k' c; P0 b
0040104E  |.  74 1E        je      short 0040106E
* E% x0 R% }; n' c9 a* w$ P00401050  |.  83C4 F8      add    esp, -8 $ ~* {& Q% R: Z: H7 x7 d
00401053  |.  FF35 0C204000 push    dword ptr [40200C]
) m6 ~4 e* V3 D5 J$ [1 Y00401059  |.  83C4 F4      add    esp, -0C
7 w  f' G* N, _9 R/ O  B# t* u0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob ' ^# q2 i3 {$ J3 P8 I* u& q
0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
" ?' d  {* ?/ B/ d2 a5 h00401062  |.  83C4 10      add    esp, 10
: ~8 q* a6 o' [9 F* Q$ J$ W00401065  |.  50            push    eax                              ; |handle
- @4 I, Z" f6 O1 N1 G; q1 ]4 T/ C00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode 8 u2 M0 N2 E- e: m2 D/ J& `* I6 z
0040106B  |.  83C4 10      add    esp, 10
! ^/ u- j1 |2 u, Q6 {/ e0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
& Y; g' _& ~9 d/ W  A00401073  |.  83C0 20      add    eax, 20 5 d4 [9 f; y0 F# i! t$ f  K; ~
00401076  |.  74 1E        je      short 00401096 8 m8 T8 m4 y( _4 _( v1 ^6 i
00401078  |.  83C4 F8      add    esp, -8
) j- o# s: }2 s' h4 a0040107B  |.  FF35 0C204000 push    dword ptr [40200C]
3 H) y7 m; W1 j3 Q9 L00401081  |.  83C4 F4      add    esp, -0C 8 O/ q+ `7 \- p# Z, G: P; s+ ~8 j- @
00401084  |.  50            push    eax                              ; /pstream 4 o  L, j6 c6 T8 ?* w2 r$ s
00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
0 D) l# ^  v, p3 B. `' C! M! ^4 j" @4 o0040108A  |.  83C4 10      add    esp, 10
4 i7 Y7 Z; `% o7 P, n0040108D  |.  50            push    eax                              ; |handle
, L- e3 p; W) i5 J* s5 n' p0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode 9 B8 d  X: ]! E2 \" r$ n! F
00401093  |.  83C4 10      add    esp, 10 : S5 N+ X' j6 D0 H5 t; T9 h
00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] 0 S& @; h/ ^1 x( G) \! v, A
0040109B  |.  83C0 40      add    eax, 40
2 F+ ^: {' j6 n/ z$ F" Y0040109E  |.  74 1B        je      short 004010BB   w- a. w9 {3 E9 z
004010A0  |.  83C4 F8      add    esp, -8 : l7 @. S! O, `- I
004010A3  |.  FF35 0C204000 push    dword ptr [40200C] - t9 V$ ^2 g  z0 p
004010A9  |.  83C4 F4      add    esp, -0C
+ \, L$ n1 @7 X+ n- v3 M8 }) l004010AC  |.  50            push    eax                              ; /pstream
# X2 U; H! F* }; |( O2 }* H! B4 g004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno " Y$ h: J1 A1 i; e& E" }3 q
004010B2  |.  83C4 10      add    esp, 10
- N2 ?/ U) R2 \  |& d% W% ]004010B5  |.  50            push    eax                              ; |handle $ D/ U6 _1 i/ i$ i
004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
4 Y) d+ I, C9 H7 Y% @004010BB  |>  C9            leave , ~7 i, Y$ Y' A8 X9 c; g4 u7 C
004010BC  \\.  C3            retn : e" y* N& C5 X3 Y# r( [9 z
004010BD      8D76 00      lea    esi, dword ptr [esi]
4 \& e! F" g0 Y9 i( w+ X- v004010C0  /.  55            push    ebp
  ]1 Y( \5 X" M5 e9 x004010C1  |.  89E5          mov    ebp, esp
8 d9 D3 \4 h" B004010C3  |.  83EC 10      sub    esp, 10
  a& j9 F* o% e004010C6  |.  56            push    esi   O' f/ i/ r! ~; ?1 n
004010C7  |.  53            push    ebx   u) r3 M* v* j# }" w
004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8] 7 S& J. X0 W5 R8 R
004010CB  |.  31DB          xor    ebx, ebx 3 x# `- s0 V: o& |
004010CD  |.  31F6          xor    esi, esi
7 g  U2 F# a) L004010CF  |.  8B00          mov    eax, dword ptr [eax] ) X; R7 [* i' ~7 n$ N1 v$ c8 I
004010D1  |.  8B00          mov    eax, dword ptr [eax]
* k  y  T. E0 b) B, s$ x# D5 q8 a/ w, ?004010D3  |.  3D 910000C0  cmp    eax, C0000091 0 {! |5 e1 p; I& V% ?5 f. q
004010D8  |.  77 16        ja      short 004010F0 ' `9 D) ]7 F* x4 G" A0 T
004010DA  |.  3D 8D0000C0  cmp    eax, C000008D
; e! i" q( }, |: _4 u/ l004010DF  |.  73 4F        jnb    short 00401130
$ U( K, b" c. |004010E1  |.  3D 050000C0  cmp    eax, C0000005
) J4 x- }" s. o004010E6  |.  74 18        je      short 00401100 3 Q5 a! I: ~9 {! I' R; Q
004010E8  |.  E9 86000000  jmp    00401173
5 `" M2 ?# H  ]004010ED  |  8D76 00      lea    esi, dword ptr [esi]
2 n( A" f3 H6 t6 W3 V1 T. F9 h  m004010F0  |>  3D 930000C0  cmp    eax, C0000093 6 m  s3 K! X' n! p$ x6 G
004010F5  |.  74 39        je      short 00401130
* t; m# p2 v/ U" ~4 [! c004010F7  |.  3D 940000C0  cmp    eax, C0000094 + ^- {; ]% E) ~/ c
004010FC  |.  74 37        je      short 00401135
; D9 B% M/ _+ W004010FE  |.  EB 73        jmp    short 00401173 ( ^, F# ?6 a( S) A
00401100  |>  83C4 F8      add    esp, -8
8 N: k  M9 }# \/ c4 [: d00401103  |.  6A 00        push    0                                ; /func = NULL
8 A) U- y" a2 ^/ [& v; y00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV
, A; ~( \  X; b7 V00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal
) ~. l# g4 ^4 S9 ~' \0040110C  |.  83C4 10      add    esp, 10 & {6 f; v# }5 a( t$ @
0040110F  |.  83F8 01      cmp    eax, 1 2 R5 p$ X" c8 M" F
00401112  |.  75 0E        jnz    short 00401122
6 O7 z0 S# ^: c' p00401114  |.  83C4 F8      add    esp, -8 ' t4 s8 K* P( m2 D; D1 h0 R
00401117  |.  6A 01        push    1                                ; /func = 00000001 8 B/ n: i* |% N
00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV 8 {$ y, j0 G( q
0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal
' _% E+ `' u; y! p8 c7 j, N00401120  |.  EB 4C        jmp    short 0040116E 6 p, U- L6 _7 d* D5 p1 q1 Q
00401122  |>  85C0          test    eax, eax - n+ t( P  G9 K! q' s# G1 f
00401124  |.  74 4D        je      short 00401173
  w- m" x) J! L00401126  |.  83C4 F4      add    esp, -0C 4 ?) w: r, r/ q  Q7 ^, z7 E8 u
00401129  |.  6A 0B        push    0B
' g, `% j5 M8 f2 R8 `5 Q0040112B  |.  EB 3F        jmp    short 0040116C 6 M  y% E7 m% \6 x0 }' d
0040112D  |  8D76 00      lea    esi, dword ptr [esi]
* d, X% m6 u* y0 j6 `, x5 ?00401130  |>  BE 01000000  mov    esi, 1
" a+ @1 M4 @: {3 q0 _00401135  |>  83C4 F8      add    esp, -8 / N# J% r! ]* R+ N  @- |" \1 ^1 X: [
00401138  |.  6A 00        push    0                                ; /func = NULL
7 e: d0 `% y+ Q9 G0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE
! Y0 W5 \' G4 D% T- ]0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal
' x) l% ^8 F+ i: Z00401141  |.  83C4 10      add    esp, 10
, Z0 D9 \% V4 i! J' ~00401144  |.  83F8 01      cmp    eax, 1 8 R1 x; G  a- M& d
00401147  |.  75 1A        jnz    short 00401163
8 W$ R3 p/ w4 z6 u+ S! k00401149  |.  83C4 F8      add    esp, -8 ; ?& T  T0 X7 x7 r5 _  k4 y
0040114C  |.  6A 01        push    1                                ; /func = 00000001
* u" j% d0 s) N( e6 m0 l0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE
, H( C6 p" m& _' d# ?6 Z4 h00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal " ?: [, f- h# `4 E
00401155  |.  83C4 10      add    esp, 10 0 ~) a# o) L/ B& j* t3 y
00401158  |.  85F6          test    esi, esi
" `$ B2 F/ r" F7 t7 `- @0040115A  |.  74 12        je      short 0040116E " Y" S! W; s% y& K9 p# p# [1 U
0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset
4 X0 K1 l. T( c' i00401161  |.  EB 0B        jmp    short 0040116E 1 q$ l) e) q( {( D& U# i
00401163  |>  85C0          test    eax, eax
. x# _2 D- b$ U1 m; G00401165  |.  74 0C        je      short 00401173 6 o; D( |( Z: n  w* e- i- R( g/ ?
00401167  |.  83C4 F4      add    esp, -0C
; i/ V1 ~. \! ]. Y3 |0040116A  |.  6A 08        push    8 7 a& B% u+ w+ K4 g
0040116C  |>  FFD0          call    eax 8 i# C: D  w- k4 e; }8 R5 V1 o
0040116E  |>  BB FFFFFFFF  mov    ebx, -1 0 t/ @; W+ v; v3 Q) s1 n
00401173  |>  89D8          mov    eax, ebx ! J  x1 D( P( k, s1 L
00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18]
" U3 r2 ?$ r* h1 u5 V  d00401178  |.  5B            pop    ebx
# G8 B6 Q% q+ r1 T+ W  S; m  H0 a00401179  |.  5E            pop    esi
) C: H( ?- S6 ^2 M0040117A  |.  C9            leave
% v- x( x/ q8 n$ Q4 r6 v0040117B  \\.  C2 0400      retn    4
  p: k+ S! `4 d, l0 \. d4 m  g0040117E      89F6          mov    esi, esi - x- I" f- u; F4 }; u
00401180  /$  55            push    ebp
) k% i# f. B0 F0 w/ G7 r+ Z00401181  |.  89E5          mov    ebp, esp & N" U: `6 h5 S  e
00401183  |.  83EC 14      sub    esp, 14 9 I1 I" o7 a! B% p5 r
00401186  |.  53            push    ebx ! O  d* V; i0 G! @; z2 V
00401187  |.  83C4 F4      add    esp, -0C
& X) l, r1 Q* U0 u7 z! t1 J+ r" q0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0
1 G. z) D7 v$ A- L! K1 g0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter 5 j) U8 C; ?& l4 a% Q
00401194  |.  83C4 FC      add    esp, -4 4 h4 |' s" a7 A4 h& Q- @* w6 s
00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset
" m! h& d9 N, Y7 k0040119C  |.  E8 5FFEFFFF  call    00401000 ! \; y+ X2 }' p, ?; h! G
004011A1  |.  E8 8AFEFFFF  call    00401030 ; Z" b9 l$ o* q: U- Y9 B
004011A6  |.  83C4 FC      add    esp, -4
7 g# h) x/ x7 [" U2 X2 m004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ> + ?  r! m2 K+ m
004011AE  |.  FF30          push    dword ptr [eax]
% q# ^) |1 E3 i$ G/ i004011B0  |.  FF35 04204000 push    dword ptr [402004]
3 d- X. a# G4 f! R004011B6  |.  FF35 00204000 push    dword ptr [402000] 7 a- n5 `( r$ E7 ^- e* w0 p
004011BC  |.  E8 AB000000  call    0040126C % \- v8 y( [& w( w7 Y+ R
004011C1  |.  89C3          mov    ebx, eax
( j3 R3 N3 e, U9 W9 K004011C3  |.  83C4 20      add    esp, 20 " n2 P( N/ ]7 A; s+ V
004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit ) h- j2 w9 t; L1 s& l( n4 l
004011CB  |.  83C4 F4      add    esp, -0C ! ^# K7 k+ s0 ^* f# ]9 Q; s7 v
004011CE  |.  53            push    ebx                              ; /ExitCode
0 E0 n+ R: b& L4 w- \4 Q, _& F004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess
( x+ K. r( u& V  ?7 e; v9 k004011D4 >/$  55            push    ebp & ^3 ]+ {7 @2 u: W: L5 ^
004011D5  |.  89E5          mov    ebp, esp * _+ [' B7 P& C& ~7 I" j
004011D7  |.  83EC 08      sub    esp, 8
8 h2 R- l* ~( m1 x# \' s004011DA  |.  83C4 F4      add    esp, -0C
7 ?( T. G, m+ P) \+ x004011DD  |.  6A 01        push    1
, g+ D+ G3 k+ S  ^004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> ' s% S3 _$ g3 Z. M0 i# Q
004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> 0 X+ {3 Q! u0 ^- Q5 a4 V
004011E6  |.  E8 95FFFFFF  call    00401180
% ?& }, T/ Q6 ?# p' v7 ^004011EB  |.  31C0          xor    eax, eax
. x; e1 o6 J0 R- W) f' H6 W- Q004011ED  |.  C9            leave
% e/ L* Y) h1 a& n  n004011EE  \\.  C3            retn
+ v  g. e( P0 W7 X. k' K004011EF      90            nop
2 V2 D+ B  z2 q! D. u9 Y004011F0  /.  55            push    ebp
) K$ X# |( ~; f5 ~004011F1  |.  89E5          mov    ebp, esp
; F" F1 o2 e) S8 @) e6 y- W. L9 E% e3 Q004011F3  |.  83EC 08      sub    esp, 8
6 H$ r! n+ w0 g' r( {$ D004011F6  |.  83C4 F4      add    esp, -0C
+ u' G& L4 W0 w9 ?0 V# d004011F9  |.  6A 02        push    2 ! D: Q. n0 q4 R# r: t1 _" {, h
004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
+ D1 ]2 N1 d: U5 k00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> " d  E. P* `+ q6 _8 ]
00401202  |.  E8 79FFFFFF  call    00401180 7 F+ t5 G" y& N1 D+ w
00401207  |.  C9            leave
- S/ J, I+ i* Q. n  W& }00401208  \\.  C3            retn
( T. q/ ~6 j- ?8 N00401209      00            db      00
% ?. f7 O7 T! U. U5 a- }( z0040120A      00            db      00 9 D( M4 H% t5 }1 F! ?/ I* H
0040120B      00            db      00 $ @2 u$ C9 [: i2 Y! r9 r
0040120C      00            db      00   \1 R- H) N, E0 c* E
0040120D      00            db      00
( f% w) q6 Y- `) m* K6 o0 a# x: B0040120E      00            db      00 9 A9 M4 C3 c5 ~; l7 O( s8 J4 U9 t5 q
0040120F      00            db      00 ( \/ Q8 P7 Z% g9 o! h9 E6 R: A
00401210      72            db      72                              ;  CHAR 'r' # T, B2 X. e: q1 [" |
00401211      00            db      00
! J! d- f5 d4 f3 f1 [2 i, K8 {00401212  .  69 6E 70 75 7>ascii  "input.txt",0 2 W5 ?  `- F4 J0 E; Q5 b% G# h3 O
0040121C  .  43 61 6E 27 7>ascii  "Can't Find input"
/ K; {0 }: d  }0040122C  .  2E 74 78 74 2>ascii  ".txt!",0 / @# S1 `8 b+ e9 P0 v; n1 g, m9 o
00401232      77            db      77                              ;  CHAR 'w'
& y$ J% z, [, D8 I& C- q$ s00401233      00            db      00
/ E7 r! A! f+ {- l00401234  .  6F 75 74 70 7>ascii  "output.txt",0 8 ]5 F, ^, Q: v/ l' {% o5 |$ O$ O
0040123F  .  43 61 6E 27 7>ascii  "Can't Create out"
6 c+ B/ X( b' v( y+ B  K, K) i0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0
! f6 j) `2 O* ^00401258  .  6F 6E 65 20 6>ascii  "one char outpute"
; p$ g) m7 H0 d9 A00401268  .  64 0A 00      ascii  "d
/ \; g  A. d# d' U" M: n" B. ]",0 ( M: `5 y( v7 G) }& S7 P( _
0040126B      90            nop 7 f4 F8 d( I# t) G4 A
0040126C  /$  55            push    ebp
4 e! W: w1 v- {4 w& }& s0040126D  |.  89E5          mov    ebp, esp
& ?2 ]! E- s! e! U3 o7 m# V0040126F  |.  83EC 18      sub    esp, 18
- @; H8 P; J) j! D8 F00401272  |.  E8 39010000  call    004013B0 0 [& b  n: ^, |+ R( }! ]
00401277  |.  83C4 F8      add    esp, -8 % H5 K9 E/ }4 v1 T% O( `& Z
0040127A  |.  68 10124000  push    00401210                        ; /mode = "r"
$ W3 H7 c1 n* H4 N0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt" 5 S! g& c9 H) i& l1 T
00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen " p0 j/ g  k# P- N" c
00401289  |.  83C4 10      add    esp, 10
1 O8 x" V# H8 h; e( _0040128C  |.  89C0          mov    eax, eax
0 v8 X4 s& f5 X7 z. m0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax * U* V9 {, t* p: q  O2 h
00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0
  S- s  {% m, L" v. m00401295  |.  75 10        jnz    short 004012A7
( P/ q5 ~# D9 E00401297  |.  83C4 F4      add    esp, -0C " z0 V- o) u( o
0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!" 5 C& q# T# N2 c# @1 t
0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf / ?% B+ K3 h  A4 U& b# n# T0 R: U
004012A4  |.  83C4 10      add    esp, 10
) R4 e& x7 ^5 ~+ _, _- T004012A7  |>  83C4 F8      add    esp, -8
! i: n7 r+ X8 O: l8 u2 ]% Y9 S004012AA  |.  68 32124000  push    00401232                        ; /mode = "w"
. Z; w6 m8 U$ Z* W004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt" # g# X# V. C, Q/ B
004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen   ]. t( ^3 `" _( C( J
004012B9  |.  83C4 10      add    esp, 10
' _; e4 E) r( M- R* t% d2 i004012BC  |.  89C0          mov    eax, eax
) v) ~' o2 `% N! G2 |3 x6 T004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax
) u2 E) }' Q, H+ G$ T# X/ t0 a004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0 ( f' E$ H4 u+ e2 ^6 `8 J: R
004012C5  |.  75 10        jnz    short 004012D7 % ?/ X, ~' a- r7 G
004012C7  |.  83C4 F4      add    esp, -0C 1 M- q5 ^0 ^( g+ D# A8 H
004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!"
! M6 J7 x; S5 y& [7 e/ \" u- r004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf % q4 \* X1 Z' j" H( S) A' k
004012D4  |.  83C4 10      add    esp, 10
- Z7 j: q% i3 Q- v1 P% f3 q4 X! ^/ X004012D7  |>  83C4 F4      /add    esp, -0C 3 ?  @/ j# Q' p9 j+ X
004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4] . r9 K% }' |4 C" |1 h6 i( P
004012DD  |.  50            |push    eax                            ; /stream 7 w% [: t' }% S" e) @6 ~/ p
004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc
0 E" I6 y1 m7 \8 B004012E3  |.  83C4 10      |add    esp, 10 2 B0 Z( u, F# I" |0 g1 D' J" v/ T9 H
004012E6  |.  89C0          |mov    eax, eax $ l9 J$ f; ~9 ]1 }5 ]
004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax
$ r, V! T7 o0 N, I: o004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80
# m7 Q: Y1 d1 k4 C004012F2  |.  7F 23        |jg      short 00401317

$ ~  J5 ~  B- w- Z& Z0 @: `004012F4  |.  83C4 F8      |add    esp, -8 5 c' R) k, C  g4 |" |
004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8] * s- Z3 `- q4 C" F/ _0 Q; B
004012FA  |.  50            |push    eax                            ; /stream
# n7 X) {% a& Z004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; | 1 w  l% \1 C3 W; ?
004012FE  |.  50            |push    eax                            ; |c
; h7 R0 r2 ^' a" i8 l  k1 d6 |( Z7 o004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc 1 G/ x! V' A: L
00401304  |.  83C4 10      |add    esp, 10
+ P5 M: V  w& w9 ^1 ~+ }/ s00401307  |.  83C4 F4      |add    esp, -0C 8 J2 Y$ ^0 H% t9 h9 F3 R  f. l
0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,""
- {5 G+ j3 w+ C* o' b0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf
" u$ J" v5 E# A2 e00401314  |.  83C4 10      |add    esp, 10
2 h# ^% R+ E4 b; M. ?( H  k+ ~00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1 6 B- |* \1 V6 ?, Q. M# m
0040131B  |.  75 03        |jnz    short 00401320
5 R' |+ s4 K; C0040131D  |.  EB 03        |jmp    short 00401322
8 @* T, B; v7 ?8 D3 j2 b' Z0040131F  |  90            |nop
9 `8 N6 g% I5 p( c  K4 O/ ?00401320  |>^ EB B5        \\jmp    short 004012D7 ( p& j9 Q, f) x/ [; I! b" R
00401322  |>  C9            leave
$ }! z, c! j( ?  g- ]00401323  \\.  C3            retn
  Y9 T# ^% Z; ]7 i00401324      00            db      00 + j& ?2 F5 m# b' D7 o
00401325      00            db      00 ( g6 K+ T! b* Z4 B: ]
00401326      00            db      00 + g9 ]9 X0 C3 z3 k) I! V3 _
00401327      00            db      00
3 i  d3 ~$ U6 @/ `9 L00401328      00            db      00
0 b  T$ b0 a' r! K( K- N) S% ~00401329      00            db      00
4 `8 M4 U+ b- N3 ]0040132A      00            db      00 3 d0 @3 o5 B! ?" k" B6 m
0040132B      00            db      00 ' _# N" Q" a, A
0040132C      00            db      00
2 E8 a7 V. J3 `; @  |0040132D      00            db      00 9 T' q  j1 Z( x$ ~1 g1 G* X
0040132E      00            db      00 5 v+ M$ K" r8 d2 l4 t
0040132F      00            db      00
, _( E* W; d' \: ?- ~- e00401330  /.  55            push    ebp . {9 w; k) M( H# q
00401331  |.  89E5          mov    ebp, esp " u* @3 X# E0 z) w9 y
00401333  |.  83EC 08      sub    esp, 8
  |: g+ q8 l  X- v8 A00401336  |.  A1 10204000  mov    eax, dword ptr [402010]
9 o  ]: ~1 u( ?' m6 a0040133B  |.  8338 00      cmp    dword ptr [eax], 0
3 A, r* i# @# q& P* g! U" ?' \0040133E  |.  74 1D        je      short 0040135D
! H* v5 K+ J  {. }3 C6 P- X3 s00401340  |>  A1 10204000  /mov    eax, dword ptr [402010]
3 V. H# x0 n; Z0 o/ I00401345  |.  8B00          |mov    eax, dword ptr [eax]
' j3 l7 L7 K5 x3 D0 ]6 y00401347  |.  FFD0          |call    eax
5 w, M  x& n* M8 p1 Q: T3 @00401349  |.  A1 10204000  |mov    eax, dword ptr [402010]
" n/ v$ S- M0 c0 \, J2 w0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4] 5 Q) e% w+ R% i( n! [
00401351  |.  8915 10204000 |mov    dword ptr [402010], edx
$ O) e% G4 V1 c  N00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0
3 U1 Q% S  k/ u" `0040135B  |.^ 75 E3        \\jnz    short 00401340
# @* a' ?, x) s0 G8 w0040135D  |>  C9            leave
+ X) t9 g& J# ~, L$ p/ W9 c0040135E  \\.  C3            retn " Z# U$ l8 Q' @8 ]' E5 F- {
0040135F      90            nop 4 U% m- ^; d1 c" Q5 Z0 l
00401360  /$  55            push    ebp & u# _) t: J: f& X
00401361  |.  89E5          mov    ebp, esp
. ?3 q$ @) J5 y" M' c00401363  |.  83EC 14      sub    esp, 14 % n$ D3 e( Q% u; |+ @
00401366  |.  53            push    ebx
- x" q; M! K9 E00401367  |.  A1 58144000  mov    eax, dword ptr [401458]
, U+ F# J: B8 S  ?9 U" k0040136C  |.  83F8 FF      cmp    eax, -1 1 W  a, @  Z; f  ~* |: {( y# d
0040136F  |.  75 19        jnz    short 0040138A
9 @1 S5 C* Y/ u00401371  |.  31C0          xor    eax, eax ! a  ?  i, E: ?' b* G+ n
00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0 $ p5 ^7 R3 H6 q6 o+ a) S5 }! j
0040137A  |.  74 0E        je      short 0040138A ' O' H3 w: C. R. c. \" L6 T: s
0040137C  |.  BA 5C144000  mov    edx, 0040145C 7 G6 E, [+ A# P  c
00401381  |>  83C2 04      /add    edx, 4 5 N) ~0 Y2 b! o! L; C0 U- Y
00401384  |.  40            |inc    eax ) s6 R2 c4 r# R5 D+ H! D3 U2 g& ^
00401385  |.  833A 00      |cmp    dword ptr [edx], 0
( y, D' m* u2 P, H2 ?00401388  |.^ 75 F7        \\jnz    short 00401381
6 d+ @1 I4 }! v2 c9 e0040138A  |>  89C3          mov    ebx, eax 5 @/ d+ U- i/ I1 O, x7 J3 }
0040138C  |.  85DB          test    ebx, ebx $ d, N3 Y' W; q6 d' y
0040138E  |.  74 0C        je      short 0040139C / c* k  c  U: M0 D! }1 z2 l
00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458]
* B4 E0 q5 f  U00401397  |.  FFD0          |call    eax : A3 U1 J: [8 r
00401399  |.  4B            |dec    ebx
7 H' E! q/ T& k9 Y6 m5 p0040139A  |.^ 75 F4        \\jnz    short 00401390
/ p# C( F7 e9 L1 e( |2 [0040139C  |>  83C4 F4      add    esp, -0C 3 n( M: J, ?( R9 T
0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330
) Q3 ^" G+ p& }1 R004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit : [7 X1 ?7 x8 s9 M+ v; o
004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18]
: B- U6 i. G2 H, L004013AC  |.  C9            leave
+ t% W$ T% R+ b. o004013AD  \\.  C3            retn 4 _  {( l1 e9 V; E
004013AE      89F6          mov    esi, esi , V; {' B0 I' K6 G' W
004013B0  /$  55            push    ebp
% [! P2 r2 T" f7 b, E8 k004013B1  |.  89E5          mov    ebp, esp 9 c% R/ ?9 V" t( U" z) N7 W3 C1 X
004013B3  |.  83EC 08      sub    esp, 8
& ]' s1 k1 [5 {& e  x. t004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0
: p8 a" m% m. {5 w) _7 _. a9 y004013BD  |.  75 0F        jnz    short 004013CE
2 }) {2 c* j( E# H7 g. f& A1 G9 r004013BF  |.  C705 14204000>mov    dword ptr [402014], 1 ' t# P. @* c; r+ e1 F7 H
004013C9  |.  E8 92FFFFFF  call    00401360
  y" P2 Z- K1 J  E9 N$ m+ k004013CE  |>  C9            leave 7 I) `# v8 @# G5 f- p- j
004013CF  \\.  C3            retn ( w, ~* `& r+ |2 Z
004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode
9 I) n6 C3 v; D. A% C( J004013D6      90            nop
2 u# a- a1 c) `0 n" ]004013D7      90            nop # F; s! H5 U. [- O' a" I
004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob ' J0 L, A. U" d! R- l
004013DE      90            nop   @& U; ~) B& e$ u' _$ h4 r
004013DF      90            nop 0 @3 B; C; Z. r- w1 n5 D
004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type 5 z2 u$ U  c8 O- I
004013E6      90            nop
6 m' E+ s/ L5 {" {6 Z* L4 x004013E7      90            nop " V, {, M8 L2 g6 O& T
004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit : u0 V, L0 a- ^/ Q9 o/ R! w- [! h( O
004013EE      90            nop
" d0 v! t! u5 K* m+ a004013EF      90            nop 3 a4 q  Q0 ]" g
004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ
6 C" r' q8 S. ~' t004013F6      90            nop
% `* F- r) D6 k4 {' X004013F7      90            nop
- a2 ^8 O# J- u0 }- N2 m! N004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset
. |  ]0 u+ `6 B/ G: c004013FE      90            nop . t( i" K6 K9 {8 T7 W( q
004013FF      90            nop - [! g9 l- W% Q6 L, s# k/ x
00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal 5 U: j. H& t* ^5 ~# `
00401406      90            nop 5 D. h8 k5 s! r' Q
00401407      90            nop 0 Y* U! o6 }7 J, P, p: v9 m1 q* K
00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno + h. [* _6 s! s/ W
0040140E      90            nop
" J& @& n0 B2 d0040140F      90            nop
! Q. N/ ]' |/ O2 M/ W00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode 4 A6 p2 A+ m" K% {6 S1 C( Z2 F" Z0 P
00401416      90            nop
& N1 ^/ l5 n! {00401417      90            nop
7 @8 x( p5 {) `, c8 j00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs
3 S; `/ A* m' U# K4 |( |0040141E      90            nop
% Z: t: g; R7 n; [2 _0040141F      90            nop 1 h, l. j4 U8 b4 ^% n: H) C! j# N
00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc
% `% }& _/ \) }4 ]00401426      90            nop
1 Q- b8 w0 b2 i" r0 o% g00401427      90            nop
- M" ^0 J4 U/ `8 J1 D4 G! X00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc
0 E, y" H/ V# Z$ I) ?+ X8 v0040142E      90            nop
3 z, ]% }1 _/ _' r7 q0040142F      90            nop 9 {: z) T* Z' L% R
00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf
! a# o/ [% @4 k0 R1 Y( q00401436      90            nop 7 `' n& _  e* E" @: w
00401437      90            nop 1 t" w  u" V4 u- H; {- I
00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen
( P$ w# ~( u2 i5 X& j9 s& O( }3 f0040143E      90            nop
2 r% }5 u& r- j2 d7 w0040143F      90            nop   L7 a- }: i  B& H# D
00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit : S  d$ K9 |% I  `' z3 k
00401446      90            nop
$ o; t5 i* Y4 v% ^& t8 i00401447      90            nop   ]. n% [* B/ l) h. t
00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter
& p: h" j4 G% [+ U: m9 A' O$ u0040144E      90            nop
) w  T/ h3 f8 \/ H0040144F      90            nop ; t5 O& V1 f* _. j4 L9 l  L
00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess
6 d4 P9 }1 ~: }0 }* z- G2 r00401456      90            nop
! b  z2 z2 m6 t* b* f  l00401457      90            nop & @; [9 R, C5 B
00401458  .  FFFFFFFF      dd      FFFFFFFF / ^1 W" d) L! B7 M% [
0040145C  .  00000000      dd      00000000
5 J; R$ I3 e" @00401460      FF            db      FF
6 c2 G3 x* _' x4 n" I' n1 ^4 w00401461      FF            db      FF
  H3 V" ^" b" j! q/ o00401462      FF            db      FF ' k3 t/ V% l4 b! y
00401463      FF            db      FF / B4 y# M% R; L
00401464      00            db      00
  Z) `: t8 M* {) Y/ Y# U- a0 ?00401465      00            db      00
. F- o  s0 ~. u* G( Y/ x( M00401466      00            db      00
& k) R/ H. r2 G, k/ p00401467      00            db      00

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2009-10-10 22:14 | 只看该作者
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。
" g3 @' g3 F1 ?0 g8 w$ x深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?, t8 d) x( d1 @2 x$ `1 j6 }
比如不用fgetc这个标准c函数,而用mfc的类似函数来编。. o; Q7 w7 {& W* P3 \3 L6 K5 K
让我们看看生成的汇编代码有什么区别。# G7 ^; V5 E1 m, r& N
你也可以试着修改一下。
回复 支持 反对

使用道具 举报

7#
发表于 2009-10-12 11:51 | 只看该作者
MFC是C++的类库吧,我不是很熟悉
  D  [5 d% O' M4 A
7 \' D# ?! ?" ^" P: ?! q8 a说说我对单字节内核的看法:
9 L( N6 O9 f2 c, X0 Q" R
. V) t; N3 k& y7 C3 b% L8 s我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符,
, \" i% ^5 l$ e8 J9 d$ u然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。
! j5 i9 E7 ]) ?8 F0 o! ]  i3 m% B7 I, X* v. x8 ^6 y
举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核1 ~! L; l3 [4 \8 d6 w
就很有可能无法显示中文,尽管那些中文数据都存在。' P3 s+ B) F0 z- s

8 V& v" r( j! `/ \6 w1 w0 d3 h所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。) f# {1 F! q1 E1 k! A! P  y: R4 R
9 e, o6 Z+ ^! l! c% X% a7 v6 r
因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。& p) |" N8 T3 x
) H7 H6 f  ]/ j+ o7 X. k) p
中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。: ]8 t% G: e$ T; \

7 R8 @, w& W4 x  R7 h那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字
6 u8 i" A: f& V) [1 C3 A% v2 T3 j1 [/ U9 I% Q0 [% y
那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。
0 Z( H: S$ ?# {( L9 P! U  u3 Z/ I2 m) ^7 y* }: Z
就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2009-10-12 13:09 | 只看该作者
其实,单字节内核一般有2种情况。
- s% n) f4 \0 q0 ?. {+ G/ ]1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符
9 R! z5 E& t+ x9 ]' @2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了2 D& \7 a5 W4 P6 K

( I- W+ q: Z& I0 C# B真正的游戏应该会用这2种方式中的一种来处理。7 I- S' Z+ m, Z" L
这个单字节内核模拟程序其实只模拟了2的情况。
. V/ r& o2 y' e+ Y) h4 ~要模拟1的话就要制作一个图形程序了。& S& j# S7 g) W6 m. _- j, h
9 x# F9 b4 W' T4 G
这个单字节内核模拟程序本身的意义其实不大。
! _2 I4 ]' K! a4 ?. X3 Y0 p. H$ T其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
回复 支持 反对

使用道具 举报

9#
发表于 2009-10-12 15:34 | 只看该作者
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
' H: C% ~! L0 Z所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。: g0 w; Z3 u5 Z; p7 G+ L
这样的理解对不?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2009-10-12 16:44 | 只看该作者
引用第8楼深绿于2009-10-12 15:34发表的  :( a5 N- a7 ~) k: i* f4 T% p
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。8 O) ^" z% G- ^  y7 R
所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。
# V; `& d  E3 r1 |% C- l这样的理解对不?

$ f* X; C4 K0 A8 W. P, m理解完全正确。; J4 y$ e  r& z& ?6 i. v/ _% A
不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。9 v; s( y5 ~5 h  D
2 a, C2 p7 z0 [: N# m/ W8 Z, O
有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。& P! `, F1 [. Y: ^
然后逐个nop测试,看有什么变化。( V. P' _" a( x9 n& s

3 j+ p) _2 M* i. ^0 ~* G你可以参考一下这篇帖子
, n  Z2 d+ X' }+ d) l9 e4 r游戏汉化中的双字节问题处理原理- P" s+ R1 S" v
https://www.chinaavg.com/read.php?tid=18709+ W+ L+ G, f9 h# q0 w- |/ M
作者好像是左贤王主力人员。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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