让脚本引擎支持动态链接库。

大家是不是总是郁闷,要在脚本中访问数据库,就又要重新编译一次脚本引擎,写一堆的接口来来让脚本可以访问数据库,或者又碰到要在脚本中访问网络,又要重新编译一次脚本引擎,写一堆的接口。每增加一次新东西,都需要重新修改脚本引擎,是不是很麻烦呢?

其实有个简单的方法,直接让你的脚本引擎支持动态链接库即可。

首先,我们知道,访问动态链接库有两种方法,一种是在连接的时候指定,另外一种则是在运行中指定。为了能让脚本引擎直接的访问任何动态链接库,我们可以使用在运行中指定的方法。Linux下也好,Windows下也好,最多都只能通过函数名获取到一个函数指针,但是对于脚本来说,却不知道函数的定义,无法对其进行呼叫。

那么我们用下面的方法(以Linux下为例子,Windows平台下类似,仅API不同):
比如说有脚本引擎收到脚本传过来的
动态链接库的名字:xxx.so
要呼叫的函数:test_func
要传进去的参数:var1, var2, var3
void *dl_handle = dlopen("xxx.so", RTLD_LAZY); // Windows下为.dll文件
void *f = dlsym(dl_handle, "test_func");
__asm__("push %0"::"r"(var1));
__asm__("push %0"::"r"(var2));
__asm__("push %0"::"r"(var3));
// Windows下为:
// __asm push var1;
// __asm push var2;
// __asm push var3;
__asm__("call %0"::"r"(f));
__asm__("add %%esp, $0xc");//因为有三个参数,所以是4 * 3 = 12(0xc)
// 然后如果有返回值的话,就从EAX里面获取返回值。

有了这个东西,脚本就可以轻松的访问任何动态链接库而不需要对脚本引擎做修改和重新编译了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
操作系统概念背诵 一、进程管理 1. 进程管理的功能 ① 进程控制 ② 进程同步 ③ 进程通信 ④ 进程(线程)调度 2. 程序顺序执行时的特征:顺序性、封闭性、可再现性。 3. 程序并发执行时的特征:间断性、失去封闭性、不可再现性。 4. 进程由程序段、数据段和进程控制块(PCB)组成。 5. 进程的定义 ① 进程是程序的一次执行。 ② 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。 ③ 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。 ④ 进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 6. 进程的基本特征:动态性、并发性、独立性、异步性、结构特征(程序+数据+PCB) 7. 进程的状态 三态:就绪状态、运行状态、阻塞状态。 五态:活动就绪、静止就绪、活动阻塞、静止阻塞、运行。 8. 进程控制块(PCB)的组成:进程标识符、处理机状态、进程调度信息、进程控制信息。 9. 临界区:进程中访问临界资源的那段代码叫做临界区。 10. 同步机制必须遵循的原则:空闲让进、忙则等待、有限等待、让权等待。 11. P, V 操作的定义 P(S):S = S − 1; 若S≥0,则当前进程继续运行; 若S<0,则将当前进程插入到S 的等待队列中去。 V(S):S = S + 1; 若S>0,则当前进程继续运行; 若S≤0,则从S 的等待队列中移出一个进程放到就绪队列中去。 12. 信号量的物理意义 S = −n 时,表示有n 个等待进入临界区的进程,当前已有进程在临界区中访问临界资源; S = 0 时,表示不允许任何进程进入临界区,当前已有进程在临界区中访问临界资源; S = n 时,表示临界区是空闲的,该类资源的可用数目为n,可以有n 个进程访问该类资源。 13. 高级通信机制有:共享存储器系统、消息传递系统、管道通信系统。 14. 线程的定义:线程是进程内的一个实体,是处理机调度的基本单位,是程序内部一个单一的顺序控 制流。 15. 引入进程的目的:是为了使多个程序并发执行,提高资源利用率和系统吞吐量。 16. 引入线程的目的:是为了减少程序并发执行时的时空开销,使操作系统具有更好的并发性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值