自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(524)
  • 收藏
  • 关注

原创 汇编语言全接触-76.用汇编编 Windows 程序

用汇编编制一般的 Windows 程序需要的不是汇编编程的资料,而是 Windows 函数调用的资料,你分析一下下面的源程序就会发现,程序的结构跟用 BC++ 编 Windows 程序几乎一模一样,原来用 C++ 函数的地方,变成了一个 Call 外部子程序,而函数的参数是由 PUSH 指令先压入堆栈,先由最后一个参数压起。同样,用汇编编 Windows 程序也需要 .DEF 文件和 .RES 文件,这是由 Windows 程序的结构决定的。外部子程序,常量的定义等。

2026-01-08 16:49:13 515

原创 汇编语言全接触-75.汇编中参数的传递和堆栈修正

现在对这个子程序分析一下,push ebp/mov ebp,esp 是例行的保存和设置 EBP 的代码,sub esp,8 在堆栈中留出两个局部变量的空间,mov /add 语句完成相加,add esp,8 修正两个局部变量使用的堆栈,ret 8 修正两个参数使用的堆栈,相当于 ret / add esp,8 两句代码的效果。在 Win32汇编中,我们经常要和 Api 打交道,另外也会常常使用自己编制的类似于 Api 的带参数的子程序,本文要讲述的是在子程序调用的过程中进行参数传递的概念和分析。

2026-01-08 16:48:36 300

原创 汇编语言全接触-74.用Soft-ICE实现源码级调试

别的一些必要的设置:你必须把 Soft-ICE 的目录和 Masm 的 bin 目录设置到 path 中,因为这些路径中还有些文件要用到。然后也要设置 Link 文件,因为 Soft-ICE 使用 CodeView 格式的调试信息,所以 Link 也要包括下面的选项。首先,在编译的时候要生成带符号信息的 Object 文件,这需要打开 ML 程序的两个选项。/DEBUG 选项告诉 Link 在 exe 文件中包含调试信息。/coff 告诉编译器产生符号调试格式的 Object 文件。

2026-01-07 10:52:44 496

原创 汇编语言全接触-73.用汇编编写屏幕保护程序

在 Dos 汇编中,psp 段的 0080H 开始的位置就是命令行参数,在 Win32汇编中,我们获得命令行参数的方法是使用 Api - GetCommandLine,它没有输入参数,返回的是指向命令行的指针,返回的字符串中,包含执行文件的文件名。szCaption db '命令行参数测试',0。

2026-01-07 10:52:00 357

原创 汇编语言全接触-72.Win32程序的命令行参数

在 Dos 汇编中,psp 段的 0080H 开始的位置就是命令行参数,在 Win32汇编中,我们获得命令行参数的方法是使用 Api - GetCommandLine,它没有输入参数,返回的是指向命令行的指针,返回的字符串中,包含执行文件的文件名。szCaption db '命令行参数测试',0。

2026-01-06 09:02:04 333

原创 汇编语言全接触-71.在 Win32 下 Serial Port 的通訊

以下的東西是我在閱讀 "Communications Programming for Windows 95" 時做的一點筆記, 所以在 topic 上大致上都和這書上的第三章一樣. 一些 structure 和 API 的宣告都是 copy from VC 5.0 的 on-line help. 這些東西主要談的是如何在 Win32 的平台下對 serial port 的通訊. 可能可以帶來幫助的是那些了解 serial port 的通訊, 但是不清楚在 Win32 平台究竟有那些 API 可用的 prog

2026-01-06 09:01:22 318

原创 汇编语言全接触-70.实战串行通讯

CommConfigDialog 是弹出系统内置串口设置对话框的 API,我们在设备管理器中设置串口参数的对话框就是这个,使用这个 API 时不用先打开端口,它并不针对一个已打开的端口,而是仅仅是把 DCB 的内容填写到对话框中,当按了 OK 后把输入的结果存回到 DCB 数据结构中,至于什么时候把结果设置到串口上,那就是你自己要做的事情了。所以对于这个问题的建议是:如果程序只打算工作在 Win9x 下,为了简单起见,可以用同步方式写程序,如果程序打算在 NT 下也可以工作的话,就必须用异步方式写。

2026-01-05 15:55:17 936

原创 汇编语言全接触-69.Win32汇编教程十三

以上的 Api 是对 Win.ini 操作的,当然对于我们来说,用的更多的是在程序运行的目录中建立自己的 ini 文件,如果需要对自己的 ini 文件操作,就要用到另一组 Api,这一组 api 和上面的很象,只要把上面一组的 Profile 换成 PrivateProfile(私有的)就可以了,参数中也相应的多了一个 ini 文件名的参数。如果 Win.ini 没有指定的 Section,API 会新建立一个并写入数据,如果已经存在,则先删除原来 Seciton 中所有的 Key 值然后写入新的。

2026-01-05 15:54:37 964

