背景
使用Python调用未导出的DLL函数。要调用的函数假定其中一个通用寄存器已设置为缓冲区的位置 - 它不是通过堆栈变量设置的。缓冲区将由Python脚本拥有。理想情况下,解决方案应该独立运行,而不是在调试器的上下文中运行。
问题
在调用DLL函数之前,是否可以使用Python将其中一个x86寄存器(在本例中为ECX)设置为Python变量的内存位置? (并且没有获取/存储寄存器的过程)。
考虑方法
我看过几种方法,所有这些方法看起来都比较重,我很快就达到了我的知识范围:
对于如何处理此问题,我将非常感激。
答案 0 :(得分:1)
我认为唯一可行的方法是编写在asm中调用函数的代码。只有在该级别控制它才能确保没有其他方可以修改注册表。
一种方法是静态地执行它并让编译器/链接器构建一个可以从Python代码调用的DLL,传递所需的任何信息。特别是函数地址和传递给函数所需的任何参数。
另一种方法是在运行时使用动态代码生成器之类的某种抖动生成代码。这种方法可能更难做到,尽管它提供了更大灵活性的前景。