首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C和/或C++中的多态引擎

C和/或C++中的多态引擎
EN

Software Engineering用户
提问于 2014-09-08 12:03:06
回答 1查看 3.6K关注 0票数 2

我偶然发现了多态引擎,我对它们一无所知。然而,我对它们是如何写的感到好奇。我查到的每一个例子都会在程序集中写出它们,我的程序集一点也不好;我只知道几条指令,但不是很好。另一方面,我擅长C和C++。

我熟悉C++中的多态概念,但是在阅读了多态引擎之后,我假设它们与C++中的多态性不同。

我只是在寻找使用C和/或C++显示加密/解密和/或混淆代码的简单代码

如何在C++中使用虚拟关键字等技术来混淆或加密应用程序中的代码?

注意:我被告知把这个问题从stackoverflow.com转到这个地方。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2014-09-08 17:45:44

我熟悉C++中的多态概念,但是在阅读了多态引擎之后,我假设它们与C++中的多态性不同。如何在C++中使用虚拟关键字等技术来混淆或加密应用程序中的代码?

你的假设是正确的。它们是不同的东西。

  • 通常,C和C++都不使用运行时代码生成,也不使用任何自修改代码。
  • C和C++允许函数指针,以及任何东西之间未经检查的类型转换。这两个特性允许一个CPU跳转(执行传输)到任何地址。
  • 程序员可以编写C或C++代码,将由有意义的机器代码组成的字节片段连接到一个字节缓冲区中,然后发出对此机器代码片段开始的调用。通常,机器代码片段包含一个或多个返回语句,这些语句将向调用的C/C++代码返回控件。
  • 但是,由于大多数C程序和C++程序不进行任意跳转,当这些程序在操作系统( OS )下执行时,操作系统可以使用称为“执行禁用位”(NX)的CPU功能来防止跳入不属于C/C++编译器二进制输出的地址。
  • 通常,C程序员使用“函数指针”特性来实现虚拟方法表
  • C++为创建可继承的类对象提供了一种更人性化的机制,部分是通过虚拟方法表机制来实现的。
  • C和C++方法对虚拟方法表的不同之处在于,
    1. 在C中,程序员必须处理维护虚拟方法表所需的所有操作;
    2. 在C中,程序员可以在任何时候(甚至在方法执行过程中)对虚拟方法表进行各种操作。

  • 通常,多态引擎(代码混淆)不使用虚拟方法表。这是因为在运行时分析机器代码(附带调试器)时,硬编码的虚拟方法表是高度可见的,因为它们由指向由可执行代码组成的内存地址范围的连续指针组成。
  • 不过,仅仅为了学习的目的,使用C/C++函数指针来实现引擎可能是有用的。

我只是在寻找使用C和/或C++显示加密/解密和/或混淆代码的简单代码

不幸的是,对于Programmers.StackExchange来说,这是一个离题的话题。

如果您对这些主题有关于信息安全的问题:

  • 加解密,
  • 代码混淆

试着问一下http://security.stackexchange.com

如果您正在寻找用于生成程序集代码的可调用片段的C++工具,请尝试AsmJit。它允许人们学习以编程方式生成程序集代码的基础知识。由此,您可以了解如何生成执行功能等效计算的不同程序集代码片段。

(免责声明:我以前从未使用过AsmJit。)

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

https://softwareengineering.stackexchange.com/questions/255692

复制
相关文章

相似问题

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