正如您在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代码'。那么你可以帮忙解决这个问题,或者根本不可能。
答案 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)
程序代码由编译器在编译期间创建 您正在尝试在运行时的情况下为编译器提供输入 - 当程序已在执行时。如果你想要“即时编译”,你必须编写一个增量编译器和链接器,它可以在执行时修改代码。
请注意,即使您成功,许多操作系统也会阻止此类执行,因为它违反了安全性。这将是构建病毒的好方法,因此通常会被阻止。