我正在编写一个简单的C++程序,其中包含一些汇编指令。
void call(){
__asm__("mov -0x10(%rbp),%eax;"
"add $0x10,%eax;"
"mov %eax,%edx;"
"shr $0x1f,%edx;"
"add %edx,%eax;"
"sar %eax;"
"add %eax,-0x4(%rbp);"
"mov $0x4c,%eax;"
"mov -0x8(%rbp),%eax;"
"add %eax,%eax;"
"sub -0x4(%rbp),%eax;"
"add %eax,-0xc(%rbp);");
}
然而,根据程序执行行为我发现,这段 asm 代码所操作的寄存器实际上也被函数中其他变量使用了。
有没有一种方法可以调用编译器来隔离 asm 标签中使用的寄存器,确保它们不会受到影响?
操作系统:Linux 编译器:G++
非编译器方法也可接受。
callOne
中没有本地变量。这是该函数的完整代码片段还是还有更多内容?这是哪个操作系统(Windows/Linux/BSD)?为什么不能为此创建C++代码?你正在开发漏洞吗? - Michael Petch