原创 汇编语言全接触-68.Win32汇编教程十二

由于命名管道使用时作为客户端的程序必须知道管道的名称,所以更多的用在同一“作者”编写的服务器/工作站程序中,你不可能随便找出一个程序来要求它和你写的程序来通过命名管道通信。按照管道的传输方向分也可以分成两种,单向的双向的。一个控制台有三个句柄:标准输入、标准输出和和标准错误句柄,标准输入、标准输出句柄是可以重新定向的,你可以用匿名管道来代替它,这样一来,你可以在管道的另一端用别的进程来接收或输入,而控制台一方并没有感到什么不同,就象 Dos 下的 > 或者 < 可以重新定向输出或输入一样。

2026-01-04 14:15:02 726

原创 汇编语言全接触-67.Win32汇编教程十一

进程控制简单的说相当于在一个程序中执行另一个程序,你可以把它想象成在 Dos 下用 int 21h/4bh 功能来执行另外一个程序,如果单从执行另一个程序的目的来讲,在 Windows 中有不少方法,如使用 ShellExecute 等,但这些 Api 仅仅是“执行”而已,进程控制的意义在于可以创建一个进程,并可以通过进程句柄结束进程,同样你也可以通过进程句柄来跟踪程序,还可以用 ReadProcessMemory 和 WriteProcessMemory 来读写子进程的内存空间。

2026-01-04 14:14:17 505

原创 汇编语言全接触-66.Win32汇编教程十

WM_TIMER 消息的级别是很低的,程序只有在消息队列中没有其他消息的情况下,才会接收 WM_TIMER 消息,你可以通过下马方法验证:在一个设置了定时器的窗口上按住标题栏移动窗口,你会发现定时器停止了工作,当你松开鼠标后,在这个过程中丢失的 WM_TIMER 消息并没有被补上,所以如果你设计一个时钟程序,你不能使用定时器消息来计数,而必须在消息中每次获取正确的系统时间。多任务 - 如果程序有大量的数据处理,除了用多线程的办法,还可以用定时器,在每一个定时器消息中处理一小块内容。

2026-01-03 09:26:48 918

原创 汇编语言全接触-65.Win32汇编教程九

本篇的例子程序是一个复杂形状的窗口,窗口的形状是根据位图自动计算得到的,这也就是在我编写的小闹钟中使用的技术(大家可以到我的软件发布中下载一个看看),由于以前在网上看到的有关特殊形状窗口的例子最多就是画一个圆形,或者几个方块和椭圆结合的形状,没有一篇文章指出如何画出如“唐老鸭”这样一个造型的窗口。本文使用的算法可以自动根据位图的形状计算窗口形状。CombineRgn(hDest,hSource1,hSource2,CombineMode) - 合并区域。

2026-01-03 09:26:06 914

原创 汇编语言全接触-64.Win32汇编教程八

上面的4个API,必须成对出现,用 GetDC 取得的DC 必须用 ReleaseDC 释放,而用 CreateCompatibleDC 建立的 DC 必须用 DeleteDC 删除,不能混淆。Windows 并不允许程序员访问显示硬件,它的所有对屏幕的操作是通过环境设备(DC)来处理的,屏幕上的每一个窗口对应一个DC,你可以把一个DC 想象成这个窗口的视频缓冲区,你对DC的操作结果会反映到屏幕上,在窗口的DC之外,你也可以自己建立DC,这相当于建立一个内存中的缓冲区,你对这个DC的操作结果保存在内存中。

2026-01-02 11:53:45 837

原创 汇编语言全接触-63.Win32汇编教程七

在Windows 的 API 中有个函数可以用来实现这个功能,那就是 SetWindowLong PROTO hWnd,nIndex,dwNewLong ,参数的意思是 hWnd 是你要改变的窗口句柄,nIndex 是我们要改变窗口的什么属性,它的值可以是 GWL_EXSTYLE:改变窗口风格,GWL_WNDPROC:设置窗口的新的过程,这正是我们感兴趣的,还有是 GWL_USERDATA 这是窗口自定义的一个32位的数据。LTEXT "我的主页: ",-1, 5,5,54,9。subject=嗨!

2026-01-02 11:52:17 855

原创 汇编语言全接触-62.Win32汇编教程六

wID 是工具栏的标识,nBitmaps 是定义按钮的图片个数,因为如果你要使用自己的图片,所有图片是要放在同一行中的,然后就由你自己指定中间的个数, hBMInst 是包含已定义系统图片的资源句柄,在你不想自己画图,使用内定的标准图片时使用,一般包含这些图片的 hInstance 已经在 Widnows.inc 中定义为 HINST_COMMCTRL,同样 wBMID 一般是 IDB_STD_SMALL_COLOR,表示使用大图片还是小图片等等。使用工具栏和状态栏的源程序。Include 数据。

2026-01-01 13:05:38 653

原创 汇编语言全接触-61.Win32汇编教程五

