如何从加载的DLL中调用位于可执行文件中的函数?
发布时间:2020-12-14 02:51:35 所属栏目:Windows 来源:网络整理
导读:我在可执行文件中找到了一个函数,我想从我的DLL中调用它.根据OllyDbg,它的地址是0x0090DE00.我试图直接调用它: luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00)); 而且还要按照建议here添加模块句柄的基础: uint8_t * module_handle =
我在可执行文件中找到了一个函数,我想从我的DLL中调用它.根据OllyDbg,它的地址是0x0090DE00.我试图直接调用它:
luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00)); 而且还要按照建议here添加模块句柄的基础: uint8_t * module_handle = (uint8_t *)GetModuleHandle(L"ForgedAlliance1.exe"); luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00)); 看来这不起作用,因为我得到访问冲突异常 – 看起来指针无效. 那么:如何通过使用其地址来调用此函数? 我刚刚在0x00C0B530处插入了一条简单的RET指令.我的代码现在看起来如下: typedef void (*test) (); EXTERN_DLL_EXPORT void initialize(lua_State *L) { // Adding this should not be necessary. I get 0x00C0B530 from // OllyDbg where the offset 0x00401000 is included uint8_t * module_handle = (uint8_t *)GetModuleHandle(L"ForgedAlliance1.exe"); test *f = NULL; f = ((test*)(0x00C0B530)); (*f)(); // Crashing } 我不太明白为什么我在异常消息中得到一个不同的地址:
更新:我刚刚意识到0x909090C3不仅仅是一个指针,它是代码本身 90 | NOP 90 | NOP 90 | NOP C3 | RETN 似乎我用指针弄乱了一些东西.为什么它尝试执行“位置”0x909090C3.那不是位置. 解决方法
好吧,这只是一个指针搞砸了.很抱歉 – 没有用C写很长一段时间.我做得对,基本上,但问题
f = ((test*)(0x00C0B530)); (*f)(); 是,(* f)是0x909090C3 – 可执行文件中的指令 – 这是程序试图跳转到的地址当然是无效的. 所以诀窍是: int test_addr = 0x00C0B530 f = ((test*)(&test_addr )); (*f)(); 我相信这可以做得更简单但现在这样做了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- windows-runtime – Metro App FileIO.WriteText
- windows环境:idea或者eclipse指定用户名操作had
- windows-server-2003 – 我的AD已经是LDAP服务器
- Win32,如何用C挂钩编译程序中的函数?
- windows – 通过cmd打开文件并在特定编辑器中显示
- Windows 10通过鼠标悬停延迟激活窗口?
- 如何将文件从Windows主机复制到Docker容器
- windows-server-2008 – 是否可以在Apple Xserve
- windows-server-2008 – 经过MS Windows Server
- .NET 4下的偶发Windows服务失败,然后在重新启动尝
热点阅读