当前位置: 首页 > 面试题库 >

如何调用存储在char数组中的机器代码?

东门佐
2023-03-14
问题内容

我正在尝试调用本机语言。到目前为止,这是我所拥有的(它会出现总线错误):

char prog[] = {'\xc3'}; // x86 ret instruction

int main()
{
    typedef double (*dfunc)();

    dfunc d = (dfunc)(&prog[0]);
    (*d)();
    return 0;
}

它确实正确调用了函数,并且到达了ret指令。但是,当它尝试执行ret指令时,会出现SIGBUS错误。是因为我在未清除执行页面之类的代码上执行代码吗?

那我在做什么错呢?


问题答案:

第一个问题可能是该编数据的存储位置不可执行。

至少在Linux上,生成的二进制文件会将全局变量的内容放在“数据”段或此处,这在大多数正常情况下是不可执行的。

第二个问题可能是您正在调用的代码在某种程度上无效。在C中有一个特定的过程来调用方法,称为调用约定(例如,您可能使用的是“
cdecl”)。仅被“调用”的函数可能还不够。它可能还需要进行一些堆栈清理等操作,否则程序将表现异常。一旦解决了第一个问题,这可能会证明是一个问题。



 类似资料:
  • 问题内容: 我在MySQL中有两个表。表人具有以下列: 该列可以包含null或字符串数​​组,例如(’apple’,’orange’,’banana’)或(’strawberry’)等。第二个表是Table Fruit,具有以下三列: 那么,我应该如何设计第一个表中的列,以便它可以容纳从第二个表中的列获取值的字符串数组?由于MySQL中没有数组数据类型,该怎么办? 问题答案: 正确的方法是在查询中

  • 我在MySQL中有两个表。Table Person具有以下列: 水果列可以包含null或字符串数组,如('apple','orange','banana')或('草莓')等。第二个表是水果表,有以下三列: 那么,我应该如何设计第一个表中的水果列,以便它可以容纳从第二个表中的水果名称列获取值的字符串数组?既然MySQL中没有数组数据类型,我应该怎么做?

  • 我有一个依赖于redux存储的组件。我的redux商店看起来像这样 所以基本上,当我刷新页面时,存储区消失了,需要一些时间来获取数据并将其设置为存储区,如上所述 我有一个组件,它需要company_id来获取有关该公司的数据 使用react-redux我得到了company_id 此组件,componentDidMount在存储区接收公司id数据之前被激发。所以我想要的是在这个组件从redux商店

  • 问题内容: SQL Server2005支持CLR,所以这意味着我们可以在后端使用CLR,所以该怎么做。我在c#中有一些函数,它对日期时间变量进行了一些复杂的操作,现在我想在SP中使用这些函数。首先,可以这样做。 问题答案: 是的,可以在SQL Server 2005数据库中使用.NET。请注意,SQL Server 2005支持的.NET版本是2.0。 这是使用Visual Studio制作CL

  • 问题内容: 我已经在MySQL中创建了存储过程,并希望PHP调用该存储过程。做这个的最好方式是什么? -MySQL客户端版本: 4.1.11 -MySQL服务器版本:5.0.45 这是我的存储过程: 调用过程getTreeNodeName的PHP代码是什么? 问题答案: 我现在通过使用代替找到了解决方案。 我发现许多人似乎在使用时遇到了问题。

  • 问题内容: 我有一个要存储在Redis中的对象数组。我可以分解数组部分,并将它们存储为对象,但是我不知道如何获得类似 然后根据名称搜索数据库,并获取返回的密钥。我需要这样的东西。但几乎无法做到正确。 首先是使这一部分正确。 其次是以某种方式从值中获取密钥,即 我觉得很难。或者,我可以将其直接存储为对象数组并使用简单的for循环。 请建议哪种路线最适合某些实现? 问题答案: 我发现工作是将密钥存储为