首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Delphi汇编调用

相关·内容

Delphi调用驱动打印

前言 我们做打印小票的时候除了直接对端口发送指令的方式,还有就是调用打印机驱动打印的方式,在Delphi中想要用驱动打印的方式就可以用到TPrinter类 TPrinter类介绍 TPrinter类中封装了...结束一个成功打印的工作需要调用EndDoc过程。如果出现问题需要中断打印可以调用Abort方法。...调用BeginDoc可以初始化一个打印工作。如果打印工作被成功送入,应用程序将调用EndDoc方法结束打印。打印工作只有在调用EndDoc方法后才实际开始。...调用EndDoc方法将结束打印工作(并关闭当前打开的文体)。打印工作将在EndDoc方法调用结束后开始。在应用程序中调用EndDoc方法后,打印机开始打印。...不能直接调用TPrinter方法。TPrinter方法将由Printer函数自动调用。方法为打印机分配内存,并调用继承的构造方法。然后设置正确的驱动器、设备和端口.

2.2K30

Delphi调用动态链接库

调用动态库的两种方法 静态调用 这种用法的前提是在编译之前已经明确知道要调用DLL中的哪几个函数,编译时在目标文件中只保留必要的链接信息,而不含DLL函数的代码;当程序执行时,利用链接信息加载DLL函数代码并在内存中将其链接入调用程序的执行空间中...动态调用 这种方式是指在编译之前并不知道将会调用哪些DLL函数,完全是在运行过程中根据需要决定应调用哪个函数,并用LoadLibrary和GetProcAddress动态获得DLL函数的入口地址。...代码演示 我们先创建一个动态链接库名称为PosPayIntf,最近几章介绍Delphi技术的都是用这个动态库,因为正好因为项目要做一个对接第三方微信支付宝的动态库。 ?...---- 动态调用 今天我们主要说的还是动态调用,因为用动态调用的方法如果DLL不存在,或是入口函数有问题,我们都可以通过try except进行捕获,也不会影响主程序的使用。...调用的方式和静态调用一样 ? 最后用try finally来释放一下动态库 ? 这样就完成了,动态调用的方法不影响我们主程序的运行,只有在用到的时候才会调作它,推荐使用这个方法。

2.5K20

汇编角度看函数堆栈调用

下面以主函数调用求和函数分析函数堆栈调用 带着以下一个问题来探索: (1)形参的内存空间的开辟和清理是由调用方还是由被调用方执行的? (2)主函数调用函数结束后,主函数从哪里开始执行?...,首先我们必须具备的基础知识是几条简单的汇编指令和寄存器的功能和作用以及通常用的几个寄存器。...具备上边常用的intelx86汇编指令以及常用寄存器的功能。...现在回答最开始我们提出的几个题: (1)形参的内存空间的开辟和清理是由调用方还是由被调用方执行的? (2)主函数调用函数结束后,主函数从哪里开始执行?从头开始还是从调用之后开始?...答: (1)形参的内存空间的开辟和清理是由调用方执行的。 (2)主函数调用函数后执行执行调用之后的代码,是因为调用方在进行调用的过程中,将下一行指令的地址压栈。

58320

5.5 汇编语言:函数调用约定

函数是任何一门高级语言中必须要存在的,使用函数式编程可以让程序可读性更高,充分发挥了模块化设计思想的精髓,今天我将带大家一起来探索函数的实现机理,探索编译器到底是如何对函数这个关键字进行实现的,并使用汇编语言模拟实现函数编程中的参数传递调用规范等...这种调用方式规定函数调用者在将参数压入栈中后,再将控制权转移到被调用函数,被调用函数通过栈顶指针ESP来访问这些参数。函数返回时,由调用者程序负责将堆栈平衡清除。...使用汇编仿写数组传递方式,在main函数内我们动态开辟一块栈空间,并将数组元素依次排列在栈内,参数传递时通过lea eax,dword ptr [ ebp - 18h ]获取到数组栈地址空间,由于main...int) = ShowPrint; int Ret = pShowPrint(2, 4); printf("返回值 = %d \n", Ret); return 0; } 首先我们使用汇编仿写...ShowPrint函数以及该函数所对应的int(__stdcall *pShowPrint)(int, int)函数指针,看一下在汇编层面该如何实现这个功能。

