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

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

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

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

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

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

深绿,你好,有时间的话请帮忙制作一个单字节内核模拟程序。3 M) z  c' O6 S

) k/ f! H$ ~" T  \6 p4 c题目吓人,其实很简单。7 z5 e/ I8 i. ^; Y4 R
在程序里面设定一个固定中文字符串。9 u' g5 B$ j3 S1 v; q
然后按字节读取。小于0x80的字节输出到out.txt文件即可。
9 S# n3 [0 u) K
! {6 z- H6 g3 W+ C* g  o这个程序模拟了单字节游戏后输出乱码的情况。% B8 ?1 f3 n4 ]/ t
接下去我们可以利用它进行汇编级研究。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2009-10-10 19:10 | 只看该作者
我稍微改了一下程序,包里面有个input.txt和output.txt
8 A. V) k2 e, H$ w  i先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
" R4 j( P/ _/ c; _3 {1 }/ j+ j  |: e, u) D3 U3 B2 I
但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-10-10 21:47 | 只看该作者
引用第1楼深绿于2009-10-10 19:10发表的  :# P  O" Z, T( j2 L% i
我稍微改了一下程序,包里面有个input.txt和output.txt
7 g6 r+ i/ _- Z8 p% D1 D先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
8 f4 B9 T. g" I& r( X
) v1 s4 g0 H  F& r* x但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?
9 t/ |1 H1 j. w+ p; W& {( ?) D! S% X
是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。
. w; ~0 f8 h' Q1 \. B这就模拟了汉化了文本以后,中文字符被过滤的情况。
& c3 M5 {9 V* X# r) i& @& @' ^) h. \+ _* g2 v5 m4 Y1 m
接下去就可以在汇编级用OD载入,开展研究了。
3 u- f) x* G8 n  p想办法把和0x80比较的地方去掉就行了。
回复 支持 反对

使用道具 举报

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

使用道具 举报

5#
 楼主| 发表于 2009-10-10 22:02 | 只看该作者
由于这个程序很短,OD里面的汇编代码也很短。
9 }& q" N7 \: h8 x请看红色的部分,这就是和0x80比较的部分。 8 `8 H9 C7 C5 b5 v7 T1 C
把这2句NOP掉,然后保存修改后的文件为exe。
% c4 N+ Q, b5 y1 t我们发现input.txt里面的所有内容都能被输出了。
5 U& D; G0 s* n2 T  U* N" p附上修改后的exe. ' T( x& b4 v3 P7 X" N4 M& `7 C
深绿,你可以把这个操作过程试一下,练习一下.
' h: U5 Z; i4 K  P. q9 a
) Y: d5 o& ~3 Z- E9 N00401000  /$  55            push    ebp
& c6 i+ M$ ~6 V1 C! @3 V) Q2 D00401001  |.  89E5          mov    ebp, esp
+ N# H3 R* B( {  B" f8 [; x00401003  |.  83EC 18      sub    esp, 18
2 O3 n$ p( s( F00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0
, X& A; L! \2 J0 Q( e0040100D  |.  83C4 F4      add    esp, -0C   h; \0 K- T. g  V
00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4] ( S* O& ~% t' Z3 r+ b% U
00401013  |.  50            push    eax : J, {  F- `+ |# }9 ?9 `
00401014  |.  FF35 08204000 push    dword ptr [402008]
% R7 G; i/ p7 Y9 O( ~0 a0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8] 5 U+ _8 c' n  p
0040101D  |.  50            push    eax
; q8 @: C. o5 P" A2 @) T0 J+ ~0040101E  |.  68 04204000  push    00402004
+ ?# a0 Z% i. K  a7 z9 _  i5 t00401023  |.  68 00204000  push    00402000
5 Y- w% t& r0 C6 g00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs>
6 Z5 S  q6 x3 F/ [* J0040102D  |.  C9            leave 2 Y# s" _1 r) q- r8 m8 N0 i& H
0040102E  \\.  C3            retn , Q! s! |0 M1 e# Q- ~
0040102F      90            nop
1 w4 `2 O5 H+ F( v* c00401030  /$  55            push    ebp
* X/ B0 E0 O9 `( D4 [00401031  |.  89E5          mov    ebp, esp
0 h. U/ ~' V8 ]  u- n; U2 ?8 s/ J00401033  |.  83EC 08      sub    esp, 8
7 J8 k2 b8 R! k9 e  D00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C] 7 B# D( }  }. z: u$ ]
0040103C  |.  85D2          test    edx, edx 4 x. \8 J5 N" G
0040103E  |.  74 7B        je      short 004010BB
4 R( Y/ @2 t* ]$ I3 y00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>> 6 V! _/ Q# @  u, b0 E
00401045  |.  8910          mov    dword ptr [eax], edx
/ n- ]0 I+ z) i00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
) G- @( o& E, ]3 U6 {0040104C  |.  85C0          test    eax, eax ' I! b' k; j. q
0040104E  |.  74 1E        je      short 0040106E 9 z, [5 d7 F3 ^# l
00401050  |.  83C4 F8      add    esp, -8
% f- x' j' Z- O/ f00401053  |.  FF35 0C204000 push    dword ptr [40200C]
2 u# S+ l# H; `* D/ p2 K+ |00401059  |.  83C4 F4      add    esp, -0C * |5 R. U2 C+ L) c1 t
0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob
: v# k- a( r( R. u3 `- e6 W- L3 o0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno 4 U9 N5 v7 `. }. ?
00401062  |.  83C4 10      add    esp, 10
: L9 s5 \* v; ~4 P! W00401065  |.  50            push    eax                              ; |handle
' a: c; f9 S" S9 y% N: M00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
  [: l" I9 C* x/ s  D" a0040106B  |.  83C4 10      add    esp, 10 - X& G4 r1 m1 X( R9 ]2 Y  t; D8 h, C  ?% d
0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
- J( E# {& o8 W6 y  @0 j00401073  |.  83C0 20      add    eax, 20
, f* K! ^8 o- g  Y% x00401076  |.  74 1E        je      short 00401096 . Z8 y# ?9 Y. @7 M) m, v0 D& o
00401078  |.  83C4 F8      add    esp, -8 / E1 |6 [  {, b
0040107B  |.  FF35 0C204000 push    dword ptr [40200C]
" U& x" u4 c6 P8 u00401081  |.  83C4 F4      add    esp, -0C 8 t2 q+ D3 f* p$ k0 o
00401084  |.  50            push    eax                              ; /pstream
0 \: g6 D2 [9 Q/ |. h00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
' n9 @/ y8 v+ K# A8 p3 @7 L' E0040108A  |.  83C4 10      add    esp, 10 " i5 P. g5 f8 q+ K
0040108D  |.  50            push    eax                              ; |handle
/ ^. M/ J9 u, e: Q0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
/ _' a1 H0 i3 b! M3 M3 G$ l2 T00401093  |.  83C4 10      add    esp, 10
! }/ I" F. u- F1 x0 Q: X, t00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] . ^% v$ b- M: C5 G
0040109B  |.  83C0 40      add    eax, 40
. n+ |: [1 q) @( _1 I% f0040109E  |.  74 1B        je      short 004010BB
- k7 g) S+ R% D004010A0  |.  83C4 F8      add    esp, -8
. T  E6 F( A/ U6 X* w; q: _& q004010A3  |.  FF35 0C204000 push    dword ptr [40200C]
, b# b& e$ ]; r. D0 U; U004010A9  |.  83C4 F4      add    esp, -0C
- _5 _6 s2 h+ v( U* }004010AC  |.  50            push    eax                              ; /pstream $ w) Y; B9 M  [- H! k
004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno 3 i$ k/ [/ z& `- C8 w- h( P9 ^
004010B2  |.  83C4 10      add    esp, 10
# q. ^& x5 d& `! ~$ l2 H004010B5  |.  50            push    eax                              ; |handle
% ]7 V( r/ g# C) U; r004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode 5 e, X- X& F% ^4 D
004010BB  |>  C9            leave & n) b5 \( d* f
004010BC  \\.  C3            retn
: v! C8 |7 Z. N& ~  x  ]- u004010BD      8D76 00      lea    esi, dword ptr [esi] / G2 t$ Z" g/ a& d' ]- j
004010C0  /.  55            push    ebp
9 v) f1 \- k2 }* f004010C1  |.  89E5          mov    ebp, esp , k! L# _. X! m4 r
004010C3  |.  83EC 10      sub    esp, 10 # l* q# W) W8 ~. I, y
004010C6  |.  56            push    esi 2 h4 \! s0 Q" c/ d3 B( K8 w4 |
004010C7  |.  53            push    ebx
( ~; `- t% a2 E004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8]
- c0 ?- a3 `  j' M; F0 k/ Q004010CB  |.  31DB          xor    ebx, ebx
  c' I# ^1 G4 t# h: h+ |004010CD  |.  31F6          xor    esi, esi 5 g$ n+ n6 E, p
004010CF  |.  8B00          mov    eax, dword ptr [eax] % k/ E& t0 ~" z* p/ w/ t4 k
004010D1  |.  8B00          mov    eax, dword ptr [eax] ; G9 v% \9 \. J4 L* o% R8 v
004010D3  |.  3D 910000C0  cmp    eax, C0000091 6 Y! ~0 M  h8 q% f7 e( [: S' A
004010D8  |.  77 16        ja      short 004010F0
; b) ~( ?8 n1 ]* w. Z. R! v* s- W004010DA  |.  3D 8D0000C0  cmp    eax, C000008D # |  w$ F( r# N* }  Z) J
004010DF  |.  73 4F        jnb    short 00401130
( P6 M8 a( {- t$ W4 K# E! H/ V004010E1  |.  3D 050000C0  cmp    eax, C0000005
& z, q7 F# s) T0 r' }$ x' g/ N004010E6  |.  74 18        je      short 00401100 0 r4 W  D; e0 k" g
004010E8  |.  E9 86000000  jmp    00401173
9 O+ e5 w' J! s004010ED  |  8D76 00      lea    esi, dword ptr [esi] $ V' S! b4 @$ N$ A; u6 x- ^
004010F0  |>  3D 930000C0  cmp    eax, C0000093 7 o' {9 S; `) ^* X0 {8 Y
004010F5  |.  74 39        je      short 00401130 1 e3 O6 k3 P- X  U8 K6 _# f9 ?
004010F7  |.  3D 940000C0  cmp    eax, C0000094 6 u5 K" M& G1 X5 I* ]" L
004010FC  |.  74 37        je      short 00401135
$ F7 a2 o% c' `5 C/ A004010FE  |.  EB 73        jmp    short 00401173
: t2 N: t* Q+ O* ~: H7 K00401100  |>  83C4 F8      add    esp, -8
4 v. X/ V- y9 G0 L/ L0 ]) T$ J00401103  |.  6A 00        push    0                                ; /func = NULL , v& K8 ~# t* K! u
00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV
3 a. B* @% t4 S- g2 N7 P$ `00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal   r. \8 @8 J/ D/ a: H
0040110C  |.  83C4 10      add    esp, 10 , J* l" b. L& J7 u9 ?3 i
0040110F  |.  83F8 01      cmp    eax, 1 2 I- q# i- x, N
00401112  |.  75 0E        jnz    short 00401122
( [. U; s2 G; k$ X00401114  |.  83C4 F8      add    esp, -8 # o& \: J% G/ H; [: W2 c' i
00401117  |.  6A 01        push    1                                ; /func = 00000001
5 J" h( r7 N/ X; }2 q1 l00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV 6 l/ G' D1 ^* }: y1 V" S$ ^
0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal
8 a7 Q  l6 ^4 S) w00401120  |.  EB 4C        jmp    short 0040116E
1 l" O* y/ ~$ s$ [/ z8 u& d00401122  |>  85C0          test    eax, eax
% \5 P! d7 s. n$ b" n* ?& g& y8 A4 u00401124  |.  74 4D        je      short 00401173
8 a! x" B* V2 b/ ?  ]* z+ ^00401126  |.  83C4 F4      add    esp, -0C
: k7 i+ B; v/ O1 [00401129  |.  6A 0B        push    0B 2 C/ B! ^) Y& ?6 q
0040112B  |.  EB 3F        jmp    short 0040116C & f2 n$ X: H: }5 N6 V
0040112D  |  8D76 00      lea    esi, dword ptr [esi]
% G: n  {6 N0 q7 h+ [$ a2 k00401130  |>  BE 01000000  mov    esi, 1 0 s$ n& p: `9 N6 a
00401135  |>  83C4 F8      add    esp, -8 5 @: Y+ _9 q4 b% a! Y) L
00401138  |.  6A 00        push    0                                ; /func = NULL ! b- V: u0 z& m6 ~) f
0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE
/ Z- v& d' v* y; o+ f8 Y& F+ o0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal . Y& \! C& {/ d' g, U0 g3 A  R
00401141  |.  83C4 10      add    esp, 10 4 P) G! n, E& J# x& J
00401144  |.  83F8 01      cmp    eax, 1 % }% z. @' _/ @. o. L
00401147  |.  75 1A        jnz    short 00401163 ) _, O$ }0 x4 B. L, w& D
00401149  |.  83C4 F8      add    esp, -8 . T. z1 n. X2 s% V
0040114C  |.  6A 01        push    1                                ; /func = 00000001
# y7 k2 w  X  v) {$ A0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE 7 M. k* @6 n* U) w1 b8 S$ b
00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal ! w. w0 N7 N! R" R
00401155  |.  83C4 10      add    esp, 10 2 U5 O! `( A/ l7 r
00401158  |.  85F6          test    esi, esi
- d0 u& {1 h& F% l. h# F+ r0040115A  |.  74 12        je      short 0040116E + u  U0 ?% }/ z" b/ m, Z
0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset
: `( A8 W( h' }% {9 ]: r00401161  |.  EB 0B        jmp    short 0040116E & O* ~1 m) j6 i7 }
00401163  |>  85C0          test    eax, eax
& i4 F3 B0 r4 O- D& ?4 i6 {00401165  |.  74 0C        je      short 00401173 9 O3 u; \5 Y; }6 D' A( X; b& K
00401167  |.  83C4 F4      add    esp, -0C
1 `2 r3 ]$ I  |4 C1 B0040116A  |.  6A 08        push    8
7 E; U$ H% J& Y  B  U9 D! K% ~9 E0040116C  |>  FFD0          call    eax 9 x0 U$ s" v2 \
0040116E  |>  BB FFFFFFFF  mov    ebx, -1 ( e! d9 K; G( r8 v2 I. y
00401173  |>  89D8          mov    eax, ebx
) W1 v: S% g3 A/ h- C00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18]
1 P' H4 p2 h) h  x' T0 S! @00401178  |.  5B            pop    ebx / c; j7 U) n8 c1 h2 u- a8 J& j" b
00401179  |.  5E            pop    esi
$ J& w" u' p: d8 W+ i9 P5 K2 {0040117A  |.  C9            leave , ^; h; b1 l$ ~! x) R% V' n
0040117B  \\.  C2 0400      retn    4
* b$ P$ w- Y* ^' t* f. U4 \0040117E      89F6          mov    esi, esi ( j. E2 q. ]$ t1 B! g
00401180  /$  55            push    ebp ! F$ Z9 C! i* h" b0 f) b5 o/ l  N6 k
00401181  |.  89E5          mov    ebp, esp 4 S& j# x) \, Y2 H+ g: H9 o$ T! ~
00401183  |.  83EC 14      sub    esp, 14
. D8 n4 D6 T3 j% _00401186  |.  53            push    ebx 3 |) z$ k! Z& I3 V3 w* c
00401187  |.  83C4 F4      add    esp, -0C
$ A; }: ]( p/ m7 r4 W) y+ d0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0 0 x: K  g3 l4 C4 Y( ]
0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter ! {+ r2 j& I& `+ e( e" f
00401194  |.  83C4 FC      add    esp, -4 8 @0 ?0 R# ~5 U( \& [: S
00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset # K, J1 O9 P. J
0040119C  |.  E8 5FFEFFFF  call    00401000 3 K# f4 Y+ o2 c7 n
004011A1  |.  E8 8AFEFFFF  call    00401030
* a% V, q' y/ C0 |004011A6  |.  83C4 FC      add    esp, -4
4 h4 U% `* X9 K) c004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ>
2 q' s, U6 }: H4 u3 D0 C0 j' X004011AE  |.  FF30          push    dword ptr [eax]
: ?$ p2 T+ i& p% g1 T/ E) F004011B0  |.  FF35 04204000 push    dword ptr [402004] ; |( |/ l, V+ a
004011B6  |.  FF35 00204000 push    dword ptr [402000]
5 \% e( h5 y: b" P, r/ |004011BC  |.  E8 AB000000  call    0040126C , V) [$ h+ h% r* y( j/ k* c- r  T
004011C1  |.  89C3          mov    ebx, eax 1 E8 e+ |1 c/ X' l# l/ ^
004011C3  |.  83C4 20      add    esp, 20
4 d1 @5 L# X% \004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit
( d) y% B! p' t3 m004011CB  |.  83C4 F4      add    esp, -0C ) j7 I* }; |) r$ b( s, O
004011CE  |.  53            push    ebx                              ; /ExitCode
+ j9 p: }' c$ _2 n" z( O004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess
6 q/ J1 p1 t; N' S) a; o, w1 }5 e004011D4 >/$  55            push    ebp / p6 h% b' z- z: R2 f; }
004011D5  |.  89E5          mov    ebp, esp $ c9 q* Y, a$ B% x
004011D7  |.  83EC 08      sub    esp, 8
4 n; C, K* h- Q9 r* J  n004011DA  |.  83C4 F4      add    esp, -0C 7 P! a* }; h8 C+ I1 N
004011DD  |.  6A 01        push    1 6 g. u/ `& m2 |3 _6 R5 a
004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> * n* @# V  h) ^
004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> ) O) M) p' K! I5 P- z) k
004011E6  |.  E8 95FFFFFF  call    00401180
% r$ h, d; i9 a1 _+ M1 f  z004011EB  |.  31C0          xor    eax, eax
  L% k! y4 E& o1 z5 i. \004011ED  |.  C9            leave
' m% u& h' c! j- e% r004011EE  \\.  C3            retn
7 k' {/ b! v! E) w004011EF      90            nop 9 ?6 K; R9 x; R
004011F0  /.  55            push    ebp
  L% e* ~, F5 I" M004011F1  |.  89E5          mov    ebp, esp " ^1 z; q1 _) U- y9 [6 j  }; A
004011F3  |.  83EC 08      sub    esp, 8
! T% j9 g& D+ q4 q004011F6  |.  83C4 F4      add    esp, -0C 7 }( d5 K7 v" u2 q/ h
004011F9  |.  6A 02        push    2
3 {6 N9 `3 Y: A2 _) {5 |004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> ( b- ~5 h" i; H- W) r* Z& f
00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> ' Y# m0 S9 Y4 G! X  S9 v- G! Q3 u
00401202  |.  E8 79FFFFFF  call    00401180 1 v# H: M& W8 E
00401207  |.  C9            leave , G$ D$ R" W3 p
00401208  \\.  C3            retn : r( R0 p+ v. C1 ]
00401209      00            db      00
. E' i" h8 h6 I- m$ l0040120A      00            db      00
5 v( G! Y' L3 T& Z# H0040120B      00            db      00 0 A. a: ~6 V- l0 \9 A, g9 i# @5 q
0040120C      00            db      00
: s0 C+ H+ u1 \' Y0040120D      00            db      00 1 B1 D% Q& ]6 Z' [% I
0040120E      00            db      00
8 S8 T2 l% W3 |( a- u1 ?0040120F      00            db      00 4 d2 R* y4 ?3 I' a: f- @( g
00401210      72            db      72                              ;  CHAR 'r'
! V# Z9 b+ _$ E- f00401211      00            db      00 4 q# m; {- W$ j/ x
00401212  .  69 6E 70 75 7>ascii  "input.txt",0
/ S5 k# m2 I" j  Z% f+ }0040121C  .  43 61 6E 27 7>ascii  "Can't Find input" 5 q& M5 e6 Z" M3 z; o
0040122C  .  2E 74 78 74 2>ascii  ".txt!",0
1 y' |) K- X9 m00401232      77            db      77                              ;  CHAR 'w' $ {' x( r2 u; E) P6 t
00401233      00            db      00
# X/ T  i1 f5 e00401234  .  6F 75 74 70 7>ascii  "output.txt",0 3 b, v% {, w) x9 X! \' v, [; X( \
0040123F  .  43 61 6E 27 7>ascii  "Can't Create out" ' k' h3 q2 I! c) B
0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0
0 ]0 D# P, u( i, Q' C00401258  .  6F 6E 65 20 6>ascii  "one char outpute" ' v0 \0 A! w0 P, ^, S
00401268  .  64 0A 00      ascii  "d
: Q- K+ t0 T0 q5 D) n7 J",0 : A( t. p' b9 P; j
0040126B      90            nop # n: w, [( h3 J( ]4 Q9 d" g
0040126C  /$  55            push    ebp : E5 l: r4 n9 P" ~- G+ m* E
0040126D  |.  89E5          mov    ebp, esp
* D+ V* W# s' }- L  ~0040126F  |.  83EC 18      sub    esp, 18
: G( J) E8 n: k" f1 i3 H9 m00401272  |.  E8 39010000  call    004013B0 9 H( U5 |1 w& B+ J1 ]! M0 l
00401277  |.  83C4 F8      add    esp, -8
- c) ?0 r1 J: |  L$ y0040127A  |.  68 10124000  push    00401210                        ; /mode = "r" / f5 |9 d$ e0 `2 }! H" e
0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt" 0 K* N9 M: w- E) e$ S
00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen
' Q* j; S5 p6 }( W- L7 }% k; I00401289  |.  83C4 10      add    esp, 10 4 s& Y: L1 a& Z3 M. W
0040128C  |.  89C0          mov    eax, eax
5 A- e+ t9 V/ ~9 c3 d" @. v0 f0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax ! q  C+ _4 i$ U3 P7 z" L
00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0 ' a+ Z, U+ _. o/ g; E% w  Y
00401295  |.  75 10        jnz    short 004012A7 2 S. v% }! ?% f2 d  G* d
00401297  |.  83C4 F4      add    esp, -0C
% G$ x& F* m/ z% e% E0 q0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!" 7 Z$ G% M8 N8 X" I" \7 _
0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf
- [  j# V. L. l0 Q: e: o/ {004012A4  |.  83C4 10      add    esp, 10 6 Z) I) a: N3 L* I$ H! ~
004012A7  |>  83C4 F8      add    esp, -8 1 C" V9 u' q+ t" g% s
004012AA  |.  68 32124000  push    00401232                        ; /mode = "w"
4 [& y2 w: ~7 n004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt" ) q! H& Q) D; M4 B8 b) e
004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen ) p: V* o* {6 N
004012B9  |.  83C4 10      add    esp, 10
$ k1 ?8 V3 Y3 k  ?. g004012BC  |.  89C0          mov    eax, eax ) Q5 Z( T4 i/ i% y  V: `8 ]
004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax
6 R7 @6 p1 \( J004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0
: Q7 |/ |3 N* M+ ?  q/ J* m1 A004012C5  |.  75 10        jnz    short 004012D7
% l# Z' C/ R/ h: \004012C7  |.  83C4 F4      add    esp, -0C
% j) n5 N3 ~: [6 u5 n+ r2 M, }004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!"
9 k1 Q! x) h$ B3 M7 K004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf 3 X. u+ t3 I3 b3 A: s" B
004012D4  |.  83C4 10      add    esp, 10 6 I+ f+ V0 {7 X5 o
004012D7  |>  83C4 F4      /add    esp, -0C
* D! T3 w6 s& w004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4] 3 C( X* m$ b# B
004012DD  |.  50            |push    eax                            ; /stream / A# M# O" H. n" ~
004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc : r& w5 I$ M& X4 \1 @, u- |3 A
004012E3  |.  83C4 10      |add    esp, 10 : c, W) n- f; M/ v/ t( U$ g
004012E6  |.  89C0          |mov    eax, eax ! D3 `( ~. g* `" V
004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax
. s0 i% q# Y) \8 [0 ~004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80
5 u7 F. }- R& o5 i! h004012F2  |.  7F 23        |jg      short 00401317
. D$ t: F* k& `) z! L) r  k6 e& Y
004012F4  |.  83C4 F8      |add    esp, -8
5 v. K; u! N6 u$ g004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8] 6 Y" _1 x+ D+ u" F! l
004012FA  |.  50            |push    eax                            ; /stream
$ S+ a( e  H  M% C) v- v004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; | , O) f: U( l2 B/ B- K: }/ S# q
004012FE  |.  50            |push    eax                            ; |c * v9 L/ T+ K! ~0 r- a
004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc ; v! g$ G# C. e$ x5 N6 @
00401304  |.  83C4 10      |add    esp, 10 5 }) y' v3 l, T0 `7 B
00401307  |.  83C4 F4      |add    esp, -0C . S; m$ G  g& `- w# I
0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,"" $ U( T+ e/ h; t1 w8 @
0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf 1 w/ O" x; ^6 O( X
00401314  |.  83C4 10      |add    esp, 10 ! G9 Z, o4 i" q& _# e' T$ o7 a% F3 |
00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1 4 L( z% E) k# k
0040131B  |.  75 03        |jnz    short 00401320 ) W9 P  c1 q+ k" y+ i) l
0040131D  |.  EB 03        |jmp    short 00401322 4 b' M( z  i( L- G- k
0040131F  |  90            |nop
( \. s9 \! ]; t00401320  |>^ EB B5        \\jmp    short 004012D7
# U; y6 n' Z1 i2 B2 \" G" T& K00401322  |>  C9            leave 7 f- z) w5 m' _; @: b1 |
00401323  \\.  C3            retn
3 {- ^) p* Z' X/ O: k7 ~( y  r00401324      00            db      00 7 T( b( ^3 Z; ]- h& p
00401325      00            db      00 $ F# s* t- p% S
00401326      00            db      00
6 Q0 v# U4 ~3 h00401327      00            db      00
, m6 J- G: ~# P+ Y3 r! y00401328      00            db      00 : V! D+ ]+ d: s1 T. ?1 S7 @$ S7 G
00401329      00            db      00
  x2 Z- ~& c% T. a" E" r0040132A      00            db      00 . ~! i) \' S" y1 j$ d
0040132B      00            db      00
- Y5 Q# J# E) a5 L. h3 y' O0040132C      00            db      00 8 e$ T* M" f3 d8 a0 P$ I0 K# [
0040132D      00            db      00 . P; z" y  }/ l7 C
0040132E      00            db      00 % r0 S- i# k8 A, n& w
0040132F      00            db      00
- t6 n/ q  Q( z4 d3 Q9 E00401330  /.  55            push    ebp
! @* Q$ |2 o" X6 w00401331  |.  89E5          mov    ebp, esp
4 O) Y7 n3 k( J; n00401333  |.  83EC 08      sub    esp, 8 # o5 e) B' z4 ^. |  W
00401336  |.  A1 10204000  mov    eax, dword ptr [402010] + f! W' {' e# x% I' x
0040133B  |.  8338 00      cmp    dword ptr [eax], 0
1 L* _( _+ @0 f9 c9 I& Q  b! E/ x# F0040133E  |.  74 1D        je      short 0040135D 3 T9 u; H2 j0 P/ [6 F( `: o! T
00401340  |>  A1 10204000  /mov    eax, dword ptr [402010] ' ?, {* q- I2 }9 K% [
00401345  |.  8B00          |mov    eax, dword ptr [eax] 2 @5 o% D/ P3 a- B0 p1 V' @6 h
00401347  |.  FFD0          |call    eax 5 ^/ G( f% r4 v9 @/ [
00401349  |.  A1 10204000  |mov    eax, dword ptr [402010] % c- E  R% k" R5 c6 Q
0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4] 4 Y1 w" I/ p7 U. r
00401351  |.  8915 10204000 |mov    dword ptr [402010], edx ! W/ Y5 I% h9 H$ d4 D3 O
00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0 ' P  N1 D6 ^2 E# [  P0 I) j6 T% B
0040135B  |.^ 75 E3        \\jnz    short 00401340
6 g; W- _/ A& \: R& F" D! r0040135D  |>  C9            leave 0 F+ M+ Y$ C9 @
0040135E  \\.  C3            retn
( y, k2 ~2 }1 f0 [# L0040135F      90            nop
8 q0 S0 [/ g2 B9 t# |00401360  /$  55            push    ebp 6 u% v' _7 M/ T  R3 B( N: ^5 m
00401361  |.  89E5          mov    ebp, esp
* F9 N% Q, q  w2 h1 O00401363  |.  83EC 14      sub    esp, 14 8 V- ?  F3 a" B$ X5 W0 O" s( `8 E
00401366  |.  53            push    ebx . I" J. x, }/ o% C
00401367  |.  A1 58144000  mov    eax, dword ptr [401458] ; }2 o4 Q* ?0 i6 l3 q  r
0040136C  |.  83F8 FF      cmp    eax, -1 $ ]9 N3 L% G2 q2 C0 L% S5 ^
0040136F  |.  75 19        jnz    short 0040138A
- |) S$ h: g5 |, s8 b% t00401371  |.  31C0          xor    eax, eax - V/ D- V5 j- H! n1 V- G
00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0
/ a- V; ^3 [- W( S7 \0040137A  |.  74 0E        je      short 0040138A
2 z  F4 a. Z) k, C8 n2 @  \0040137C  |.  BA 5C144000  mov    edx, 0040145C
7 ^9 ]  ~/ m5 V3 k5 \& S00401381  |>  83C2 04      /add    edx, 4
0 O% K: R5 O  }& r  T' y- j00401384  |.  40            |inc    eax
1 O9 P2 m9 z8 O0 F7 v, D3 f00401385  |.  833A 00      |cmp    dword ptr [edx], 0 4 f3 a2 }, H+ Z; p4 u& X! V
00401388  |.^ 75 F7        \\jnz    short 00401381
( S6 v! T- I6 H, X0 e0040138A  |>  89C3          mov    ebx, eax
4 \# i0 Y/ L: e) q0040138C  |.  85DB          test    ebx, ebx 4 l# {0 c5 h% |) a% g
0040138E  |.  74 0C        je      short 0040139C
" y: t9 D" H- e5 l4 r5 I$ V00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458]
" r8 q: M/ U% |9 [" H" S* ~00401397  |.  FFD0          |call    eax
2 C2 t* f+ g2 K& N, D2 J00401399  |.  4B            |dec    ebx
* N+ d1 x, ]0 s0040139A  |.^ 75 F4        \\jnz    short 00401390 $ I: j% s& k6 p* O
0040139C  |>  83C4 F4      add    esp, -0C
: C9 n/ r, N6 b: K, E0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330 % C) m/ G6 u" M& \6 d
004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit 8 I5 x  G, r, a
004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18] 0 L. G  C1 `: [( P- ~) ~9 m9 `
004013AC  |.  C9            leave - A% ]* N0 k5 ^& Q' x
004013AD  \\.  C3            retn * F9 K8 ?, i% j; [
004013AE      89F6          mov    esi, esi 0 O! C3 G! q# e# n( L
004013B0  /$  55            push    ebp
" o' n  q5 N' y* X004013B1  |.  89E5          mov    ebp, esp   v4 G9 i& c1 O5 F/ @
004013B3  |.  83EC 08      sub    esp, 8 : [! l, \7 F3 x& Y
004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0 5 S$ R" e% _: i& P1 i& p2 ?8 K' Y/ q
004013BD  |.  75 0F        jnz    short 004013CE & G& P( S* @) E# a5 ^! y: i. ^& a3 C
004013BF  |.  C705 14204000>mov    dword ptr [402014], 1
, W  k" j5 o9 a: U, T004013C9  |.  E8 92FFFFFF  call    00401360
' h% f4 p% W4 g1 P$ U( O( t1 g* H004013CE  |>  C9            leave 2 H3 D9 H$ z! c0 v
004013CF  \\.  C3            retn - ~# c4 u0 Q# R$ [1 H
004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode * x1 p" H7 H4 B+ }* Y
004013D6      90            nop + a" C$ P5 X/ c
004013D7      90            nop % w- X: n4 J/ ~" Y: U
004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob
6 K& k% B9 Z# W9 j; t004013DE      90            nop
+ P2 q+ u. B/ Z5 E9 m9 _1 s( G004013DF      90            nop
- \' t6 \2 E. q/ ?8 Q; s& \7 a& X004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type 2 L# p6 ~$ s. L) T6 R% w
004013E6      90            nop / u3 j! G* Y. R0 j
004013E7      90            nop
5 S) n4 P0 o% i3 @: j* X0 t! R004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit
2 H' g% H0 A6 l7 l- s9 x4 M004013EE      90            nop
7 u( x- C/ c8 Y004013EF      90            nop / ^( s" u% L  x. K' t4 T6 `
004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ
  A$ ]; G& D7 ?; C/ d4 l004013F6      90            nop
$ |  B0 h1 t# ^/ i% k. J9 m5 b" t! V004013F7      90            nop / C$ m9 \3 |; i
004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset   r: W8 C" r& b, H: U5 ~4 L- J6 y. v% X
004013FE      90            nop
' H# f3 L3 S* w4 ~8 q' }004013FF      90            nop
" [" x8 {. F8 C00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal 1 |$ w8 G0 s1 H3 K' l
00401406      90            nop
# H, ~0 _# g2 s4 d2 f00401407      90            nop / _' i; }! a( w1 ?
00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno " @$ u$ y8 v( Y
0040140E      90            nop
7 @6 E: j8 x. ?' V0040140F      90            nop
& P3 r/ g2 W) [+ `# n00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode * P! X$ {: X7 g2 H/ L% |
00401416      90            nop 5 ]- O; d; h+ i( b  _
00401417      90            nop
. J/ X, f: a1 Y% D00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs
& }0 A* }' e- I+ N! ?% G0 ^+ Z0040141E      90            nop
6 N* J0 e5 a; s; f% m. m4 `; m% `0040141F      90            nop
: {$ u3 ]9 n% o, v  v4 Q4 I3 `' A) r00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc
% M6 Y$ z0 R1 Y6 ^: N8 y4 v1 F00401426      90            nop
: G# M* N; h# @- ^00401427      90            nop & \4 ^( \' Z& \
00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc # G2 I  T3 U4 R; [& U) V7 T
0040142E      90            nop
* c1 Z' V* q9 Q5 U2 J  j0040142F      90            nop   R# I9 @: p$ }1 L1 B6 k; l. d
00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf
* k3 d0 ?0 n: G8 `5 W00401436      90            nop
# O8 a# |) s0 y00401437      90            nop
/ |* k8 ?9 M1 ?- d* ~00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen
1 C! X- s2 n; d2 r/ B* ]5 j+ Y- O0040143E      90            nop
; a4 {  V8 s' a: u# g6 e2 c/ g/ U0040143F      90            nop
! I; Q$ ~% i- [5 s: [00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit 8 U& u) y- N' L) I' m
00401446      90            nop
4 l$ a+ g* M1 T  U00401447      90            nop
8 J! r1 w- Q# |# Q/ Z. S  a00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter 5 U6 j4 o$ R; ^: I* C3 s
0040144E      90            nop
$ \/ K3 w9 Q$ h+ f. L0040144F      90            nop
+ a+ M- F  X  w# r) i1 {4 y00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess 6 j# s# p( Q* ^) w
00401456      90            nop
: z8 W- `, Q4 j: Y& h0 W! \00401457      90            nop
# M( v" O( B6 B8 N7 b! }0 F00401458  .  FFFFFFFF      dd      FFFFFFFF / l; [- M% i8 t0 h1 L) L3 I
0040145C  .  00000000      dd      00000000 5 f! f: l8 }+ Z  C+ u; g0 F) G. }
00401460      FF            db      FF
! v, B9 e/ D  ~: E) E; B& x00401461      FF            db      FF 6 [* _' T: H# k/ Z/ l
00401462      FF            db      FF 7 _& I: l$ |  {  m1 W2 b  W
00401463      FF            db      FF
0 _, ?. s% ?" L00401464      00            db      00
& H) L9 j2 b7 `- P/ C$ c00401465      00            db      00 ( a- t. f) n  L( P( ]/ [/ F1 @/ k
00401466      00            db      00 2 C1 R' j0 a- v2 p$ ?: J9 w0 r
00401467      00            db      00

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2009-10-10 22:14 | 只看该作者
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。$ @# b. U! L" I! l: O* v* S, u
深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?
9 F" T, |3 y" V# A2 M% I- ]比如不用fgetc这个标准c函数,而用mfc的类似函数来编。
4 n/ B, n2 a. g1 a7 x  z0 x% A让我们看看生成的汇编代码有什么区别。
3 _6 C2 U: P& O, P* r你也可以试着修改一下。
回复 支持 反对

使用道具 举报

7#
发表于 2009-10-12 11:51 | 只看该作者
MFC是C++的类库吧,我不是很熟悉
3 j# t0 v# e1 x9 `0 x# f# \* a
8 c( X! u, P  L* C1 [说说我对单字节内核的看法:4 g( ^6 j& A3 w2 X6 B+ T7 i# s! F
7 E& U: D: R( B& M+ R4 F
我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符," H2 o( Y- y; B. z/ Z
然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。
+ d4 G( b7 i. H# {6 g# c$ Q' U0 D
5 Q7 F9 r6 t0 }. s举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核
4 [3 O5 E8 v& I! C( P就很有可能无法显示中文,尽管那些中文数据都存在。
# y+ E) V! s- D; a: i, T& ?, r/ s# k4 w7 u3 G' O# m% c
所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。+ E+ g0 |( B& {! ?

! T# m0 \7 ~, O1 {4 X% z因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。7 R" N/ ?3 u; t. l+ ?

/ p3 w. T" _) D/ U- t中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。
8 }( A* t$ x# [- y4 m  X
# o5 `. X; J8 K% Z  q那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字
2 a: w) x/ w6 \1 Y% i6 d4 G  y
, ^$ Y1 F6 V1 k+ b9 \' F! C那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。- \2 C# X; s* g+ h1 n: J
' a' t8 C* K8 f& O6 D
就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2009-10-12 13:09 | 只看该作者
其实,单字节内核一般有2种情况。
- ?- u# [$ A1 Q5 c" J8 k1 X0 _' s' _1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符
9 m5 H" M! b. M- f2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了
, X" o% V6 T  m1 M; ^( a0 A3 }9 ^0 o/ t& ^
真正的游戏应该会用这2种方式中的一种来处理。
# _; i! Q' O& E( |4 x) v2 ]这个单字节内核模拟程序其实只模拟了2的情况。3 j; Y' O) ^! _) ~6 j
要模拟1的话就要制作一个图形程序了。# p4 o6 q) c, R- F, q3 k5 [
. l2 w- v3 K& |+ ~8 ]
这个单字节内核模拟程序本身的意义其实不大。
5 B+ m" ]8 S9 U3 C& i" S& Q; G其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
回复 支持 反对

使用道具 举报

9#
发表于 2009-10-12 15:34 | 只看该作者
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
+ E8 X2 I* }/ e8 J所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。, f8 q3 e) c  y, w
这样的理解对不?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2009-10-12 16:44 | 只看该作者
引用第8楼深绿于2009-10-12 15:34发表的  :
" z+ U6 a: Z' h2 d这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
# P' _; p) M2 \& t+ X3 j所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。$ E3 I6 r0 s5 b
这样的理解对不?

8 n& O) J1 j# Y+ h0 h理解完全正确。
: v. N* m* s, J7 x+ {不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。+ Z, }7 m4 F- b6 ~7 m$ X

9 {* v1 A- |  \6 d% p有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。1 A' t/ M- O% j+ ~- w, A$ ]
然后逐个nop测试,看有什么变化。
" F6 s) d# S! x* r/ t7 ^, d, V7 {, F, {7 l. G8 F) e9 p% S; z
你可以参考一下这篇帖子; R, p+ o4 \3 G/ P4 u4 G) W
游戏汉化中的双字节问题处理原理( R1 [2 C& e% }. B* t0 `; z
https://www.chinaavg.com/read.php?tid=18709- ?( |3 D; r  ?; p8 L. g
作者好像是左贤王主力人员。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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