





















最近有个想法,就是想将原本是dll导出的函数,统统放到一个原本可以执行的文件中,且要求
已让能够导出函数像原来dll一样,给其他的pe来使用。
测试环境是vc8。
开始拿了小的测试工程,2个exe的project。都非常简单。传递参数,简单的add操作。没问题。
网络上许多说法,其实没有什么和平常的dll导出方法操作是一样的,只有你使用def文件的时候不要加
那行library就行。 在这个过程中还试验出。调用函数的两边都是使用dllexport 居然也能够调用成功。
于是开始了大规模的移动代码过程。代码就绪后,编译 ok 过了,链接ok 也过了。
但是在执行上出了问题。追了很久 ,发现是因为在函数内部使用了string。(注这里使用string只是做了交换的临时变量)
于是用char* 替换了string 修改代码n处。。。最终测试出在malloc上出了问题。
用string时出的问题是特权指令出错。 而用char* malloc(堆分配)时 出现的是非法访问内存。。堆分配出错。
于是改用其他的alloca(栈分配) 等一族方法,出错地址依旧。
换个思路-自己维护堆, 用api 开了一个堆。 结果在执行api时 出错。作罢。
网络上传的调用方式都是很简单的方法。。并没有动态申请内存的过程。。还有就是看雪论坛的那个帖子
olly.dbg(好像是这么拼的) 功能我不知怎么能搞出来。
还有就是"调用门" 一个exe调用一个dll ,而这个dll反过来调用exe的一个导出函数。这样的实现是能找到例子的。
核心部分嵌了几行汇编。 但是我的这个问题是没有解决的。。 只有绕过,或是也许在2进制上做手脚才行吧。。忘达人
告知解决方法。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。