21920

汇编窥探函数调用过程

今天,我们来通过反汇编看一下函数调用的过程(顺便学习下汇编),如下图,为一个函数调用的例子。主函数里面调用了test()函数。...[mmbnqe4jdu.png] 在X86环境下,进入调试模式,反汇编代码。...然后我们从主函数看起, [1hjrn6x5yu.png] 前面一些汇编代码都是编译器在调试模式下自动生成的调试信息代码,我们主要看画红线的两句代码。...[54ttnqunha.png] 调用test函数,汇编代码为call 00D7121C,很明显test函数的地址在00D7121C。...[asw60l7djz.png] 可以看出,一次函数调用过程,在底层居然做了这么多操作,而且函数调用会为每个函数调用分配栈空间,一旦调用结束之后,该栈空间便被回收掉。 完

94820

5.5 汇编语言:函数调用约定

函数是任何一门高级语言中必须要存在的,使用函数式编程可以让程序可读性更高,充分发挥了模块化设计思想的精髓,今天我将带大家一起来探索函数的实现机理,探索编译器到底是如何对函数这个关键字进行实现的,并使用汇编语言模拟实现函数编程中的参数传递调用规范等...这种调用方式规定函数调用者在将参数压入栈中后,再将控制权转移到被调用函数,被调用函数通过栈顶指针ESP来访问这些参数。函数返回时,由调用者程序负责将堆栈平衡清除。...使用汇编仿写数组传递方式,在main函数内我们动态开辟一块栈空间,并将数组元素依次排列在栈内,参数传递时通过lea eax,dword ptr [ ebp - 18h ]获取到数组栈地址空间,由于main...) = ShowPrint; int Ret = pShowPrint(2, 4); printf("返回值 = %d \n", Ret); return 0;}首先我们使用汇编仿写ShowPrint...函数以及该函数所对应的int(__stdcall *pShowPrint)(int, int)函数指针,看一下在汇编层面该如何实现这个功能。

22020

Win32汇编:过程与宏调用

声明局部变量◆ 高级语言程序中,在单个过程中创建使用和销毁的变量我们称它为局部变量(local variable),局部变量是在程序运行时,由系统动态的在栈上开辟的,在内存中通常在基址指针(EBP)之下,尽管在汇编时不能给定默认值..., [test1.My_Dword] mov ax, [test1.My_Word] mov al, [test1.My_Byte] ret main ENDP END main 关于宏汇编...宏过程(Macro Procedure)是一个命名的语汇编语句块,一旦定义后,宏过程就可以在程序中被调用任意多次,调用宏过程的时候,宏内的语句块将替换到调用的位置,宏的本质是替换,但像极了子过程,宏可定义在源程序的任意位置...* ret main endp end main 过程小例子 整数求和: 通过使用汇编语言实现一个整数求和的小例子. .data String WORD 100h,200h,300h,400h...call DumpRegs ; 调用查询寄存器子过程 push 0 call ExitProcess main ENDP END main 汇编实现性能度量:

61620

CC++ 反汇编:关于函数调用约定

函数是任何一门高级语言中必须要存在的,使用函数式编程可以让程序可读性更高,充分发挥了模块化设计思想的精髓,今天我将带大家一起来探索函数的实现机理,探索编译器到底是如何对函数这个关键字进行实现的,并使用汇编语言模拟实现函数编程中的参数传递调用规范等...一般编译器实现调用调用约定无外乎以下这几种: CDECL:C/C++默认的调用约定,调用方平栈,不定参数的函数可以使用,参数通过堆栈传递....cdecl 调用者平栈: cdecl是C/C++默认调用约定,该调用方式在函数内不进行任何平衡参数操作,而是在退出函数后对esp执行加4操作,从而实现栈平衡。...如下一段汇编代码,我们找到当前ESP基地址。 可以看到,esp+18就是第一个传入参数,那么程序在编译时,其实已经算出来了。...参考文献:《C++反汇编与逆向分析技术揭秘》

