http://llf.my.west163.com/studio/vbasm.htmVB 汇编替换的构想  声明 个人可以自由转载本文,不过应保持原文的完整性,并通知我;商业转载先请和我联系。 本文没有任何明确或不明确地提示说本文完全正确,阅读和使用本文的内容是您自己的选择,本人不负任何责任。 如果您发现本文有错漏的地方,请您给我指出;如果有什么不理解的,请您给我提出。 意见、建议和提出的问题最好写在我的主页 http://llf.126.com 的留言版上。 关于内嵌汇编 VB 不支持内嵌汇编,这种情况对于一个不支持指针(至少不明显的支持)的语言来说,确实是正确的。一般来说,内嵌汇编是为了加快速度,在这种情况下,我们一般可以使用动态链接库的方法,而如果希望只有一个单独的可执行文件的话,我们就会非常向往于内嵌汇编了。 不过要注意的是,使用汇编是最后一种不得已的办法,只有在完全没有其它的办法的情况下才使用,一种好的算法使用汇编的话是锦上添花,而一种不好的算法使用汇编的话就得不偿失了。而且,首先你要确定你对汇编编程特别是汇编优化很在行才行,否则可能适得其反。 我在这里做的探讨只是一种想法,并没有经过验证。事实上,为了实现这种功能而做这么大的修改也不是太有意义,以前我使用 TC 2.0 的时候就想使用内嵌汇编的方法,不过因为它的内嵌汇编的程序不能在 IDE 里编译而放弃了。所以在这里,我只是希望大家开阔一下思路,并不提倡真的这样做 —— 当然我也不能阻止你这样做。 构想 在汇编语言里调用一个函数的时候,首先使用 Push 语句把参数压入堆栈,然后使用 Call 语句调用目标地址的代码段,如果我们能找到那个被呼叫的目标地址,就可以把用汇编语言编写的代码段替换原程序中的相同的代码段,当然,这是在程序编译成可执行文件之后的事情。 在程序编译成可执行文件之前,我们也一样要做一些工作。首先,我们需要有这样一个函数,原先可以使用 VB 实现相同的功能,不过为了容易找到,而且为了有足够的容量,可以写一些重复的语句,这样可以在编译之后很容易的找到它,而如果发现一种不常用的语句的特征代码的话,甚至可以做这样一个工具来实现 VB 程序的汇编替换。 当然,这需要程序别编译成本机代码,如果编译成 P 代码,因为是解释执行的,所以这种汇编替换相必是有问题的。都说 P 代码的程序如果反汇编跟踪的话就像天书一样,而我试着跟踪了一下本机代码编译的程序,也一样很难懂 —— 虽然很整齐,但相比于 C 语言的程序也仍然可以算是天书了。 好了,就说这么多吧。如果觉得我说的太简略的话,可以参见我写的关于 C 字号修改的系列文章和《汉化中的几个问题》的最后一个小节,我也是通过这些修改的尝试才觉得 VB 也是有可能使用这种汇编替换的方式实现“内嵌汇编”的。 点睛工作室·梁利锋 结稿于 2000.7.14