Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
delphi$IfNDEF命令_Delphi - Fatal编程技术网

delphi$IfNDEF命令

delphi$IfNDEF命令,delphi,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 $E

很抱歉,我知道这是一个非常愚蠢的问题,但是有人能看到这段代码并解释这段代码应该做什么吗,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;
一步一步谢谢你

{$IFDEF CRYPT_BLOCK}
  nested blocks not allowed!
{$ENDIF}
我假设这段代码在某种程度上是
{$INCLUDE}
-ed。这段代码不希望被包含两次,因此它(稍后)将定义预编译器符号
CRYPT_块
;上面的代码测试符号是否定义为
{$IFDEF CRYPT_BLOCK}
,如果定义为,那么它将执行无法编译的操作(
不允许嵌套块!
)。当程序员看到她将知道她将
{$INCLUDE}
-ed这个东西两次

{$DEFINE CRYPT_BLOCK}
这定义了使用上面的块测试的符号。如果编译器在没有抱怨的情况下到达这里,那么符号还没有定义

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

{$O-}
果然,优化现在被禁用了

{$IfNDef UNSAFE_CRYPT}
begin
{$ENDIF}
如果未定义符号
UNSAFE\u CRYPT
,则让编译器查看
begin
关键字

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

这只是一点可怕的汇编代码;有人的“混淆”代码的想法;这不是个好主意。前两个字节(
$EB
$06
)是在所有这些代码之后的相对跳转。换句话说,您几乎可以在任何地方包含这一系列程序集,CPU只需跳过它即可。接着是一系列奇怪的跳转,第二个
$Eb
$FC
实际上是跳转到第一个跳转的位置,因此是一个跳转。最后两个字节(
$FF
$F8
)实际上没有任何意义(它们不是有效的英特尔x86指令),因此我假设这是某种负载。

您需要显示更多代码。那代码是断章取义的。前面出现了什么?那代码很可怕。最后的
asmdb
会将您在那里看到的任何东西直接发射到代码中;它发出的是一个无条件的相对短跳转,前两个字节后没有什么重要的。对我来说,这看起来像是一种困惑。谢谢你这么详细的解释