首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从已加载的共享对象库调用主程序函数

从已加载的共享对象库调用主程序函数
EN

Stack Overflow用户
提问于 2013-02-16 18:14:53
回答 2查看 919关注 0票数 1

可以在共享对象库中调用主程序中的函数吗?

我目前没有代码,但我想为我写的一个软件的插件系统,并想知道这是否可能,因为安全原因。一些伪代码:

代码语言:javascript
运行
复制
/* main program */
void disturbe() {
    /*some bad stuff, just the main program should be able to call*/
}

main()
    lib = load_library("foo.so");
    lib->function();
}

/* foo.so */

void function() {
    disturbe();
}
EN

回答 2

Stack Overflow用户

发布于 2013-02-16 19:05:00

我会说是的:因为function()已经被加载到进程的地址空间中,所以它可以访问进程的函数,至少“以某种方式”。

要保持事物的严格分离,请使用不同的进程。

票数 2
EN

Stack Overflow用户

发布于 2013-02-16 22:43:39

这是有问题的,因为当你编译库的时候,它会有一个未解析的指向unresolved ()的链接。相反,如果您需要在主模块中具有库调用函数,最好在库中具有指向存根函数的指针,然后在运行时使用从主模块到库的初始化调用来设置这些指针。我们在我们的“回调”函数的商业产品中经常使用这种方法。下面是我们代码中的一个示例:

在Library.h中:

代码语言:javascript
运行
复制
typedef bool (*pbWMC)(DCwfile *, unc);

// stub functions for uninitialized pointers 
static bool StubbWMC(DCwfile *df, unc uch);

// variables set by Init()
static pbWMC WriteMacroChar;

在library.cpp中:

代码语言:javascript
运行
复制
// callback functions
pbWMC DCmacr::WriteMacroChar = StubbWMC;

// stub functions for uninitialized function pointers
bool DCmacr::StubbWMC(DCwfile *df, unc uch)
{
    return false;
}

// initializer called from main module
void DCmacr::InitMacroModule(DCwfile *df, pbWMC fwmc)
{
    if (df)
        DestFile = df;
    if (fwmc)
        WriteMacroChar = fwmc;
}

在main module.cpp中:

代码语言:javascript
运行
复制
// call to initializer
DCmacr::InitMacroModule(wf, WriteMacroChar);

// function called by library
bool HTMwr::WriteMacroChar(DCwfile *df, unc uch)
{
    HTMwfile *wf = (HTMwfile *) df;

    if (uch == 183) {  // bullet
        wf->putSpec(uch);
        return true;
    }
    return false;
}

这种设计允许我们为每次库调用指定不同的回调函数,使代码真正模块化。我们使用的是C++,但是和c.hth的设计是一样的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14909164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档