其中,加速键ID是我们在程序中用LoadAccelerator装入加速键的资源编号,下面的每一项定义了一个键,VK_F1表示用F1,“A”表示键A,下面的VIRTKEY是必需的,再下面的CONTROL“或SHIFT、ALT”表示用CONTROL键组合,也就是说,如果你定义了:"C",IDM_COPY,VIRTKEY,CONTROL 而且在菜单定义中定义了 menuitem "拷贝",IDM_COPY,那么,你在程序中按下Ctrl-C实际上就是执行了菜单项“拷贝”。

2026-01-01 13:04:46 1054

原创 汇编语言全接触-60.Win32汇编教程四

Windows定义了确省的窗口过程,如果你对所有的消息都让Windows自己处理,那么你就能得到一个标准的窗口,同样,你也可以选择处理自己感兴趣的消息,这样,相当于产生了不同的子类,也就形成了不同的应用程序。这个窗口类有一个处理所有按钮消息的窗口过程,但是,如果你按自己的设想设计一个按钮,如想把按钮的表面换成位图,你就可以自己处理按钮窗口的 WM_PAINT 消息,当 Windows 需要画按钮表面的时候,你就可以随自己的意思去画。窗口以“消息”的形式接收窗口的输入,窗口也用消息与其它窗口通讯。

2025-12-31 16:08:46 825

原创 汇编语言全接触-59.Win32汇编教程三

虽然在Win32编程中,我们仍然可以这样做,但Win32编程给了我们一个方案 ---- 就是格式统一的资源文件,把字符串、图形、对话框包括上面的按钮,文本等定义到一个资源文件中,就可以方便的在不同的文件中使用它,最重要的是,如果我们用自己的文件格式,使用时就要涉及到这些文件的读写操作,比较复杂,但使用资源文件时,Windows提供了一系列的API来装入资源。#define DLG_MAIN 1 -- 类似于 .asm 文件的 equ 语句,和汇编源程序一样,这些定义是为了程序的可读性。

2025-12-31 16:08:11 374

原创 汇编语言全接触-58.Win32汇编教程二

model告诉编译器程序的模式,编过Dos汇编的人可能知道在Dos程序的模式有tiny,small,...huge 等,它指定了程序内存寻址模式,在huge等模式下,内存寻址和子程序调用将用Far的格式,但在Win32汇编中,你只能使用一个模式即 flat 模式,因为对Win32程序来说,内存是连续的一个4GB的段,无所谓小或大的模式。程序中的 ExitProcess 是一个标准的 Win32 API,对应 Dos汇编中的 int 20h 或 mov ah,4ch/int 21h,也就是程序退出。

2025-12-30 11:27:43 534

原创 汇编语言全接触-57.罗云彬的Win32汇编教程之一

在Dos下编汇编程序,我们可以管理系统的所有资源,我们可以改动系统中所有的内存,如自己改动内存控制块来分配内存,自己修改中断向量表来截获中断等,对其他操作也是如此,如我们对键盘端口直接操作就可以把键盘屏蔽掉,可以这样来描述Dos系统:系统只有一个特权级别,在编程上讲,任何程序和操作系统都是同级的,所以在Dos下,一个编得不好的程序会影响其他所有的程序,如一个程序把键盘口中断关掉了,所有程序就都不能从键盘获得键入的数据,直到任何一个程序重新打开键盘为止,一个程序陷入死循环,也没有其他程序可以把它终止掉。

2025-12-30 11:27:05 561

原创 汇编语言全接触-56.PE教程7 Export Table(引出表)

当PE装载器索引该数组查询函数地址时,让我们设想这样一种情况,如果程序员在.def文件中设定起始序数号为200,这意味着AddressOfFunctions 数组至少有200个元素,甚至这前面200个元素并没使用,但它们必须存在,因为PE装载器这样才能索引到正确的地址。函数数目至少等同于名字数目,没有名字的函数通过序数引出。这不容易,必须通过排除法,比如,AddressOfFunctions 的数组项在AddressOfNameOrdinals 数组中不存在相关指向,这就说明该函数RVA只通过序数引出。

2025-12-29 05:12:29 570

原创 汇编语言全接触-55.PE教程6 Import Table(引入表)

好了,如果您还在犯糊涂,就朝这边看过来: 现在有几个 IMAGE_IMPORT_BY_NAME 结构,同时您又创建了两个结构数组,并同样寸入指向那些 IMAGE_IMPORT_BY_NAME 结构的RVAs,这样两个数组就包含相同数值了(可谓相当精确的复制啊)。请看这里: 现有几个 IMAGE_IMPORT_BY_NAME 结构,我们收集起这些结构的RVA (IMAGE_THUNK_DATAs)组成一个数组,并以0结尾,然后再将数组的RVA放入 OriginalFirstThunk。本课我们将学习引入表。

2025-12-29 05:11:36 920

