随笔分类 -  Delphi-ASM

1
摘要:先回顾一下String类型的结构 var s: String; p1: PInteger; {与Free Pascal不同的是,Delphi中Integer与Longint同为32位带符号整数} p2: PSmallInt; {SmallInt则相当于Free Pascal里的Integer,表示1 阅读全文
posted @ 2021-12-25 09:37 findumars 阅读(0) 评论(0) 推荐(0) 编辑
摘要:介绍 最近,在Embarcadero的公共论坛上,有关宣布Win64 Delphi编译器的首个版本很可能没有内置汇编程序(BASM)的讨论非常活跃。建议是改用外部汇编器,据说Embarcadero可能会选择NASM(开源Netwide汇编器)。 更新:现在很清楚,在Delphi XE2及更高版本中有 阅读全文
posted @ 2021-01-04 17:35 findumars 阅读(659) 评论(0) 推荐(0) 编辑
摘要:看到网络上流传的一份Drocon的mercury的代码程序源码使用TASM32编译使用MASM32来连接...关键的地方就在这里为什么要使用TASM编译。。。正常情况下TASM连接出来的程序代码体积远远大于MASM32连接出来的。。其实具体看一下就不难发现.TASM编译出来的obj体积很小,连接出来 阅读全文
posted @ 2019-01-02 14:06 findumars 阅读(576) 评论(0) 推荐(0) 编辑
摘要:原文地址 在为Delphi 64bit实现x64内置汇编程序时,我更加“了解”了AMD64 / EM64T架构。x64架构的优点在于它真正建立在现有的指令格式和设计之上。但是,与从16位到32位的移动不同,大多数现有指令编码自动升级为使用32位参数,x64设计采用不同的方法。 关于x64指令的一个神 阅读全文
posted @ 2018-12-31 08:59 findumars 阅读(339) 评论(0) 推荐(0) 编辑
摘要:参数传递方法李维的InsideVCL《第一章》中提到Windows定义的回调函数typedef LRESULT (CALLBACK*WNDPROC)(HWND,UNIT,WPARAM,LPARAM)为了加快回调函数执行的效率,Microsoft使用了CALLBACK修饰关键词来定义WNDPROC,而 阅读全文
posted @ 2016-04-01 17:56 findumars 阅读(836) 评论(0) 推荐(0) 编辑
摘要:汇编与高级语言 1. 汇编基础知识 1.1. 寄存器 寄存器 用途 EAX,EBX,EDX,ECX 通用寄存器,由程序员自己指定用途,也有一些不成文的用法: EAX:常用于运算。 EBX:常用于地址索引。 ECX:常用于计数。 EDX:常用于数据传递。 EIP 指令寄存器,指出当前指令所在的地址。 阅读全文
posted @ 2016-03-18 22:52 findumars 阅读(1025) 评论(0) 推荐(0) 编辑
摘要:前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入ASM代码的程序员我想不多,因为这方面的资料太少了,另一方面,它还需要有基本的汇编语言知识,关於汇编语言的教程,那实在太多了,如果你对汇编语言不熟的话,建议你下载相交的教程先读读。因此,本文假定您已经熟悉了 阅读全文
posted @ 2016-03-13 18:06 findumars 阅读(1414) 评论(0) 推荐(0) 编辑
摘要:我一直认为Delphi功能与C++相比毫不逊色,提供了丰富的控件和类、全部API以及嵌入的汇编。最近小弟在把C版的Huffman压缩改用Delphi写时,顺便“研究”了一下Delphi的位操作和嵌入式汇编,利用嵌入汇编我们可以得到高效的程序代码,完成一些Delphi没有提供的底层功能。借贵报一方宝地 阅读全文
posted @ 2016-02-25 18:32 findumars 阅读(1276) 评论(0) 推荐(0) 编辑
摘要:技术交流,DH讲解. 正式之前,我们看看寄存器和CPU的标志位: OD中的截图,下方的CPAZSTDO就是标志位. Delphi的FPU窗口,右边一列就是标志位.为什么要给大家看标志位呢?因为ASM中的跳转语句都是由相应的标志位控制的.而标志位又是由于以下的情况影响的:1.运算结果为0,Zero F 阅读全文
posted @ 2016-02-08 21:49 findumars 阅读(1999) 评论(0) 推荐(0) 编辑
摘要:技术交流,DH讲解. 在D2010的classes中有个TBits类,这个类主要是位操作的. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 TBits = class private FSize: Integer; FBits: Pointer; procedure Error; 阅读全文
posted @ 2016-02-08 21:23 findumars 阅读(550) 评论(0) 推荐(0) 编辑
摘要:我一直认为Delphi功能与C++相比毫不逊色,提供了丰富的控件和类、全部API以及嵌入的汇编。最近小弟在把C版的Huffman压缩改用Delphi写时,顺便“研究”了一下Delphi的位操作和嵌入式汇编,利用嵌入汇编我们可以得到高效的程序代码,完成一些Delphi没有提供的底层功能。借贵报一方宝地... 阅读全文
posted @ 2015-12-09 23:39 findumars 阅读(2282) 评论(0) 推荐(0) 编辑
摘要:program Project1;{ Types and Structures Definition }type WNDCLASSEX = packed record cbSize: LongWord; style: LongWord; lpfnWndProc: Pointer; cbCls... 阅读全文
posted @ 2015-12-02 06:23 findumars 阅读(523) 评论(0) 推荐(0) 编辑
摘要:var EIP: Cardinal; procedure GetEIP(); stdcall;asm pop eax; mov EIP,eax; push eax;end; procedure TForm1.Button1Click(Sender: TObject);begin GetEI... 阅读全文
posted @ 2015-12-02 05:13 findumars 阅读(957) 评论(0) 推荐(0) 编辑
摘要:前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入ASM代码的程序员我想不多,因为这方面的资料太少了,另一方面,它还需要有基本的汇编语言知识,关於汇编语言的教程,那实在太多了,如果你对汇编语言不熟的话,建议你下载相交的教程先读读。因此,本文假定您已经熟悉... 阅读全文
posted @ 2015-11-26 22:24 findumars 阅读(1912) 评论(0) 推荐(0) 编辑
摘要:Delphi反汇编内部字符串处理函数/过程不完全列表名称参数返回值作用等价形式 / 备注_PStrCatEAX :目标字符串EDX :源字符串EAX连接两个 Pascal 字符串s:=copy(s+s1,1,255)_PStrNCatEAX :目标字符串EDX :源字符串CL :结果字符串最大长度E... 阅读全文
posted @ 2015-11-26 01:08 findumars 阅读(886) 评论(0) 推荐(0) 编辑
摘要:任何情况下,在寄存器的使用上,BASM遵循如下的规则: ASM 语句执行过程中,必须保存EDI、ESI、ESP、EBP、EBX 的值(5个寄存器,意思是可以用,但最后得恢复成原模原样)。 ASM 语句可以任意使用EAX、ECX、EDX(三个参数寄存器,也许是编译器提前帮我们存放了三个寄存器的值,... 阅读全文
posted @ 2014-11-21 21:42 findumars 阅读(990) 评论(0) 推荐(0) 编辑
摘要:function Fun(x: Integer): Integer;asm mov ecx, &x dec ecx {汇编中的 dec 是减 1 指令, 和 Delphi 是一样的} mov @Result, ecx {在本例中去掉 @ 也可以, 暂时不知怎么回事}end;去掉两个符号,对... 阅读全文
posted @ 2014-05-09 03:23 findumars 阅读(1313) 评论(0) 推荐(0) 编辑
摘要:举例:x指向的内存地址,其字节内容从低到高依次分别为c1,c2,c3,c4(Delphi读取一个integer的时候,结果是c4c3c2c1,其排列规则是"高高低低"),那么结果是c4,c3,c2,c1(Delphi读取一个integer的时候,结果是c1c2c3c4)用delphi写的程序,把x指... 阅读全文
posted @ 2014-05-09 01:08 findumars 阅读(1569) 评论(0) 推荐(0) 编辑
摘要:以delphi下调用stdcall 函数为例,从右往左压栈:procedure TForm1.Button2Click(Sender: TObject);var i:integer;begin i:=Add3(10,20);end;翻译成汇编:push $14push $0a;call ... 阅读全文
posted @ 2013-08-30 18:47 findumars 阅读(2138) 评论(0) 推荐(0) 编辑
摘要:把以下4个前提搞清楚以后,学习和使用汇编才有意义:--------------------------------------------------------------------------------------前提1:寄存器说明:EAX,EBX,EDX,ECX 通用寄存器,由程序员自己指... 阅读全文
posted @ 2012-10-28 07:51 findumars 阅读(2617) 评论(0) 推荐(1) 编辑

1
点击右上角即可分享
微信分享提示