C / C ++内联汇编程序,包含字符串变量中的指令

时间:2017-11-04 17:06:16

标签: c++ c windows inline-assembly

正如您在C和C ++中所知,如果使用Visual-C,您可以拥有在线汇编指令,例如:

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

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

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

但这似乎并没有真正起作用,因为它提供了无效的OP代码'。那么你可以帮忙解决这个问题,或者根本不可能。

2 个答案:

答案 0 :(得分:3)

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

您当然可以使用宏:

#define BREAKPOINT __asm int 3

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

    BREAKPOINT ;

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

答案 1 :(得分:3)

程序代码由编译器在编译期间创建 您正在尝试在运行时的情况下为编译器提供输入 - 当程序已在执行时。如果你想要“即时编译”,你必须编写一个增量编译器和链接器,它可以在执行时修改代码。

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