原创 汇编语言全接触-54.PE教程5 Section Table(节表)

(译者注: 假设一个文件的文件对齐尺寸是0x200,如果前面的 VirtualSize域指示本节长度是0x388字节,则本域值为0x400,表示本节是0x400字节长)。PE装载器将节映射至内存时会读取本值,因此如果域值是1000h,而PE文件装在地址400000h处,那么本节就被载到401000h。读取 IMAGE_FILE_HEADER 的 NumberOfSections域,知道文件的节数目。这是节基于文件的偏移量,PE装载器通过本域值找到节数据在文件中的位置。遍历整个数组,直至所有节都已处理完毕。

2025-12-28 08:55:01 787

原创 汇编语言全接触-53.PE教程4 Optional Header

为了证明这一点,可以增加NumberOfSections的值,Windows仍然可以正常执行文件。据我们的观察,Windows读取NumberOfSections的值然后检查节表里的每个结构,如果找到一个全0结构就结束搜索,否则一直处理完NumberOfSections指定数目的结构。我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行。其中只有两个域比较重要: e_magic 包含字符串"MZ",e_lfanew 包含PE header在文件中的偏移量。

2025-12-28 08:54:18 383

原创 汇编语言全接触-52.PE教程3 File Header(文件头)

为了证明这一点,可以增加NumberOfSections的值,Windows仍然可以正常执行文件。据我们的观察,Windows读取NumberOfSections的值然后检查节表里的每个结构,如果找到一个全0结构就结束搜索,否则一直处理完NumberOfSections指定数目的结构。我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行。其中只有两个域比较重要: e_magic 包含字符串"MZ",e_lfanew 包含PE header在文件中的偏移量。

2025-12-27 07:50:38 385

原创 汇编语言全接触-51.PE教程2 检验PE文件的有效性

本例程打开一文件,先检验DOS header是否有效,有效就接着检验PE header的有效性,ok就认为是有效的PE文件了。这里,我们还运用了结构异常处理(SEH),这样就不必检查每个可能的错误: 如果有错误出现,就认为PE检测失效所致,于是给出我们的报错信息。如果e_lfanew的值不正确导致异常,我们的SEH处理函数就得到执行控制权,简单恢复堆栈指针和基栈指针后,就根据safeoffset的值恢复执行到FinalExit标签处。如果前后两个值都匹配,那我们就认为该文件是一个有效的PE文件。

2025-12-27 07:49:44 973

原创 汇编语言全接触-50.PE教程1 PE文件格式一览

(译者注:节名称仅仅是个区别不同节的符号而已,类似"data", "code"的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能)如果某块数据想付为只读属性,就可以将该块数据放入置为只读的节中,当PE装载器映射节内容时,它会检查相关节属性并置对应内存块为指定属性。如果我们将PE文件格式视为一逻辑磁盘,PE header是boot扇区而sections是各种文件,但我们仍缺乏足够信息来定位磁盘上的不同文件,譬如,什么是PE文件格式中等价于目录的东东?PE装载器检查 PE header 的有效性。

2025-12-26 16:26:50 520

原创 汇编语言全接触-49.虚拟8086模式的内存管理

所以如你调用了两次V86MMGR_Allocate_Buffer,第一个V86MMGR_Free_Buffer将释放由第二个V86MMGR_Allocate_Buffer调用而分配的缓冲区。当你调用V86MMGR_Allocate_Buffer时,你在当前VM的V86内存范围内分配了一块内存,并且把其地址放到了EDI中。ECX 从传送缓冲区分配的字节数 CARRY FLAG 进位标志位,如你不想从ring0缓冲区拷贝数据到分配的内存块就清零, 如你想从ring0缓冲区拷贝数据到分配的内存块就置1。

2025-12-26 16:25:38 715

原创 汇编语言全接触-48.客户寄存器结构

如果我们要调用int 21h功能2h,我们需要在嵌套执行块内转换Client_Byte_Reg_Struc结构的Client_ah和Client_Dl,然后把值21h放在eax中。相应的,当保护模式程序运行时,假如一个中断产生,Client_xxx将包含保护模式程序的寄存器映象,Client_Alt_xxx将包含V86程序的寄存器映象。例如,VMM认为被中断的程序应该返回到另外一个地址,它就修改存储的寄存器映象中CS:IP的值,当这个程序被重新分派时,它将在新的CS:IP处开始执行。

2025-12-25 10:19:56 585

原创 汇编语言全接触-47.请求执行时间段与Shell函数

首先得到从SHEXPACKET结构到这些字符串的第一个字符之间的距离(即此结构的一些成员值),再把这些值加上SHEXPACKET结构的平板编移量,Shell VxD就能得到这些字符串在rgchBaggage数组中的偏移量。如果你想要完成其他的操作,你必须在rgchBaggage中指定操作的名字,在这个域中,必须包括从这个SHEXPACKET结构开始到一个ASCII字符串的距离,此距离大小以字节计数,字符串指定你要完成的操作的名称。当你回到家,如有一个工作适合你,职业介绍所将电话通知你这个好消息。

