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

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

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

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

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

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

深绿,你好,有时间的话请帮忙制作一个单字节内核模拟程序。
. A4 k; l" V0 l; M0 ^( _
  Q2 ]3 k0 ?% B- H+ ?3 F7 B( r& o8 C题目吓人,其实很简单。
. i$ S1 I& ]/ N" i; {2 o在程序里面设定一个固定中文字符串。7 L. t8 L* }( s$ |) Y3 Y
然后按字节读取。小于0x80的字节输出到out.txt文件即可。' k3 z6 D  x* ~( a8 ?2 }
% W/ h1 f& e9 |  Q) S' y
这个程序模拟了单字节游戏后输出乱码的情况。
4 G" e: H) h! P9 b2 d& s/ V  F: [接下去我们可以利用它进行汇编级研究。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2009-10-10 19:10 | 只看该作者
我稍微改了一下程序,包里面有个input.txt和output.txt1 e& E2 T* q8 _# U; V' q# a
先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
" [) e2 u2 D  ~, d
, D' K  R- l2 U3 R但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-10-10 21:47 | 只看该作者
引用第1楼深绿于2009-10-10 19:10发表的  :
2 I0 R3 l3 b" ]4 X  L1 i我稍微改了一下程序,包里面有个input.txt和output.txt
$ [8 g: }1 j7 ^7 S先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节( a6 A/ [/ d( ]

6 {  T! E: D" f! ?" o! s8 W# z但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

6 y- k! ~5 A6 S/ @  o- E+ |是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。! ~! U  t% O. ?4 \: F) J" S5 o& e
这就模拟了汉化了文本以后,中文字符被过滤的情况。
* o. J( @" A. n3 E) l+ [/ I# K1 w/ B. P" p. G
接下去就可以在汇编级用OD载入,开展研究了。. ~. `5 A' y4 X2 g5 T% v
想办法把和0x80比较的地方去掉就行了。
回复 支持 反对

使用道具 举报

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

使用道具 举报

5#
 楼主| 发表于 2009-10-10 22:02 | 只看该作者
由于这个程序很短,OD里面的汇编代码也很短。
. D! k2 g' ~, U! L( L" h. s请看红色的部分,这就是和0x80比较的部分。
" W0 O2 ^# m1 W! J0 B把这2句NOP掉,然后保存修改后的文件为exe。
  `; S8 e( @5 i我们发现input.txt里面的所有内容都能被输出了。
. `! o/ ~7 i  @2 f附上修改后的exe.
' p6 p. y9 o* e' r6 {7 ?深绿,你可以把这个操作过程试一下,练习一下.
% M3 c# u8 S+ ^6 l  i& A5 }6 S4 P  G+ \' A
00401000  /$  55            push    ebp , W% p) E; d7 G& f2 T
00401001  |.  89E5          mov    ebp, esp
) M1 H9 o, w( E/ I7 T# _00401003  |.  83EC 18      sub    esp, 18 6 ]* {. r6 G7 `, j/ D
00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0 # @2 V6 P& S2 K/ N/ X% m# e4 g
0040100D  |.  83C4 F4      add    esp, -0C . B5 j4 d0 ^1 N8 {
00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4]
' ^& P2 r1 A& J' Q00401013  |.  50            push    eax ! \! k; e( l; T( z! `
00401014  |.  FF35 08204000 push    dword ptr [402008]
+ b; ]* k/ g- t" m0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8]
1 C$ J- q. E1 l8 s# l7 W0040101D  |.  50            push    eax
3 U8 G1 ?- R; D* R, z! H; P) w2 ]" A0040101E  |.  68 04204000  push    00402004 ' [; i+ c3 A- m. |0 c
00401023  |.  68 00204000  push    00402000 ' w! n* k# d" x8 H0 i( {
00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs>
* f% G$ i5 p% Y" D" U0040102D  |.  C9            leave
7 R' L8 z4 O+ I4 q1 t, V* ^" ]0040102E  \\.  C3            retn
; M4 s$ U0 \' t, M8 b2 e$ b0040102F      90            nop
( \4 U8 O: V- d00401030  /$  55            push    ebp
) O% @3 _5 H9 e00401031  |.  89E5          mov    ebp, esp 0 c& l  Z' |5 a+ n3 W0 }' h
00401033  |.  83EC 08      sub    esp, 8
  n9 \% L* T1 T5 d+ E6 Q+ I00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C] ) y; i! f! z0 I5 x* J/ [* g
0040103C  |.  85D2          test    edx, edx
# |/ @5 `4 J1 c2 q+ d: E0040103E  |.  74 7B        je      short 004010BB
" ^5 c, G3 W2 O* w9 U0 ~8 s00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>>
$ k7 m0 H1 P. K; g9 s% @8 Z00401045  |.  8910          mov    dword ptr [eax], edx
- z" E* T3 x' e& S7 {00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] ( N1 K! K7 m) k  k) R" Y
0040104C  |.  85C0          test    eax, eax
- c/ n$ N, [) W- Z1 H0 `5 P0040104E  |.  74 1E        je      short 0040106E ; N) _# G, p+ M( b& e' A- R
00401050  |.  83C4 F8      add    esp, -8
: M% r4 g/ B" m1 t  A, \! c1 T0 i* ]. Y00401053  |.  FF35 0C204000 push    dword ptr [40200C] ' Y' v  o- v, q
00401059  |.  83C4 F4      add    esp, -0C ) X3 q6 ^; O- P
0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob * ]) \9 Z5 B2 F  k; m1 t
0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno ' B$ H" A) M3 ?9 `  A1 C
00401062  |.  83C4 10      add    esp, 10
: b! D7 l9 x3 B9 B6 j00401065  |.  50            push    eax                              ; |handle
9 T6 Y" }; \, K: j/ u; M; u00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode , Y& {# Y, ^6 C* s2 q& E/ R! x
0040106B  |.  83C4 10      add    esp, 10 4 E; w2 t: b2 z( x5 I! i: O
0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] 4 _* P4 O4 r* P+ i% J
00401073  |.  83C0 20      add    eax, 20
$ \* k. [/ r9 Q4 N7 v3 h# Y! U00401076  |.  74 1E        je      short 00401096 : t* B- c5 @! J& N! j
00401078  |.  83C4 F8      add    esp, -8
. v' {, n1 N3 Z3 P0040107B  |.  FF35 0C204000 push    dword ptr [40200C] 2 S0 h, t; v8 D$ o! J3 q8 f& t1 W
00401081  |.  83C4 F4      add    esp, -0C
* Y/ B' n1 q! c) V% }, s# Z- I0 q00401084  |.  50            push    eax                              ; /pstream
' n5 d% _' }% u00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno " ]$ i1 n) Y7 i- ~/ E' ?
0040108A  |.  83C4 10      add    esp, 10
& e7 H9 K) o6 G) M# x0040108D  |.  50            push    eax                              ; |handle 9 c  [$ d1 j6 P
0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
; I0 l3 }3 k$ [: F: K: d* i00401093  |.  83C4 10      add    esp, 10 ' D& b. B& N) G6 f. n
00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
% t( c2 Q9 L3 c) c5 T$ q9 p0040109B  |.  83C0 40      add    eax, 40 - v' N# w9 l9 b: }1 [
0040109E  |.  74 1B        je      short 004010BB
' ?8 C4 x* H- X2 q; A) z004010A0  |.  83C4 F8      add    esp, -8
) q0 T1 {6 {. ]/ d* E0 {( E004010A3  |.  FF35 0C204000 push    dword ptr [40200C]
8 q* w3 G8 G. Q0 c6 d3 `8 }0 ~& [004010A9  |.  83C4 F4      add    esp, -0C 7 ]. A# }; t% M8 l4 j( H- r
004010AC  |.  50            push    eax                              ; /pstream
" q2 c2 v6 `' L9 @004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno 0 a9 j, A  g( T. D
004010B2  |.  83C4 10      add    esp, 10
  O2 ?5 s. S$ C004010B5  |.  50            push    eax                              ; |handle
$ S9 {( g3 B/ ]( u6 E4 a004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode ' [/ a+ M7 f, g4 d& o( C
004010BB  |>  C9            leave 7 f$ v7 I" _8 z( E4 e, `
004010BC  \\.  C3            retn
* B7 a( Y  h6 i* j' l( Q004010BD      8D76 00      lea    esi, dword ptr [esi] 9 ~. u6 q  G- m& @: n5 M; Z" c
004010C0  /.  55            push    ebp
0 I" n6 Y  l& h/ I/ ~% ]004010C1  |.  89E5          mov    ebp, esp
3 U( v1 h4 x/ i* ?004010C3  |.  83EC 10      sub    esp, 10 0 j+ N: V, {" L* k+ q
004010C6  |.  56            push    esi . ^( u$ V/ [/ |7 d1 y7 i* r9 @% ^
004010C7  |.  53            push    ebx - T& M! v* U6 n6 ?  E$ Q+ o4 ]2 h
004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8]
! w0 R8 y( N$ |5 B3 Q. C7 h004010CB  |.  31DB          xor    ebx, ebx " f# k+ k* V7 q  n# T% K
004010CD  |.  31F6          xor    esi, esi 8 A3 a: ?8 O4 c+ R! t
004010CF  |.  8B00          mov    eax, dword ptr [eax]
5 |4 d% c2 M) q# C004010D1  |.  8B00          mov    eax, dword ptr [eax]
/ M  e# v8 [4 w+ V" L/ U004010D3  |.  3D 910000C0  cmp    eax, C0000091 4 u) B7 H, K' u: U/ \# O' N
004010D8  |.  77 16        ja      short 004010F0
, N7 S! X  D  |6 ~004010DA  |.  3D 8D0000C0  cmp    eax, C000008D
1 C/ i8 x$ e: I004010DF  |.  73 4F        jnb    short 00401130
: r9 o5 ?7 Y5 x& B7 a004010E1  |.  3D 050000C0  cmp    eax, C0000005 , j( f! m! p8 m/ d+ d1 v: o0 T
004010E6  |.  74 18        je      short 00401100
' C1 J  h- f. W, Z2 M9 U004010E8  |.  E9 86000000  jmp    00401173 / a- S; F: s& ^9 {3 n$ a
004010ED  |  8D76 00      lea    esi, dword ptr [esi]
2 @" S: s8 q. l. }5 M$ d004010F0  |>  3D 930000C0  cmp    eax, C0000093 8 a  `' n5 t0 q
004010F5  |.  74 39        je      short 00401130
" O1 n4 I& ]$ H" ^4 _) q" v0 j! x004010F7  |.  3D 940000C0  cmp    eax, C0000094
& V, P. y7 K% |7 \004010FC  |.  74 37        je      short 00401135 $ S; O) C' s! K- t  c- R- D& T; X
004010FE  |.  EB 73        jmp    short 00401173
+ W- g% T1 d3 b00401100  |>  83C4 F8      add    esp, -8
7 b( h& }1 |4 c* a2 B6 H- [( }00401103  |.  6A 00        push    0                                ; /func = NULL ( P. E: ~1 J5 @( A1 e
00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV 1 l& ]) @- e  T% _0 A+ G4 R
00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal + l# s; G+ W8 w; K& n
0040110C  |.  83C4 10      add    esp, 10
; C- U/ |/ }/ s/ w0040110F  |.  83F8 01      cmp    eax, 1 8 n; Q/ ?# _' Q7 E4 F
00401112  |.  75 0E        jnz    short 00401122
2 U+ q7 }: Y5 ~5 Y00401114  |.  83C4 F8      add    esp, -8
# n6 V/ g' W' o+ ]+ F00401117  |.  6A 01        push    1                                ; /func = 00000001 ' B& J1 D5 c( g6 P& r
00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV ' w% }4 }0 M' i6 m& P
0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal
. S6 d" B  p2 I* O00401120  |.  EB 4C        jmp    short 0040116E - F4 U1 E: t" R/ T+ M1 o( d
00401122  |>  85C0          test    eax, eax ! x. j2 i$ _5 Z% R$ A; u
00401124  |.  74 4D        je      short 00401173 & c% T" T  j* k, c9 s1 @$ H
00401126  |.  83C4 F4      add    esp, -0C . f2 K, K0 u0 f! V' w; v
00401129  |.  6A 0B        push    0B 5 {/ H, k$ T) i1 y( J
0040112B  |.  EB 3F        jmp    short 0040116C
; T6 N& I& a0 l2 Y7 c  Y0040112D  |  8D76 00      lea    esi, dword ptr [esi]
- s7 o- a! P! e+ k00401130  |>  BE 01000000  mov    esi, 1 $ X+ T; A* i, ^1 x# v  j8 O
00401135  |>  83C4 F8      add    esp, -8
" Z8 @: L4 P% @00401138  |.  6A 00        push    0                                ; /func = NULL
# V9 W/ i4 T. q$ n( _0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE
* m8 |5 ]/ y: I5 Q+ B! S+ |% L5 M0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal
; W9 s) [) h0 ]) {' G- }/ K4 g00401141  |.  83C4 10      add    esp, 10
9 a" k; K5 d) \+ U3 ?( F00401144  |.  83F8 01      cmp    eax, 1
3 F, c. S( P& P  n00401147  |.  75 1A        jnz    short 00401163
, T$ K1 q! ^0 a2 S3 i/ ^00401149  |.  83C4 F8      add    esp, -8
$ I3 j1 T- F' u2 |0040114C  |.  6A 01        push    1                                ; /func = 00000001 ! s- m3 L1 `) y& Y
0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE 3 ?' N/ `" @0 E! v; Z+ ?% {8 K; I* _' e
00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal 6 P1 H4 [* ^  l4 f- u/ t4 q
00401155  |.  83C4 10      add    esp, 10 2 m" J" F- G5 T# ^& p/ n
00401158  |.  85F6          test    esi, esi * h$ T- _8 X; ~" q" a6 K
0040115A  |.  74 12        je      short 0040116E
: a- M" F# A. i  @0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset & J* K; f: X6 b; M# X
00401161  |.  EB 0B        jmp    short 0040116E 6 h$ w8 q( R9 ]) z& O7 G; D% N
00401163  |>  85C0          test    eax, eax
: X6 t# R) ]( |3 A  K! b00401165  |.  74 0C        je      short 00401173
0 N- e# c+ ]! D: J( ]00401167  |.  83C4 F4      add    esp, -0C 6 N" o$ a* i2 H* O! }% U' r
0040116A  |.  6A 08        push    8 5 E5 U! `7 l; i+ r' E; ]5 H* }, C5 x/ c
0040116C  |>  FFD0          call    eax
7 x9 O8 o" m, Q$ Y0040116E  |>  BB FFFFFFFF  mov    ebx, -1 7 h/ N$ d2 n' ^; e1 k$ n
00401173  |>  89D8          mov    eax, ebx   g# g3 F: `2 Y& T% `& p9 c) _
00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18] " H  M! B$ L& ?; |, B) k
00401178  |.  5B            pop    ebx
+ H3 t2 ~: @6 M9 |00401179  |.  5E            pop    esi 6 s& d3 }9 ?* i
0040117A  |.  C9            leave + k' B6 S: a1 Y. S7 k' O& I
0040117B  \\.  C2 0400      retn    4
( F$ g- S, j) G5 g0040117E      89F6          mov    esi, esi
- @/ n7 @$ p  e: Y1 {1 c00401180  /$  55            push    ebp
  k* f! R7 q8 b4 B00401181  |.  89E5          mov    ebp, esp
, j. i3 E. r, T- _: d0 A9 o. H00401183  |.  83EC 14      sub    esp, 14 % e( o" V- K- W+ x/ b  L
00401186  |.  53            push    ebx
! ]  D6 I: a- C! q  O" s( H# }00401187  |.  83C4 F4      add    esp, -0C
( ^2 B) W8 m& v0 h4 s- x- M' u, K0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0
' e2 t" I! _+ Y' a: Y9 C0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter , D4 S; ?% O* j2 u. b) n% I
00401194  |.  83C4 FC      add    esp, -4 6 f7 y  ?# p; m( X2 ]. F* g
00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset : O) o7 h: \0 v: |0 |# q
0040119C  |.  E8 5FFEFFFF  call    00401000
9 W9 z  ~& M& ~004011A1  |.  E8 8AFEFFFF  call    00401030
& t  a2 e. @! v0 n* }004011A6  |.  83C4 FC      add    esp, -4 + c2 o; e3 O/ s% V2 Y" [/ _
004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ>
. B: z2 Q' R4 w+ U004011AE  |.  FF30          push    dword ptr [eax]
+ c5 _$ J' T& k# ?9 B% R7 ^004011B0  |.  FF35 04204000 push    dword ptr [402004]
' R7 D0 A5 s8 T! s6 P004011B6  |.  FF35 00204000 push    dword ptr [402000] - s5 X( E2 E3 J! ]6 |( D
004011BC  |.  E8 AB000000  call    0040126C # Q# b  @% e1 z6 O- Q7 B5 m
004011C1  |.  89C3          mov    ebx, eax 6 \6 }" o/ w& [9 c* ^
004011C3  |.  83C4 20      add    esp, 20
" l: g- j4 y6 N0 F. i004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit   N7 q8 }% n; Y- y% {% G. o
004011CB  |.  83C4 F4      add    esp, -0C
; Z* A! ^- r' W% R  c3 s  t# @4 |7 W004011CE  |.  53            push    ebx                              ; /ExitCode ) k( y1 `2 V4 b* Y6 D4 r
004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess
. B$ W* u, O! y004011D4 >/$  55            push    ebp
7 c: G, s: _5 w# t004011D5  |.  89E5          mov    ebp, esp
# |$ Q/ K- r* `! k004011D7  |.  83EC 08      sub    esp, 8
; h* O# F& i2 \$ o) t1 K) r004011DA  |.  83C4 F4      add    esp, -0C
- K& w) A  u! l4 ]004011DD  |.  6A 01        push    1
% L3 q4 t/ I. X" D  ?) e004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> 8 E; `" L, E- {% p6 J3 c- `" J( y
004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> . ~( z2 v, F4 m
004011E6  |.  E8 95FFFFFF  call    00401180
, D$ T; m4 a4 n9 r. O9 J004011EB  |.  31C0          xor    eax, eax * y& u5 r- d. O9 x
004011ED  |.  C9            leave 5 g. G6 O/ W1 K8 i' q  _
004011EE  \\.  C3            retn
/ c! h& u; n( u' u1 Q( v; w. C004011EF      90            nop 0 [! e) s/ _2 r" K( b
004011F0  /.  55            push    ebp : l! ]9 M+ n' i- [8 M
004011F1  |.  89E5          mov    ebp, esp $ [3 V/ u5 {& f) s" R
004011F3  |.  83EC 08      sub    esp, 8
* T2 V" }; }1 i# x1 n004011F6  |.  83C4 F4      add    esp, -0C
: Y  N' Z( C3 z. i6 m: A& w004011F9  |.  6A 02        push    2 . D% m. I2 `% R# c; R
004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> 0 z' o) N- Y  n3 h, ^" x, S) h
00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type>
$ ~& ~  v& G) V) j( @0 d00401202  |.  E8 79FFFFFF  call    00401180
: v: I+ i* L3 {3 V% _; i. w00401207  |.  C9            leave
  A6 X1 q0 q. n00401208  \\.  C3            retn
/ l, L$ S+ n& x& p( f9 a( g+ u/ x3 m00401209      00            db      00
1 ^5 z* t9 T+ E" J0040120A      00            db      00 : c+ U6 C6 v/ {7 A* A
0040120B      00            db      00 . ~% [) ^  k/ Q3 A, q
0040120C      00            db      00
! u" K0 ^2 x5 H9 }+ W% _9 E0040120D      00            db      00
# I4 x7 H: D' h/ K9 v0040120E      00            db      00 ' t6 t4 O/ M7 ?9 G# Z& A7 q! n/ H
0040120F      00            db      00 ; |0 w- b! I6 q/ S8 Z+ ~
00401210      72            db      72                              ;  CHAR 'r' $ S% C7 |' r# ~! G
00401211      00            db      00
2 E' F* u/ v& N$ j# K+ c0 W00401212  .  69 6E 70 75 7>ascii  "input.txt",0
5 q6 C, Y5 S$ i8 V+ U- s( `3 J0040121C  .  43 61 6E 27 7>ascii  "Can't Find input"
, Z# }0 u7 m* N/ {0040122C  .  2E 74 78 74 2>ascii  ".txt!",0   D3 e/ `  M+ W) @. T- G0 t! D
00401232      77            db      77                              ;  CHAR 'w' % T  K! j1 j) ~1 Q" n6 Z1 B) r
00401233      00            db      00 4 d, C2 T+ f/ N8 h- C7 P% o$ [
00401234  .  6F 75 74 70 7>ascii  "output.txt",0
4 \! B! e) k1 B( |4 d0 H0040123F  .  43 61 6E 27 7>ascii  "Can't Create out" 8 e) Y& K* j% `% _
0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0 & A6 [5 u# @8 ^0 D& x* Y
00401258  .  6F 6E 65 20 6>ascii  "one char outpute"
. U3 {# x9 l1 Q00401268  .  64 0A 00      ascii  "d 8 T& M# N0 V" i# N4 v$ X' b
",0
+ g" e9 c0 U  K& F- q: a2 s8 Z0040126B      90            nop , T$ w6 q8 y* n
0040126C  /$  55            push    ebp " u! w" f# O' |. [5 N
0040126D  |.  89E5          mov    ebp, esp - e) R" i  t+ K* F& I  E
0040126F  |.  83EC 18      sub    esp, 18 + ^: B1 Q1 Y: Z
00401272  |.  E8 39010000  call    004013B0
8 U. A" _" ^& h3 C2 n, N00401277  |.  83C4 F8      add    esp, -8
$ z; `# s# z) h. F2 N9 _0040127A  |.  68 10124000  push    00401210                        ; /mode = "r" 9 G# J, E! ~. M, U' u. g0 h& f: i
0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt"
$ |3 k- r! F+ Q( \( E* ^$ [00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen
# X  w+ f5 h$ C00401289  |.  83C4 10      add    esp, 10 2 Q& x/ @: [. p5 q- ]  p
0040128C  |.  89C0          mov    eax, eax
, ], f% B' S6 ?7 @: p" P0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax
  S+ S( ~0 M& k4 q! ?% w4 |00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0
9 g. f- T7 q! p+ D- p' N00401295  |.  75 10        jnz    short 004012A7 , R7 I" X8 X7 a( ~+ F  q: n
00401297  |.  83C4 F4      add    esp, -0C ' a4 B5 M6 l3 G& u; z, R, c( R
0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!"
2 G3 J; P: q5 o! Z4 m0 O! H6 i0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf
) S; Z/ F3 I! w! s% L0 A004012A4  |.  83C4 10      add    esp, 10 2 A! C2 r8 \; V3 O
004012A7  |>  83C4 F8      add    esp, -8   L  @% |$ h2 x6 I
004012AA  |.  68 32124000  push    00401232                        ; /mode = "w" ; m+ Q8 g2 B5 J/ g( \# Q
004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt" . k$ [2 H9 m# @8 h( W
004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen : x1 G. [/ S$ I( H" M
004012B9  |.  83C4 10      add    esp, 10
9 P* s+ Q4 \7 Y% ?* S004012BC  |.  89C0          mov    eax, eax
+ y6 v- k* }$ D0 A$ t$ _* }004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax
: G' z5 f$ l, s# v$ u004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0
* O7 Z; Y: D5 s5 o" t* K004012C5  |.  75 10        jnz    short 004012D7
% b' s$ m9 O1 x8 l004012C7  |.  83C4 F4      add    esp, -0C ( G. N' M/ }0 R3 ~+ }8 l& T7 n
004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!"
7 u+ F9 @: w9 U$ m$ [004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf : \! S- A8 W* E% I7 J4 G$ Y
004012D4  |.  83C4 10      add    esp, 10 % U& C5 W! L# |& _0 S
004012D7  |>  83C4 F4      /add    esp, -0C 9 q6 C2 w) Y4 s" R
004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4] 4 c9 @9 D8 ]( T
004012DD  |.  50            |push    eax                            ; /stream
% q4 S2 `4 J! G5 R004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc
- f- j* U; V; M004012E3  |.  83C4 10      |add    esp, 10
5 b9 v2 z& O3 Z0 M) j004012E6  |.  89C0          |mov    eax, eax * M7 ?0 |6 u" O* \6 `( t9 {
004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax 7 D* e+ a0 G5 `
004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80
# K/ I- r2 a4 D( r004012F2  |.  7F 23        |jg      short 00401317

' h0 G3 f; m* I1 G( r( l004012F4  |.  83C4 F8      |add    esp, -8
0 i; b+ H1 o+ ^- X004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8]
1 _1 V' q& K$ p9 P/ l  d( ~004012FA  |.  50            |push    eax                            ; /stream
  ~2 z" E$ C! B004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; |
1 K) r( Q3 q" r- [, v004012FE  |.  50            |push    eax                            ; |c
  i: U& z0 I: Q004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc
2 Q, V# q2 x! {7 H. V00401304  |.  83C4 10      |add    esp, 10 + w, Z+ K- _' n# B
00401307  |.  83C4 F4      |add    esp, -0C
% {. M) S# k; l( S0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,"" " R8 o  H  n- t
0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf " p$ z7 q7 T- `% E1 v) c3 c, s  ]
00401314  |.  83C4 10      |add    esp, 10
" n9 b0 \% b  c0 R( @00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1
) S: Z- E: N7 N" D) D6 a# `0040131B  |.  75 03        |jnz    short 00401320
4 e4 ^* a0 L  d. X0040131D  |.  EB 03        |jmp    short 00401322
, I: B$ m  j& E0040131F  |  90            |nop ) ^5 c$ k5 n: t( `
00401320  |>^ EB B5        \\jmp    short 004012D7 8 M( |  E! |( k/ I4 X/ t* |
00401322  |>  C9            leave 9 Q8 {7 x9 E  G7 p+ T3 V
00401323  \\.  C3            retn
3 k1 V- [& _! v) M. k/ S, Z4 x00401324      00            db      00
; m& d! t( q' _00401325      00            db      00 ' u( `, m- Y8 O) ]$ g& s
00401326      00            db      00
; D! k+ l7 `) L2 ?3 ~: F00401327      00            db      00
. e# L1 B$ ^6 P% ~00401328      00            db      00
: a9 i8 ]6 A; Z' P2 G& W) G00401329      00            db      00 6 G" c& Z8 }' ~$ `
0040132A      00            db      00 : D1 I5 P, H0 C4 ?1 y, _
0040132B      00            db      00 0 `( g5 D& W3 D' J* j3 z; `; V
0040132C      00            db      00 8 w0 H# d: x: g5 M4 u* K
0040132D      00            db      00   Q; n! i4 S7 Z+ X0 {3 }  I3 k
0040132E      00            db      00
$ i. I5 W* B- g0 J& `0040132F      00            db      00 7 f. S8 W) [- U8 e" F/ d/ |* c
00401330  /.  55            push    ebp ; `" t* T! ]  w9 N# z9 G: l
00401331  |.  89E5          mov    ebp, esp   K0 w9 r$ s% {' c
00401333  |.  83EC 08      sub    esp, 8
) ~% p- B8 q# e$ H+ Q00401336  |.  A1 10204000  mov    eax, dword ptr [402010]
# d6 E' b. _. u# E8 m8 S) i0040133B  |.  8338 00      cmp    dword ptr [eax], 0 * u" u. |! |4 C
0040133E  |.  74 1D        je      short 0040135D
0 K1 g6 u0 b' \* ~1 ^" z" j# O00401340  |>  A1 10204000  /mov    eax, dword ptr [402010]
9 R$ ^8 W; i* G# o% e00401345  |.  8B00          |mov    eax, dword ptr [eax] * m/ {. R7 |$ ]; _( r8 _( F) {& O0 e
00401347  |.  FFD0          |call    eax " A, P2 g  l8 U9 V
00401349  |.  A1 10204000  |mov    eax, dword ptr [402010] / p$ D. ?1 U9 b) Y: a
0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4] 9 T" d& o8 P* ^4 o# w
00401351  |.  8915 10204000 |mov    dword ptr [402010], edx , s; w4 a% \4 Y! b
00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0 ! P/ M; ]+ X! p  z
0040135B  |.^ 75 E3        \\jnz    short 00401340 ; ^: i# i; Y2 {' v) x8 W9 I
0040135D  |>  C9            leave ( Z& R0 H6 a, y) o* Z0 W" k& ~
0040135E  \\.  C3            retn
, F4 O$ }, p* y1 P( ~; S0040135F      90            nop
7 n  f1 Q3 y& l3 F( w9 e00401360  /$  55            push    ebp
9 e9 c" ~4 L" f0 L9 n6 U/ e' \* Z# R00401361  |.  89E5          mov    ebp, esp
$ K  t: A' c, _4 [2 k7 w# |00401363  |.  83EC 14      sub    esp, 14 : F: {: o  ?7 I) z! y: b
00401366  |.  53            push    ebx
; B' s3 x0 }9 I  v7 J00401367  |.  A1 58144000  mov    eax, dword ptr [401458]
5 Y4 w/ }* S6 u; _. H0040136C  |.  83F8 FF      cmp    eax, -1
% u! S" z1 j: W5 n' o* J. [0040136F  |.  75 19        jnz    short 0040138A # L( f; m0 n7 j4 D  o" C3 B& N
00401371  |.  31C0          xor    eax, eax
8 u/ w* Z* B  i! @1 Q6 }00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0
* N) J0 N8 |( n0040137A  |.  74 0E        je      short 0040138A - r1 e/ \2 k+ V7 W
0040137C  |.  BA 5C144000  mov    edx, 0040145C
1 u7 X2 ~, }7 x  C5 b, L# N, J00401381  |>  83C2 04      /add    edx, 4
+ {% q' q2 A% L( d3 |9 i00401384  |.  40            |inc    eax ; s6 ^0 R5 Y& ?( N
00401385  |.  833A 00      |cmp    dword ptr [edx], 0
8 o3 K& ^9 |" z7 M' v' G; \00401388  |.^ 75 F7        \\jnz    short 00401381
+ e5 V7 \5 A& j1 U/ `0040138A  |>  89C3          mov    ebx, eax 7 c" P% H7 B4 v3 j$ @5 s
0040138C  |.  85DB          test    ebx, ebx 7 k2 Q* }6 r6 D" G/ I; S: F; o
0040138E  |.  74 0C        je      short 0040139C , X& s4 }5 n& l& e6 V
00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458] ' w2 N# p/ D1 G' p6 C0 U
00401397  |.  FFD0          |call    eax % P$ k- q' P. }1 W' ?  J5 a
00401399  |.  4B            |dec    ebx
1 F3 e; K& d9 y$ ?0040139A  |.^ 75 F4        \\jnz    short 00401390 9 t& s' T: Z( O. [& m# C' `
0040139C  |>  83C4 F4      add    esp, -0C
9 A/ C+ @7 E2 R5 f# B0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330 : v+ U7 V0 e/ \
004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit
7 \9 Q1 D8 S& J, R* H! s004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18]
) @9 b8 P: K* k0 n" ~5 U004013AC  |.  C9            leave # h4 M1 r! h/ W3 C4 f: H
004013AD  \\.  C3            retn : n* M% }, K/ n' E% J
004013AE      89F6          mov    esi, esi / s% c& x- a9 D
004013B0  /$  55            push    ebp ' F3 O8 F7 z1 g* ]9 L0 y" e
004013B1  |.  89E5          mov    ebp, esp
- W. J: y" s3 o4 d' T; M. o3 U004013B3  |.  83EC 08      sub    esp, 8
" W+ B8 p1 z2 x/ V$ i$ h004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0 8 g$ Z. u" c& J9 ^8 H2 K# v
004013BD  |.  75 0F        jnz    short 004013CE
/ P9 w' Z  m) c- V7 R4 O, Q$ `( ^004013BF  |.  C705 14204000>mov    dword ptr [402014], 1
, p0 g! N# m( ]3 G% w004013C9  |.  E8 92FFFFFF  call    00401360
2 |% w2 ^0 G; p$ W# D4 W6 O004013CE  |>  C9            leave 3 T" P  H2 e. ?
004013CF  \\.  C3            retn * r; D' }) @  Y- l
004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode
/ {3 \) ?5 d/ m3 k# j004013D6      90            nop   C3 _% g; {4 N  {% u; x
004013D7      90            nop
, q( q8 G9 ^1 v* _! v  ?! F/ H; f004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob * _! M% d6 N$ \: M
004013DE      90            nop " p/ M7 T1 n2 y" L( G& D6 @
004013DF      90            nop
0 a! q% J. f0 h  X; ?; }) I6 ?004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type 9 X0 c" S: f; O7 Q6 j7 Q
004013E6      90            nop
6 s9 y& S* |9 T# R004013E7      90            nop
/ E+ e! @) a+ j! j8 b6 }004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit ; r* \- F/ k& @4 V7 K
004013EE      90            nop ) v2 D( U% j1 I: }
004013EF      90            nop
" m5 i4 }5 h! Y8 n# c: G- e2 S004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ 4 S5 E  j; q. r2 m+ D, J
004013F6      90            nop
- k; k  ]% g4 d) R4 c1 B5 K; X004013F7      90            nop # x8 ]) I) z0 k4 m
004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset * E0 Z% E7 E% N1 F, ^6 B
004013FE      90            nop . K5 K/ w+ ?1 `7 U5 ~* H  u" t9 O
004013FF      90            nop
5 Q0 P/ W0 q( i' ]2 k9 V" ]- o' `00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal
# p% V+ i, g9 x- c00401406      90            nop
* Y# ]: P  M+ p00401407      90            nop
  P# ^! }7 i/ A! v0 E00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno 4 u2 S# ~- K/ Z  @! g! A/ x: t
