关于《黑客反汇编揭密》一书中的一些错误

 P89          int a[2] = { (int)func_1, (int)func_2, (int)func_3 };                           应该是int a[3] = ……

 P90  所有 mov [ebp + XXX], YYY 的指令                                                         应该都是“ebp - ”吧

 P92  被40101B行的pop弹了出来。                                                                 pop在40101A行

 P95  jnz short loc_0_401017                                                                          应该是jz吧,因为上面是 if ( a )

 P210  ; MyProc(a:Byte, b:Word, c:String)                                                      前面代码中函数原型是MyProc(a:Word, b:Byte, c:String)

 P237  表9 FIST   destination  ……
                    FISTP destination   ……                                                               这两条指令和它们的描述反了

 P237  一个双精度型或者长双精度型数据都要占据多于一个“字节”的空间   我觉得应该是“字”比较合适

 P243~244 fstp   [ebp+0ch+var_4]
   fstp   [ebp+0ch+var_C]
   fld   [ebp+0ch+var_4]
   fadd [ebp+0ch+var_C]                                                                                 我觉得应该都是“esp+0ch+……”

 P252  void __stdcall demo_3(int a, int b, int c)     P254说demo_3是__cdecl类型,而且反汇编代码也说明了这一点

 P252  zzz->demo();
   zzz->demo_2();
   zzz->demo_3();                                                                                             这三个函数调用都没有传递参数

 P303  aWednesday db 'Wednesday',0,0,……      以及后面几行中0的数量都不对,应该符合static char x[7][16]的声明吧

P304    列表121的源程序和列表122的反汇编程序对应不上,122中有个Sum函数,而121中根本没有

 P332   ;4. printf("%x + %x= %x", a, b, b-a)                                                应该是printf("%x - %x= %x", a, b, b-a)

 P337     call myfunc
             ……
              call _myfunc_2                                                                                两个函数的顺序不对,见P336 myfunc(a+b, myfunc_2(c))和P338的反汇编
 
 P341  int c; c = *a; *b = *a; *b = c;                                                             应该是int c; c = *a; *a = *b; *b = c; 

 P364、P365 ;三个最低位留在ECX寄存器中,其他位则置零              应该是“两个最低位”,因为指令是 " and ecx, 3 "

 P370  loc_4010C9:  ; CODE XREF: _main+35……    标号loc_4010C9的位置不对,应该在指令"jz short loc_4010D8"后面

 P372  ;字符串"Hello, Sailor!"拷贝给局部变量 char var_20[14]。    该字符串有14个有效字符(5+1+1+6+1),如果拷贝给char var_20[14],那结尾符的存放就越界了

 P382   所有(a!=b)都错了                                                                           应该写成(a!=0)

 P383   图24上面 ((a==b) && (a!=0))                                                      应该是((a==b) || (a!=0))

 P389  表22 第三行 SETAG   SETNC  SETNB      SETAG                  应该是 SETAE

 P412  if (a<0x666) zzz=0x200 else zzz=0x300                                    if (a<0x666) zzz=0x100 else zzz=0x300

 P414、P415 cmp eax, 1         cmp eax, 0

 P451   loc_401097:                        ;有前置条件的循环                         应该是“有后置条件的循环”

 P510  第一行 || strcmp(&name[0], "KPNC/n" )))      如果要比较密码的话逻辑应该是 && !strcmp(&name[0], "KPNC/n" )))

 P515  倒数第三行  loop 000001031                                                     loop 00401031
 P516                        jne   000001021                                                      jne   00401021
                                  call  000001056                                                       call  00401056
 



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值