2025-12-25 10:19:14 697

原创 汇编语言全接触-46.DeviceIoControl接口

你的VxD至少要处理DIOC_Open(传送到dwIoControlCode),那是当Win32程序调用CreateFile打开你的VxD时VWIN32发送给你的VxD的。简单的说,DeviceIoControl接口是一种为Win32程序准备的调用VxD内部函数的方法。下面是一段加载动态VxD并且通过DeviceIoControl API 来调用VxD内部函数的Win32应用程序的源代码。 nInBufferSize是由lpInBuffer所指向的缓冲区的地址的大小(byte)。

2025-12-24 09:41:27 1031

原创 汇编语言全接触-45.VxD例程:消息框

当一个VxD程序要访问或修改虚拟机中的V86区时,它就在虚拟机的高线性区域进行操作。因为我们要在系统虚拟机上显示消息框,所以不能使用ebx中的值(ebx包含了在创建的虚拟机的句柄,而我们要的是系统虚拟机的句柄)。如果你的VxD程序要读取/改动V86或PM程序的状态,它可以改动客户寄存器结构里的值,当VMM返回执行该程序时,这些改动会被保存到程序里去。因为它要使用的代码和OnVMCreate相同,所以它在用另一个消息的地址初始化ecx后,就转到OnVMCreate中的代码去了。系统虚拟机的VMID是1。

2025-12-24 09:40:49 711

原创 汇编语言全接触-44.VxD 程序设计入门

例如,一些在你的VxD程序后加载的VxD程序在处理Device_Init控制消息时需要调用一些你的VxD服务,既然Sys_Critical_Init 控制消息在Device_Init消息之前被发送,所以你应该在Sys_Critical_Init 消息发送时初始化你的程序。这是因为:在VMM加载VxD程序的时候,它是按照初始化顺序值小的VxD先加载的顺序加载的,这样VxD程序就可以使用那些在它们之前加载的VxD程序提供的服务。例如,VxD2要用到VxD1中的服务,它就必须把它的初始化顺序值定义的比VxD小。

2025-12-23 14:21:28 595

原创 汇编语言全接触-43.虚拟设备驱动程序结构

一个设备描述块是一个结构,它包含了许多关于VxD的重要信息,比如VxD的名字,它的设备ID,它的VxD服务函数入口(如果有的话),等等。如果你的VxD程序在初始化时需要用到其他VxD程序提供的服务,那么你必须把初始化顺序的值设得比你所要调用的那个VxD程序的大,这样,当你的VxD程序加载时,你所要的VxD就已经在内存中为你准备好了。在大多数时候,你可以把上面的.DEF文件用到你的新建的VxD项目中去。在一个汇编的VxD项目中,段的定义是不必要的,段的定义主要用于C的VxD项目编写,但用在汇编里也是可以的。

2025-12-23 14:20:51 567

原创 汇编语言全接触-42.虚拟机管理器

主调度器的任务是选择有最高优先级的线程来执行。它进行第一级的中断处理:保存被中断程序的状态,把控制传送到第二级的中断处理,第二级的中断处理通常由各种VxD程序来进行实际的处理。当第二级中断处理程序完成了它的工作之后,它把控制转交给重分派程序,由重分派程序来恢复被中断程序的状态并从先前被中断的地方继续执行。虚拟机管理器(VMM)是Windows 95的实际操作系统,它建立和维护一个管理虚拟机的框架,同时为其他vxd程序提供许多重要的服务。这是提供的最低级的服务,其他所有的服务都是建立在页面内存服务上的。

2025-12-22 09:38:44 475

原创 汇编语言全接触-41.虚拟设备驱动程序初步

回调函数不像服务那样是公共的,它们是私有函数,VxD在特定的情况下把它们的地址送给其他的VxD程序。由于VMM把调用锁定到VxD服务的实际地址上,如果提供这个服务的VxD程序从内存中被卸载了,其他VxD程序调用这个服务时就会很快的因为调用无效的内存地址而导致系统崩溃。调用这些服务的机制和在第三层级别运行的的应用程序有很大的不同:每个导出VxD服务的VxD程序必须有一个唯一的ID,你可以从Microsoft得到一个这样的ID。这样,由于此VxD程序并没有虚拟任何设备,你就可以把它仅仅看作是你的程序的扩展。

2025-12-22 09:38:02 455

原创 汇编语言全接触-40.一个例子

这一章,我们要把我们已学的知识集合起来。具体来讲,我们来写一个使用ODBC APIs的程序.为简单起见,这个程序中我使用Microsoft的Access数据库(Microsoft Access 97) .hList dd?listview control句柄。hMenu dd?

2025-12-21 16:20:09 886

原创 汇编语言全接触-39.获得结果