0040140E      90            nop
" f+ G. g& b- A5 `" y4 F/ \2 M0040140F      90            nop
  x8 g9 B% {/ Y00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode 3 ]7 O& G; c: R
00401416      90            nop
" m- L5 o/ s/ b. ~+ q) p$ \00401417      90            nop ) W+ H( Z3 v* j' j0 a- W+ K+ X
00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs - i9 W9 ?( g6 V. R4 W! q- J- F
0040141E      90            nop
4 R: l6 ~$ J8 y' C( D7 D$ \3 h5 M* D0040141F      90            nop 0 P1 n2 m' Q; m
00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc
; _, Z2 I6 {8 _' I2 _/ D- N! b00401426      90            nop + D/ S/ w: F$ P; i# P; k
00401427      90            nop : \$ ^5 t2 E( G6 V
00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc 6 y0 i& g, v; Y' v! @
0040142E      90            nop # L* Z7 ^' z" A
0040142F      90            nop 6 C" |( L, X6 k: H; z( h: Z  Q. k
00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf
# A8 s0 P( @% @3 {; `* D00401436      90            nop , V( \3 a# Q# e  B( n4 {
00401437      90            nop
4 }# r: r- M* v00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen - f. c, P6 u  Z8 d- U
0040143E      90            nop 1 h! h: w+ _) G8 a" K' o
0040143F      90            nop 3 Z# N' D" m' @. k
00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit
7 @' w  K+ w* D/ b00401446      90            nop # n% R2 K$ [+ z
00401447      90            nop   {2 x* l7 Q5 [) X' ~
00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter 1 ?8 |) C. P4 m! x
0040144E      90            nop
! J' {) a  _6 F/ U( n6 H0040144F      90            nop
( @( C# d) e' e. e0 \  j8 T0 t00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess
! q2 w& P$ H- U/ t9 H) o5 K9 T7 |00401456      90            nop
# c. J! M  S/ J+ `; v6 u00401457      90            nop
% K- H9 _5 t0 w, O5 `' v  g00401458  .  FFFFFFFF      dd      FFFFFFFF 6 l+ v. x" l6 A5 F& K
0040145C  .  00000000      dd      00000000 ; N4 S  K. F! h2 v, l& C
00401460      FF            db      FF
0 V  _% J: P$ n' A1 [00401461      FF            db      FF 9 C6 h2 i6 l  j& _8 P% @
00401462      FF            db      FF
( k  _& Y) B" U0 @# d* l, I00401463      FF            db      FF
) F* K$ N( v/ a  k0 _8 R00401464      00            db      00
. }5 M# l5 {" `9 m5 V00401465      00            db      00 ' R6 o) I; a6 {+ e# w. T6 C% V8 i
00401466      00            db      00
' E7 m9 j2 F. t$ X* Z00401467      00            db      00

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2009-10-10 22:14 | 只看该作者
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。
: o/ S" J! s; E7 G深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?
8 b3 f% a& D- \! o6 x: z* `比如不用fgetc这个标准c函数,而用mfc的类似函数来编。9 I! w3 _, |7 I# E' P0 ~
让我们看看生成的汇编代码有什么区别。- |8 g" k" v( L
你也可以试着修改一下。
回复 支持 反对

使用道具 举报

7#
发表于 2009-10-12 11:51 | 只看该作者
MFC是C++的类库吧,我不是很熟悉
# q+ A" P5 ?- l
6 R' @4 w) D5 m0 T% n说说我对单字节内核的看法:! Q. j/ o& q6 S1 a. c0 T

* }: c# c7 B4 @# b我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符,, ~# S, T5 S# f/ b6 ?
然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。
6 j$ }! p* k" d( p1 b  F; }
1 f2 ]5 g2 O) K2 K" o( E# F举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核5 N* U/ R" z) N
就很有可能无法显示中文,尽管那些中文数据都存在。
( G1 @3 Q' g% U) \7 d
8 j; X$ r% |5 Z6 M$ B( g* X+ G( `所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。: Q+ e9 q# }; C5 a8 B
; r* `5 L1 v$ @/ U+ y4 ^0 W
因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。
; C3 h; ]. k1 @4 `6 m  C6 c5 Z
8 m/ Q, W* ~0 U" y; P1 y中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。$ @' z) n# E5 s9 B# D$ x
* t# i0 ~! b8 d# \. h( t6 @5 m
那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字( g* @& w1 C: X" s" L6 M

& n( Q2 L. b6 Q$ o$ q那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。# M# ]! _! B+ \. Q4 Y- J$ p( s$ M  e7 I
/ s- G7 K: E. ]& ~8 q( N
就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2009-10-12 13:09 | 只看该作者
其实,单字节内核一般有2种情况。
) z3 k& z6 I( w0 J" I4 E1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符- @; {8 W+ o; P5 W& a. B
2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了
% Q/ P$ {3 p" h" t3 m: h
5 w: E3 K2 I$ h  ^; M真正的游戏应该会用这2种方式中的一种来处理。
& _  K- X, q6 M' V6 @1 ^这个单字节内核模拟程序其实只模拟了2的情况。* ?; y+ {8 R2 l% y$ s. [. k
要模拟1的话就要制作一个图形程序了。) [) o6 I% C1 E8 M3 n) |

* z8 p1 U5 {+ e8 g: B这个单字节内核模拟程序本身的意义其实不大。
, A) L# Z2 J  ~, f( C% f其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
回复 支持 反对

使用道具 举报

9#
发表于 2009-10-12 15:34 | 只看该作者
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。, w; R& S9 [' f' s, d
所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。4 l  p* o5 ~2 Z2 n
这样的理解对不?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2009-10-12 16:44 | 只看该作者
引用第8楼深绿于2009-10-12 15:34发表的  :% d; b+ c  E& R6 n6 B) B
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
3 T- z% ~# D. _3 W所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。% J: j8 ^& K% G
这样的理解对不?

% o' G, Q( ~  D( ^理解完全正确。9 g% e. x* [3 f
不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。; D1 ?0 X8 D. ~- P* S+ d

: @- a  X& m/ ]$ o& ?有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。) Z  s; X% l& {2 Q% H/ Y
然后逐个nop测试,看有什么变化。
% ]9 n* S. ?) ?9 E9 B
2 k' q+ z! R6 o  U你可以参考一下这篇帖子
% F$ H1 [7 P* \2 S# W- p% c游戏汉化中的双字节问题处理原理* o- D/ @% ^) Y. Y
https://www.chinaavg.com/read.php?tid=18709
. W( I5 _% M" b$ ~+ b, N6 f: x/ z作者好像是左贤王主力人员。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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