58410

嵌入式:ARM内嵌汇编及C和ARM汇编相互调用

在C和ARM汇编程序之间相互调用必须遵守ATPCS(ARM-Thumb Procedure Call Standard)规则。...为了保证程序调用时参数的正确传递,汇编程序的设计要遵守ATPCS。...在汇编程序中需要使用EXPORT伪操作来声明,使得本程序可以被其它程序调用。同时,在C程序调用汇编程序之前需要在C语言程序中使用extern关键词来声明该汇编程序。...C语言程序 为了保证程序调用时参数的正确传递,汇编程序的设计要遵守ATPCS。...在C程序中不需要使用任何关键字来声明将被汇编语言调用的C程序,但是在汇编程序调用该C程序之前需要在汇编语言程序中使用IMPORT伪操作来声明该C程序。在汇编程序中通过BL指令来调用子程序。

1K20

Win32汇编:过程与宏调用

声明局部变量◆高级语言程序中,在单个过程中创建使用和销毁的变量我们称它为局部变量(local variable),局部变量是在程序运行时,由系统动态的在栈上开辟的,在内存中通常在基址指针(EBP)之下,尽管在汇编时不能给定默认值...codemain PROCmov eax, [test1.My_Dword]mov ax, [test1.My_Word]mov al, [test1.My_Byte]retmain ENDPEND main关于宏汇编宏过程...(Macro Procedure)是一个命名的语汇编语句块,一旦定义后,宏过程就可以在程序中被调用任意多次,调用宏过程的时候,宏内的语句块将替换到调用的位置,宏的本质是替换,但像极了子过程,宏可定义在源程序的任意位置...* retmain endpend main过程小例子整数求和: 通过使用汇编语言实现一个整数求和的小例子..dataString WORD 100h,200h,300h,400h,500h.codemain...call DumpRegs ; 调用查询寄存器子过程push 0call ExitProcessmain ENDPEND main汇编实现性能度量: 通过调用库函数,实现对指定代码执行的性能度量

40030

静态逆向反汇编获取函数调用关系链

本文提出一种通过逆向二进制文件的方式,通过反汇编的指令获取函数之间的调用关系。...对于普通函数而言,在汇编层面直接调用的使其所在的函数地址,ida所在的加载器会将这个调用的实际函数地址替换成对应的函数名称,如下图1所示: 图2 通过对逆向汇编的分析,C/C++代码中的函数调用在编译成二进制之后...,逆向成汇编语言,从普通函数的角度观察,调用函数的指令有两类:一类是call指令。...如图2所示: 图3 汇编角度而言,普通函数的调用是最常用的一种形式,也最容易解析。...让我们一起看看一个有虚函数调用的函数的汇编实现: 图8 从上图可以很明白的知道,为什么虚函数父调用的关系缺失了,因为在汇编中这其实是一个地址的调用,要建立寄存器与具体虚表的关系是很困难的(或许本身就不可为

4.9K00

原 Linux下嵌入汇编代码调用API(u

fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:     1)在父进程中,fork返回新创建子进程的进程ID;     2)在子进程中,fork返回0;    ...在x86的系统中,%eax寄存器在进行系统调用前储存系统调用号。另外,由于六个及以上参数的系统调用并不多见,因此一般使用%ebx、%ecx、%edx、%esi和%edi依次存放前五个参数。...当调用结束后,函数的返回值存放在%eax中。...下面,我们将改写fork.c,直接嵌入汇编语言进行系统调用: #include  #include  int main() {     pid_t fpid;     ...而内核基本只与系统调用打交道;当然,我们也可以直接使用系统调用写程序,但势必会降低程序的可移植性。至于APIs如何进行系统调用,那就是Glibc等标准制定者的事了。

2.1K90
领券