比如说,如果结果集有4列,当结果集建立时,游标指向第一行.当调用了SQLFetch 后,游标被加1。如果执行的语句并不是返回结果集的类型,我们就知道结果集不可用了。如果结果集存在,则该函数返回结果集中的列数(字段数)。我们通过SQLBindCol来定位经度(列),用游标来定义纬度(行),用SQLFetch来获得坐标,而结果集就是地球。当调用SQLFetch来获得结果集中的行时,本参数指向的变量或缓冲区将被填入被绑定的列的值。与绑定一个变量到SQL语句的参数相同,我们连接(绑定)一个变量到结果集中的某一列。

2025-12-20 18:52:38 471

原创 汇编语言全接触-38.准备与使用语句

答案是: 我们必须提供需要的值.这种方法被称为参数绑定(parameter binding).简单点说,就是将一个参数标志符与用户程序中的变量建立连接的过程.在上面的例子中,我们需要创建一个缓冲区来告诉ODBC驱动程序,当它需要一个参数的具体值时,将从我们提供的字符串缓冲区中获得。换句话说,可认为是与参数标志符相连接的列(字段)的长度.在我们的例子中, 我们的参数标志符对列"name"使用了标准值.如果该列被定义了20字节长,我们就该在ColumnSize中填入20.这条SQL语句象我们希望的那样工作了。

2025-12-20 18:51:48 589

原创 汇编语言全接触-37.连接数据源

ValuePtr. 这个参数的意义由希望设置的属性值决定.如果属性值是32位的, 这个参数将被认为是想要设置的属性值.如果属性值是一个字符串或二进制缓冲区,它就被解释为指向字符串或缓冲区的指针.如果我们指定了要设置的属性为SQL_ATTR_ODBC_VERSION, 这个参数我们可以填入SQL_OV_ODBC3和SQL_OV_ODBC2这两个可能值,分别对应ODBC 3.x和2.x.如果数据源不需要的话,用户名和密码就不是必须的.函数的返回值与SQLAllocHandle的返回值相同.

2025-12-19 11:10:58 642

FLASH操作模块.rar

对常用的S29AL008D 及S29AL016DFLASH芯片进行操作,包括数据保存、数据读取、擦除扇区、编程数据到芯片等。

2025-12-29

经纬度网格显示模块.rar

该模块用于经纬度网格的绘制与显示,可实时接收多平台经纬度,以船形绘制在经纬网格对应的经纬度坐标中,并根据航速和航向信息绘制对应的矢量线。同时支持多种量纲的绘制调整。以经纬度网格形式呈现显示界面中,支持一个或多个平台经纬度同时接入,查看相对态势信息;模块中有导航信息结构体,不局限于经纬度、航速和航向信息等导航信息的显示;经纬度网格占用资源小,可兼容嵌入式系统的调用绘制。

2025-12-25

坐标系转换模块.rar

可实现位置信息在地心地固坐标系(ECEF)和地理坐标系(GEO)间互相转换。在导航传感器定位解算算法中使用该模块。

2025-12-25

基于QT的页面切换控件重用模块介绍.rar

可完成添加页面、删除页面、插入页面、替换页面,切换页面等基本页面容器功能。实现点击触发事件,长按触发事件,返回当前点击位置和当前页面。适配触控屏实现左右滑动翻页,快速滑动翻页,慢速滑动小幅度回弹,大幅度翻页。 适用于对页面切换控件或滑动翻页有需求的交互设备,Qt5以上开发环境。

2025-12-25

四位置寻北解算模块.rar

根据光纤陀螺的数据,使用四位置寻北算法计算方位角。根据加速度计数据,计算横滚角和俯仰角。无论是惯导还是光纤寻北算法中都需要用到寻北解算功能来计算出方位角(航向角),使用范围广,使用频率高,故该模块的使用范围和应用前景较为广泛。

2025-12-25

通用轻量级日志.rar

该日志库代码简洁,设计优雅,提供了将log输入到不同目标的接口和线程安全的接口。 支持跨平台(Windows、Linux、VxWorks、道),支持日志模式设置,支持日志级别设置,支持日志目标设置。本轻量级日志属于跨平台库,提供了一个简单的API来提供日志功能,便于软件程序的调试和故障定位。它支持ASCII、MBCS和Unicode格式的数据文件,并已在Windows、Linux、VxWorks、道系统上进行了测试,已明确设计为可移植到任何平台。

2025-12-25

通用配置文件操作.rar

该模块实现跨平台操作ini配置文件的接口。多平台(Windows、Linux、VxWorks、道),加载和保存ini风格的配置文件,在所有平台上,配置文件可以使用任何换行格式,可选的不区分大小写的节和键(仅针对ASCII字符),同时支持char或wchar_t编程接口,同时支持MBCS(系统区域设置)和UTF-8文件编码,通过用户编写的转换器类支持非标准字符类型或文件编码,支持以编程方式添加/修改值。本重用件属于跨平台库,提供了一个简单的API来读取和写入ini风格的配置文件。它支持ASCII、MBCS和Unicode格式的数据文件,并已在Windows、Linux、VxWorks、道系统上上进行了测试,已明确设计为可移植到任何平台。

2025-12-25

基于杆臂的速度补偿模块.rar

可实现导航传感器到基准点的速度杆臂补偿。可在导航传感器速度杆臂补偿算法中使用该模块。

2025-12-25

水平阻尼和垂向阻尼.rar

捷联惯导水平回路阻尼算法和垂向回路阻尼算法,是长航时惯导必须使用的功能,应用前景广泛。

2025-12-25

基于QT的经纬度编辑显示控件.rar

实现了经纬度信息的页面显示以及键盘编辑功能。在海图软件中,经纬度信息是重要的显示内容,本控件可以通过直接显示出这些信息,具有可重用性。

2025-12-25

基于Qt的串口重用模块介绍.rar

将串口实现封装为类,对外提供打开串口、关闭串口、发送数据、判断串口是否已经打开等接口函数,对二次开发者提供了收到数据虚函数用于二次开发者继承完成自己的逻辑代码处理功能。目前大部分产品都会用到串口通讯,而Qt常规的串口通讯类都是轮询方式的,对于大数据量串口通讯不太适用,本模块采用多线程方式设计,应用该重用模块可快速搭建基于Qt的串口通讯功能,二次开发者仅需实现自己的逻辑处理代码即可。

2025-12-25

基于QT的程序崩溃内存转储.rar

将程序崩溃内存转储实现封装为类,便于为程序增加崩溃内存转储功能,用于发布后的软件崩溃调试。大部分软件发布后还存在一定的bug,软件会不定期异常崩溃,此时对于软件调试工作具有一定难度,应用该重用模块可快速为程序增加崩溃内存转储功能,使发布后的软件崩溃调试变得相对容易。

2025-12-25

基于Qtd的TCPServer重用模块.rar

将TCP服务器实现封装为类,理论上支持无限个客户端同时连接并分别处理,对外提供启动监听服务器、停止服务器、向指定客户端发送数据、向所有客户端广播数据等接口函数,对二次开发者提供了客户端接入、客户端退出、客户端传来数据等信号用于二次开发者设计相应的槽函数完成自己的逻辑代码处理功能。

2025-12-25

基本BI协议的DVL数据处理模块.rar

针对:BI, ±TTTTT, ±LLLLL, ±NNNNN, ±MMMMM,S<CR><LF> TTTTT X轴横向对底速度,单位为mm/s LLLLL Y轴纵向对底速度,单位为mm/s NNNNN Z轴对底正常速度,单位为mm/s MMMMM 速度误差(mm/s),单位为mm/s(不使用) S 状态(A为有效) 报文,进行数据处理,获取速度报文

2025-12-25

航行日志管理模块.rar

该模块用于存储和导出航行日志信息。将导航信息包括时间、位置、航向、航速等信息存储于数据库中,可以时间为条件导出指定时间段航行记录,用以实现电子海图或其他设备的航行日志查询和航行记录回放等功能。也可根据使用者的需求在本模块基础上增加其他信息的存储。

2025-12-25

工作状态配置化监控模块.rar

使用.ini配置文件对设备工作状态报文中工作状态及故障信息进行配置化监控。在需要进行设备工作状态监控的集成管理设备上使用该模块,可简化开发人员对解析、显示的修改过程。

2025-12-25

不同码制字符串间转化.rar

Unicode字符集为每一个字符分配了一个唯一的ID,UTF-8指将码位转为字节序列的规则(可理解为加密、解密的过程),本模块实现了将Unicode码制与UTF-8码制相互转化的功能。 GB2312字符集是由我国发布的信息交换用汉字编码字符集,本模块实现了将GB2312码制向UTF-8码制转换的功能。wstring是占用两字节大小的宽字符,string是占用1字节大小的窄字符。本模块实现了将窄字符向宽字符转换的功能。出现字符串格式不兼容的情况时,可应用本模块的函数进行字符格式之间的转化。

2025-12-25

windows系统下C++实现的软件用户授权.rar

将用户授权功能实现封装为类,对外提供“判断用户是否被授权”、“对用户进行授权”等接口函数。大部分随PC交付的软件都要求用户只能在交付产品上使用,而运行于PC的软件通常可以被用户随意拷贝到其它电脑运行,为了避免用户随意拷贝,需要对软件进行授权管理,应用该重用模块可快速实现授权管理功能。

2025-12-25

Qt实现表格翻页、跳转.rar

该模块实现Qt表格翻页、跳转操作接口,可实现上一页、下一页、跳转到首页、末页、中间页功能,接口调用简单,使用方便。

2025-12-25

QSQLITE数据库.rar

可实现Qt自带小型数据库QSQLITE的增删改查和数据库的创建。

2025-12-25

捷联惯导粗对准-双矢量定姿.rar

用于捷联式惯性导航粗对准确定导航坐标系与载体坐标系之间的姿态变换矩阵。捷联式惯导均离不初始粗对准,该模块作为捷联式惯导粗对准的基础模块,可推广到其它捷联式惯导设备上。

2025-12-29

大华摄像头视频重用.rar

此视频模块是基于大华摄像头库的视频显示,可实现大华摄像头登录与退出,视频显示等,可用于监控系统的集成。该模块可直接应用于各类使用大华摄像头的监控系统中,如无人艇监控系统。,用户在使用中无需了解大华摄像头的具体机制,便可直接获取视频图像,可减小集成系统监控模块的开发量。

2025-12-29

文件批处理模块.rar

在做半实物仿真时,有时需要对录取到的多个系统数据进行统一处理,本模块可实现对多个文件进行顺序读取和处理,省去单个读取的繁琐程序。

2025-12-29

基于qt的曲线绘制.rar

将QCustomPlot进行二次封装成多条曲线的实时显示的曲线绘制界面类,使用时将Qt的设计师界面类提升为曲线绘制界面类,进行简单设置就可实现多条曲线显示与趋势对比,使用操作更加简单,CPU占用率也很小。

2025-12-29

嵌入式系统多线程网络处理方法.rar

在嵌入式系统中,基于TCP协议的网络传输使用频繁,利用该重用模块,可以在网络传输较多的场景下调用,增加开发效率。将net.h,net.c加入到工程中,根据项目需要,调用net中TCP服务器的初始化、网路通讯监控、网路数据包解析及网络数据包接受任务,采用多线程的方式提高网络传输与解析效率。

2025-12-29

对周期为T的数据平滑预报.rar

对周期为T的数据进行平滑预报。平滑预报是常用算法。

2025-12-29

数据排序及中位数运算.rar

将一列数据排序,并返回中位数。

2025-12-29

嵌入式系统配置文件读取方法.rar

实现配置文件中各个数据项的读写操作,在应用系统初始化过程中,如果需要读取相关配置,可使用该功能。

2025-12-29

矩阵及四元数运算.rar

矩阵及四元数运算

2025-12-29

基于C++的视频编解码.rar

用于实现对ffmpeg二次封装,简易实现基于ffmpeg的音视频处理。

2025-12-29

基于VC6,VS的仅限浮点数输入控件.rar

该控件为仅限输入浮点数的编辑框,用户使用时直接将CEdit型对象的类型替换为FloatEdit即可,即将“CEdit m_editTest”修改为“FloatEdit m_editTest”。上位机软件开发中,经常会有需要输入浮点数的交互界面,当输入的内容不是浮点数且使用该输入内容做处理时未进行有效性判断,会导致很严重的后果。针对该场景,为了避免出现问题,同时为了简化软件编码,设计了本重用控件。

2025-12-29

环形数据缓存区读写方法.rar

将ringbuf.h,ringbuf.c加入到工程中,根据工程需要,调ringbuf中写入多字节/一字节,读出多字节/一字节API接口,数据指针根据写入/读出自动移动,实现环形数据缓冲区写入、读出功能。

2025-12-29

多源信息择源重用框架.rar

用以实现实时操作系统下的数据择源。满足信息类软件数据择源需求。

2025-12-29

串口网口互转模块.rar

可接收串口数据并使用UDP网口发出.也可接收UDP网口数据使用串口发送。该模块可用于需要进行串网互转的工程实践中。

2025-12-29

编队计划航线规划.rar

输入单个成员计划航线,快速生成与计划航线平行非相交的其他编队成员计划航线,用于编队航线跟踪控制。减小编队航线规划计算量与操作复杂程度,降低后续集群航线规划软件功能模块开发工作量。

2025-12-29

北三短报文收发模块.rar

用于解析北斗用户机用户接口协议4.0版本。

2025-12-29

vdr告警显示功能.rar

该模块实现航行数据记录仪的设备运行状态、告警配置、设备构成、故障列表、设备自检及拾音器自检等功能。此部分功能使用嵌入式QT开发,界面延用标准化设计,为各个船型vdr通用功能,仅需更改配置文件模块配置,即可生成不同船型的报警显示功能,重用程度很高。

2025-12-29

QT数据收发模块.rar

收发UDP报文,通过网络收发UDP包是很常见的需求,可以大量应用。

2025-12-29

FT-C6713初始化模块.rar

对国产化DSP FT-C6713芯片进行初始化,包括设置解算中断、CAN0和CAN1中断、LED闪烁功能。

2025-12-29

FPGA数据收发模块.rar

采用 PC 机的串口调试助手,发送数据位至 FPGA,FPGA 接收到数据位之后,立即回传至 PC 机。当数据收发需要多路串口时,可通过此模块在FPGA中扩展多路串口。

2025-12-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除