1、在对象中 EAX 寄存器将永远存放 Self 指针,第一个参数放在 EDX,第二个参数放在 ECX,其它的参数放入栈中,如果企图使用类方法做比如系统回调函数的应用将会把 Self 破坏掉,从而产生 AV 类型的异常。
2、在 Delphi 中参数的存放是从右向左的顺序,如果函数或过程在类中 EAX 寄存器中将存放 Self 指针,EDX 存放第一个参数,ECX 存放第二个参数,其它的参数将放入栈中(EBP 中存放栈的基地址,EBP+8为栈中的第一个变量)。如果函数或过程不在类中 EAX 寄存器中将存放第一个参数,其它同上。由此可见,在 Delphi 中永远将前三个参数放入寄存器中达到优化的目的,所以在写函数和过程时参数最好不要超过三个而且最好把常用的参数放到前面。
3、用汇编调用类方法,可以通用 Self 的指针加上类方法的偏移地址来调用,如下:
//其中 FSomething 为方法指针(相信有 Delphi 基础的人都看得懂)
add eax, offset(TForm1.FSomething)
call TMethod[eax].code
还有更简单的调用方法,如下:
//这种方法相信编译器在幕后做了不少功夫
call TForm1.MethodName
还有一种方法,是在 Delphi 的 CPU 窗口中学到的和第一种方法大同小异,如下
add edx, offset(TForm1.FSomething)
call dword ptr [eax]
2004年7月30日 9:53
分享到:
相关推荐
Delphi 内嵌汇编语言 BASM 资料。Delphi 内嵌汇编语言 BASM 资料
用Delphi内嵌汇编实现缷载任意进程的某个DLL.zip
世上最强大的delphi反汇编工具,可反汇编delphi 编译的exe文件。
初学 Delphi 嵌入汇编[1] - 汇编语言与机器语言 初学 Delphi 嵌入汇编[2] - 汇编语言关键字 初学 Delphi 嵌入汇编[3] - 第一个 Delphi 与汇编的例子 初学 Delphi 嵌入汇编[4] - 寄存器在过程与函数中的使用 ...
在Delphi中使用汇编语言..rar
delphi经验总结delphi总结 delphi经验总结delphi总结
Delphi嵌入式汇编
delphi 内嵌谷歌控件64位
OD的DELPHI版反汇编引擎,有需要的朋友可以下载一下。
代码采用delphi内联汇编的编写方式,hookApi技术的经典之作,并且运用DELPHI mini编译技术,完整功能的dll不超过8k,一切最精简最高效的delphi编程技术,展现delphi汇编编程的魅力。
delphi总结 delphi总结 delphi总结 delphi总结
Delphi-ASM.pdfDelphi-ASM.pdf
Delphi XE 开发 FireBrid内嵌数据库。很好的Demo。完整的实现了,数据的常用操作动作。 FireBrid是一个全功能的,强大高效的,轻量级,可移植性好。免维护的数据库。
初学 Delphi 嵌入汇编[4],delphi与汇编混编开发技术系列
初学 Delphi 嵌入汇编[3],delphi与汇编混编开发技术系列
Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结 !最后有个项目要移植到64位,所以这个很有用。在2010中PChar已经不再表示PAnsiChar而是表示PWideChar,如果依然这样写,运行时很可能会得到一个内存访问错误。...
将Delphi编译的Exe反汇编成Delphi源程序,效果还不错,dfm可以弄出来,不过 Pas里还是ASM,对于研究破解还是很有用的
汇编语言如何直接在delphi中使用。希望对有用的朋友提供帮助。主要使用在什么方面就要看你自己 了。
Delphi输出汇编语言的模拟编译器源码..rar