关于exe中导出函数限制的疑惑
最近有个想法,就是想将原本是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进制上做手脚才行吧。。忘达人
告知解决方法。
posted on 2008-10-27 22:34 康国庆--thinkinlove 阅读(2065) 评论(4) 编辑 收藏 举报