【发布时间】:2017-02-13 12:15:27
【问题描述】:
我正在尝试调用本机机器语言代码。到目前为止,这是我所拥有的(出现总线错误):
char prog[] = {'\xc3'}; // x86 ret instruction
int main()
{
typedef double (*dfunc)();
dfunc d = (dfunc)(&prog[0]);
(*d)();
return 0;
}
它确实正确地调用了该函数并进入了 ret 指令。但是当它尝试执行 ret 指令时,它有一个 SIGBUS 错误。是因为我在一个没有被清除执行的页面上执行代码吗?
那么我在这里做错了什么?
【问题讨论】:
-
如果它对任何人都有帮助:我经常发现 SIGBUS 表示对齐错误。
-
@user 请将您的解决方案作为答案发布,而不是将其编辑到您的问题中。
-
我恢复了对代码示例的更改,所以这个问题又有意义了。请按照@dandan78 的建议去做并接受答案,而不是更新您的问题,在此过程中更改其含义。
-
使用
asm()函数会不会更实用? -
请,请,请,请,请,请,请使用
asm()(根据@Stavr00 的评论和格雷厄姆的回答)而不是任何其他方法,特别是如果您的代码有 在一块以任何方式连接到互联网或有任何可能与您以外的任何人交互的硅片上看到曙光的任何可能性。
标签: c++ c linux native machine-language