[arhat注:大家可能会对给这样的帖子设置精华有疑惑,但我想只要对别人有帮助的都在允许范围之内。更何况kmyc指出了很多概念上的错误。]

第三章 Shellcode

第30页10行:在正常情况下,每个系统调用支持6个参数,分别保存在EBX,ECX,EDX,ESI,EDI和EPB里。
英文原文是:Each syscall can have a maximum of six arguments, which are inserted into EBX, ECX, EDX, ESI, EDI, and EPB, respectively.

我查阅了80x86体系结构手册中关于寄存器的内容,所有80x86系列的寄存器里似乎并没有一个叫EPB的,所以在这里猜测,可能是把EBP误写成EPB了。我没有查阅关于Linux系统调用的fastcall参数传递的具体信息,所以这里不能妄下定论。不过MSDN中关于Windows的fastcall的具体信息倒是有案可查:The __fastcall calling convention specifies that arguments to functions are to be passed in registers, when possible. The following list shows the implementation of this calling convention.
Argument-passing order : The first two DWORD or smaller arguments are passed in ECX and EDX registers; all other arguments are passed right to left.

以前没怎么在论坛上发过贴,也不懂论坛上的规矩,本来准备回复在汇总和勘误的那个主题上的,可是那个主题已经回复了5页多了,怕我这篇帖子发上去没人看得到,所以只好新发一个主题了。如果占了版面,敬请管理员删贴,谢谢。

arhat大哥翻译得辛苦,菜鸟在此表示深深的敬意。看到前面勘误的帖子,似乎问题都集中在前三章,我也是刚看完前三章。不知是后面的章节真的没有疏漏,还是有别的原因。arhat大哥翻译的文章是菜鸟们学习的宝贵资源,希望arhat大哥能再多翻译些这样的文献,提携提携我们这样的菜鸟。最后希望arhat大哥的《The Shellcoder's Handbook》的翻译早日完成,最后出版成书。