58、编程中的一些关键概念与技术解析

编程中的一些关键概念与技术解析

1. Python ctypes模块调用外部函数

Python的ctypes模块可用于调用DLL、.so等文件中的外部函数。在32位环境下,必须明确指定调用约定。ctypes导出了 *cdll* ,在Windows系统中还有 *windll* *oledll* 对象,用于加载动态链接库。加载库的方式是将其作为这些对象的属性进行访问。
- *cdll* :加载使用标准“cdecl”调用约定导出函数的库。
- *windll* :加载使用“stdcall”调用约定调用函数的库。

实际上,我们可以修改ctypes模块(或其他调用代码),使其能成功调用外部的cdecl或stdcall函数,而无需知道具体是哪种调用约定,但需要指定参数数量。这可能可以通过调用者中的5 - 10条x86汇编指令来解决。

2. Cdecl调用约定示例:DLL替换

曾经有人想替换某个软件中的原始DLL文件。首先,列举出所有DLL导出的函数名,并在自己的替换DLL中为原始DLL中的每个函数创建一个对应的函数,例如:

void function1 ()
{
    write_to_log ("function1() called\n");
};

由于时间紧迫,没有时间推导每个函数的参数数量和数据类型,所以替换DLL中的每个函数都没有参数。但由于所有函数都采用cdecl调用约定,所以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值