【发布时间】:2014-04-17 14:54:28
【问题描述】:
这是一个奇怪的问题,我似乎无法找到答案。这个:
#include <iostream>
using namespace std;
void show_number(int number) {
cout << number << endl; // Shows '10' as expected
}
int main() {
cout << endl; // Remove this and it fails
__asm {
mov rdi, 10
call show_number
}
}
实际上工作正常,除非您删除初始的cout << endl(main 的第一行)。当您删除它时,show_number 中的 cout 似乎由于某种原因导致了段错误。
这是什么原因造成的?
(OSX Mavericks x64,但我认为也应该在 linux 中工作)
【问题讨论】:
-
你能在这两种情况下显示调用前后寄存器的内容吗?
-
asm volatile无法构建 (?) - Apple Clang 2.1 -
@SteveCox 我试过了,不过不太实用。
-
__asm volatile呢?