因此,如果您在C和C ++中使用Visual-C,则可以使用如下的汇编指令:
int main() { printf("Hello\n"); __asm int 3 printf("this will not be printed.\n"); return 0; }
这将在可执行文件中创build一个断点。 所以我的问题是,有什么function我可以用来调用__asm
使用variables,如字符数组。 我在想这样的事情:
char instruction[100] = "int 3"; __asm instruction
但是,这似乎并没有真正的工作,因为它提供了“无效的OP代码”。 所以你可以帮助这个,或者根本不可能。
C和C ++都不是解释语言,编译器在编译时生成int 3
机器指令。 编译后的程序在运行时不会将该字符串识别为指令 – 除非程序本身是一个解释器 。
你当然可以使用一个宏:
#define BREAKPOINT __asm int 3 int main() { printf("Hello\n"); BREAKPOINT ; printf("this will not be printed.\n"); return 0; }
您的程序代码由编译器在编译期间创建。
您正试图在运行时为编译器提供输入 – 当程序已经执行时。 如果你想“即时编译”,你将不得不编写一个增量编译器和链接器,它可以在执行代码时修改代码。
请注意,即使你会成功,许多操作系统会阻止这样的执行,因为它违反了安全性。 这将是构建病毒的好方法,因此通常会被阻止。