您的位置:首页 > 其它

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

2006-11-26 11:15 197 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: