首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >delphi $IfNDEF命令

delphi $IfNDEF命令
EN

Stack Overflow用户
提问于 2013-02-05 06:02:49
回答 1查看 615关注 0票数 0

我很抱歉,我知道这是一个非常低级的问题,但是有人能看到这段代码并解释一下这段代码应该做什么吗,delphi 7在开始期待:或者,

代码语言:javascript
复制
{$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;

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-05 06:10:07

循序渐进;

代码语言:javascript
复制
{$IFDEF CRYPT_BLOCK}
  nested blocks not allowed!
{$ENDIF}

我假设这段代码就是{$INCLUDE}-ed。这段代码不想被包含两次,所以它将(稍后)定义预编译器符号CRYPT_BLOCK;上面的代码测试符号是否被定义为{$IFDEF CRYPT_BLOCK},如果是,它将执行一些无法编译的操作(nested blocks not allowed!)。当程序员看到她将要知道的时候,她会{$INCLUDE} -ed这个东西两次。

代码语言:javascript
复制
{$DEFINE CRYPT_BLOCK}

这定义了使用上面的块测试的符号。如果编译器没有抱怨地到达这里,那么符号还没有定义。

代码语言:javascript
复制
{$IFOPT O+}
  {$DEFINE SAVE_OPT}
{$ENDIF}

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

代码语言:javascript
复制
{$O-}

果然,优化现在被禁用了。

代码语言:javascript
复制
{$IfNDef UNSAFE_CRYPT}
begin
{$ENDIF}

如果没有定义符号UNSAFE_CRYPT,那么让编译器看到一个begin关键字。

代码语言:javascript
复制
asm db   $EB, $06, $EB, $FC, $EB, $FC, $FF, $F8 end;

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14696482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档