Tao & Zen

Soli Deo Gloria!

导航

关于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  阅读(2053)  评论(4编辑  收藏  举报