小编u8s*_*and的帖子

C++保存/加载函数作为字节.获得函数的大小

好的,所以我已经使用了函数指针一段时间了.我试图弄清楚这是否可行.

第一.可以将函数指针转换为字节数组.

也可以用该数组中的字节重建该函数.

我想将一个函数保存到一个字节数组中,然后将其保存到文本文件(func.dat)中.然后读取该文本文件并执行特定功能......是否可能?似乎应该有可能我遇到的唯一问题是找到构成函数的数组的大小.

有没有办法做到这一点?

int func()
{
    return 1+1;
}

int main()
{
    int (*foo)() = func;

    char* data = (char*)func;

    // write all the data
    char* copyFunc = new char[sizeof(func)];
    for(int i = 0; i < sizeof(func); i++)
        copyFunc[i] = data[i];

    int (*constructedFoo)() = (int (*)())copyFunc;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然这段代码不会编译,因为sizeof不适用于函数,有没有人知道如何获得函数的大小?或者函数页眉/页脚的大小.

我尝试过类似的东西

int func()
{
    1+1;
    new char('}');
}
Run Code Online (Sandbox Code Playgroud)

然后搜索了} char(作为函数的结尾)但该大小不起作用.

如果你想知道为什么我需要它,它可以用来说,发送一个函数到远程计算机执行(考虑并行处理)或者甚至将函数保存在文件中,就像在我的第一个例子中稍后使用,这个可以提供帮助.

任何帮助是极大的赞赏.

c++

2
推荐指数
1
解决办法
947
查看次数

直接以二进制形式执行计算机指令

在C.我需要一种在程序运行时直接执行计算机指令的方法.我知道如何以二进制编写指令的唯一方法是通过十六进制编辑器,然后将该文件作为应用程序运行.我如何使用程序编写二进制文件,然后从它们执行它而无需创建新的执行过程.看起来他们应该是一个简单的方法来做到这一点,但无论我在哪里,我都找不到它.

我能想到的另一种方法是通过内联汇编,但在我当前的项目中,这将是一个缺点,直接使用二进制执行是最好的方法.(这可能需要Windows上的驱动程序吗?如何在linux上执行?换句话说,跨平台方法会很好)

谢谢.

c binary assembly

1
推荐指数
2
解决办法
3410
查看次数

标签 统计

assembly ×1

binary ×1

c ×1

c++ ×1