转发不带签名的方法
Forward a method without a signature
我正试图为libEGL.dll编写一个转发库,这样我就可以捕获通过它进行调试的调用。
问题是库缺少两个方法NvEglGetStdProcAddress
和NvEglRegClientApi
。
这是一个为Arm7(WinCE(构建的C库。我为libEGL准备的头文件不包括这两个方法,所以我不知道转发调用的签名是什么。
有没有什么方法可以在不知道签名的情况下转接电话?我可以反汇编dll并查找从堆栈中弹出的参数吗?
DumpBin在RVA 0x217C和Ox1E5C处显示这些,/ALL/DISASM显示从0x11000开始的.text部分。如何在这两个偏移之间转换?
我猜这是行不通的,它会把参数留在堆栈上,然后用局部变量稍微篡改它们吗?的返回值(如果有(会发生什么
typedef void (*NvEglGetStdProcAddressFunc) (void);
void NvEglGetStdProcAddress()
{
NvEglGetStdProcAddressFunc ptr = (NvEglGetStdProcAddressFunc)GetProcAddress(hInst, _T("NvEglGetStdProcAddress"));
ptr();
}
您可以简单地转发导出调用。
因此,我的调试libEGL.dll .def
文件现在在其顶部有两行额外的
; libEGL.def
EXPORTS
NvEglGetStdProcAddress = libEGLOld.NvEglGetStdProcAddress
NvEglRegClientApi = libEGLOld.NvEglRegClientApi
eglBindAPI
eglBindTexImage
...
我的一位同事对此进行了测试并验证了它的有效性,尽管它也要求指定序数
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 转发声明在命名空间中不起作用的替代方法
- C++或宏魔术来生成方法和转发参数
- C++11 重载方法,并转发到唯一方法
- 哪种设计更好:提供对所属对象的直接访问,或者为所属对象提供所属对象转发方法
- 通过列表和转发列表进行迭代的最有效方法
- 完美转发非模板类的方法
- 使用组合而不是继承的方法转发(使用C++特性)
- 是否有方法将所有赋值运算符(+=、*=等)转发为隐式使用重写的直接赋值运算符(=)
- 正确转发右值引用的方法
- 代理dll:方法覆盖/方法转发(COM实现继承)
- 转发不带签名的方法
- C++11虚拟模板方法或转发可变模板
- 转发类,无法访问方法
- C++方法转发
- 将调用转发到成员方法的模板