【问题标题】:C/C++ inline assembler with instructions in string variables带有字符串变量指令的 C/C++ 内联汇编程序
【发布时间】:2018-04-17 05:15:36
【问题描述】:

正如您在 C 和 C++ 中所知道的,如果使用 Visual-C,您可以使用行内汇编指令,例如:

int main() {
    printf("Hello\n");
    __asm int 3
    printf("this will not be printed.\n");
    return 0;
}

这将在可执行文件中创建一个断点。所以我的问题是,是否有某种函数可以用来调用__asm,使用诸如char 数组之类的变量。我在想这样的事情:

char instruction[100] = "int 3";
__asm instruction

但这似乎并没有真正起作用,因为它给出了“无效的 OP 代码”。所以你能帮忙解决这个问题吗,否则根本不可能。

【问题讨论】:

  • 你想要魔法 - 从字符串组装的运行时汇编器。

标签: c++ c windows visual-c++ inline-assembly


【解决方案1】:

C 和 C++ 都不是解释型语言,编译器会在编译时生成 int 3 机器指令。编译后的程序在运行时不会将字符串识别为指令 - 除非您的程序本身就是一个解释器

你当然可以使用宏:

#define BREAKPOINT __asm int 3

int main() 
{
    printf("Hello\n");

    BREAKPOINT ;

    printf("this will not be printed.\n");
    return 0;
}

【讨论】:

    【解决方案2】:

    程序的代码由编译器在编译期间创建。
    您正试图在 运行时 为编译器提供输入 - 当程序已经在执行时。如果您想要“on-the-fly-compilation”,则必须编写增量编译器和链接器,以便在执行代码时修改代码。

    请注意,即使您成功了,许多操作系统也会阻止此类执行,因为它违反了安全性。这将是构建病毒的好方法,因此通常会被阻止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2011-06-09
      • 2016-09-06
      • 1970-01-01
      • 2016-05-28
      相关资源
      最近更新 更多