delphi $ IfNDEF命令

时间:2013-02-04 22:02:49

标签: delphi

我很抱歉我知道这是一个非常无聊的问题,但是有人可以看到这段代码并解释这段代码应该做什么,并且delphi 7一直给我错误的行开始说明期待:或者,

{$IFDEF CRYPT_BLOCK}
  nested blocks not allowed!
{$ENDIF}
{$DEFINE CRYPT_BLOCK}
{$IFOPT O+}
  {$DEFINE SAVE_OPT}
{$ENDIF}
{$O-}
{$IfNDef UNSAFE_CRYPT}
begin
{$ENDIF}
asm db   $EB, $06, $EB, $FC, $EB, $FC, $FF, $F8 end;

由于

1 个答案:

答案 0 :(得分:9)

步骤一步;

{$IFDEF CRYPT_BLOCK}
  nested blocks not allowed!
{$ENDIF}

我认为这段代码不知何故{$INCLUDE} - 编辑。此代码不希望包含两次,因此它(稍后)将定义预编译器符号CRYPT_BLOCK;上面的代码测试是否定义了符号{$IFDEF CRYPT_BLOCK},如果是,那么它会执行不会编译的内容(nested blocks not allowed!)。当程序员看到她会知道她{$INCLUDE}两次这个东西时。

{$DEFINE CRYPT_BLOCK}

这定义了使用上面的块测试的符号。如果编译器在没有投诉的情况下到达此处,则该符号尚未定义。

{$IFOPT O+}
  {$DEFINE SAVE_OPT}
{$ENDIF}

检查是否启用了编译器优化。如果是,则定义符号SAVE_OPT,以便可以恢复编译器选项。当我们看到这一点时,我们假设代码将改变{$O}编译器选项。

{$O-}

果然,现在已禁用优化。

{$IfNDef UNSAFE_CRYPT}
begin
{$ENDIF}

如果未定义符号UNSAFE_CRYPT,请让编译器看到begin关键字。

asm db   $EB, $06, $EB, $FC, $EB, $FC, $FF, $F8 end;

这只是一些可怕的汇编程序代码;有人想“混淆”代码;不是一个好主意。前两个字节($EB$06)是在所有这些代码之后的相对跳转。换句话说,你几乎可以在任何地方包含这一系列的程序集,CPU只会跳过它。然后是一系列奇怪的跳跃,第二个$Eb $FC实际上是第一次跳跃的跳跃,一个跳跃。最后两个字节($FF$F8)实际上没有任何意义(它们不是有效的Intel x86指令)所以我认为这是有效载荷。