Iczelion 的 Win32Asm VxD 汇编教程 (七)

Iczelion的Win32汇编教程 Iczelion的Win32汇编教程,传说中的经典win32汇编教程 立即下载

请求执行时间段与Shell函数


 

理论:

请求执行时间段通常被简称为"appy time"。是指当系统VM稳定到充许VxDs和ring-3级别的应用软件(特别是16-bit的应用软件)交互时的时间段。例如,在一个特定时间段,VxDs能加载并调用在16-bit Dlls中的函数。这个appy time在Windows 3.x中是无效的。在Windows3.x,一个VxD能包含在16-bit DLLs中的任意函数的地址,并模拟一个远调用到这个地址。然而,因为造成了VMM重入,这个操作将中断所有正在ring-3中执行的任务。所以能被VxDs能调用的APIs被要求是中断安全的,象PostMessage。在Windows 95,一个VxD在appy time的帮助下能调用任意一个在16-bit DLLs中的函数。

假如你的VxDs被通知正处在appy time,它就能加载16-bit DLLs并调用其中的函数。VxDs怎么知道appy time到来了呢?这就要使用Shell VxD请求一个appy time。当系统VM在稳定状态,Shell VxD将调用某VxD的一个回调函数,此函数是在VxD请求appy time时指定的。Shell VxD发生一次appy time事件仅仅调用一次你的回调函数。这就象找工作。你到职业介绍所,登记你的名字和电话号码。当你回到家,如有一个工作适合你,职业介绍所将电话通知你这个好消息。当你收到了这个消息,他们就不再通知你了。

在一个appy time起作用前要花上一些时间进行相关处理。appy time事件以下环境中将不起作用:

1、系统启动或关机时。
2、当系统VM在临界段或等待一个信号量时。

管理一个appy time事件

你可以通过调用_SHELL_CallAtAppyTime来注册一个appy time事件,它的定义如下:

VxDCall _SHELL_CallAtAppyTime, <<OFFSET32 pfnCallback>,  dwRefData, dwFlags, dwTimeout>

  • pfnCallBack -- 当appy time事件发生时你要Shell VxD调用的回调函数的平板地址。这个函数接收两个参数,dwRefData和dwFlags,与你传送给_SHELL_CallAtAppyTime的两个一样。记住,Shell VxD采用C调用顺序调用你的回调函数。总而言之,你要象这样定义你的回调函数:

    BeginProc OnAppyTime, CCALL, PUBLIC
    ArgVar dwRefData,DWORD ; declare argument name and type
    ArgVar dwFlags, DWORD
    EnterProc
    你的代码...
    LeaveProc
    Return
    EndProc OnAppyTime
  • dwRefData -- 你要Shell VxD传送给你的回调函数的参考数据。可以是你想要的任何东西。
  • dwFlags -- 事件标志。

    如下值之一:
    CAAFL_RING0 ring-0事件
    CAAFL_TIMEOUT 由dwTimeout指定的时间到期事件。

    假如你只想在一定的时间内等待appy time事件,使用CAAFL_TIMEOUT标志。如你想一直等待appy time事件,使用NULL。CAAFL_RING0作用不明。
  • dwTimeout -- 在appy time事件发生前,VxD能等待时间段长度。时间段的单位不明。

这个服务是异步的,意味着你为appy time事件注册回调函数之后立即返回。

如果这个服务调用是成功的,在eax中返回appy time事件句柄。假如调用失败,在eax返回0。

你可以调用_SHELL_CancelAppyTimeEvent来撤消appy time事件注册,它仅有一个参数,就是由_SHELL_CallAtAppyTime返回的appy time事件句柄。

你应当在appy time事件到来时检查系统。例如,当你在系统关闭时注册appy time会发生什么?你的VxD的回调函数将不会得到调用!当appy time事件到来时,你应当调用_SHELL_QueryAppyTimeAvailable来查询系统状态。这个服务没有参数。如果appy time无效,在eax中返回0,例如:当系统关闭时或消息服务程序产生一个一般保护性错误时。

这个服务不会告诉你现在是不是appy time:它仅仅告诉你可能有一个appy time事件到来。简而言之,如果你想安全运行,首先调用_SHELL_QueryAppyTimeAvailable并检查eax中的值是否非零值,然后才可继续调用_SHELL_CallAtAppyTime。

请求执行时间段Shell服务

当appy time到达时,你可以使用几个Shell服务调用:

  • _SHELL_CallDll
  • _SHELL_FreeLibrary
  • _SHELL_GetProcAddress
  • _SHELL_LoadLibrary
  • _SHELL_LocalAllocEx
  • _SHELL_LocalFree

使用提供的这6个服务,VxDs可以调用在16-bit DLLs/EXE中的16-bit函数,象WinHelp。然而,我们马上要进步到32-bit时代(未来是64-bit) ,所以我不会仔细研究它们。如你对此感兴趣,你可以在Windows 95/98DDK文档中了解它们。

另外一些只请求执行时间段服务我想更有用处:_SHELL_ShellExecute和 _SHELL_BroadcastSystemMessage。使用_SHELL_BroadcastSystemMessage,你能在一次调用中发送消息到顶端的窗口和所有的VxDs。如果appy time有效,你可以发送消息到窗口和VxDs。如果appy time无效,你只能发送消息到VxDs。

_SHELL_ShellExecute是在ring-3中的函数ShellExecute在ring-0中的对应函数。实际上,它调用ring-3中的ShellExecute完成这个工作。使用外壳服务,你可以运行/打开/打印任意文件。

_SHELL_ShellExecute的定义如下所示:

VxDCall _SHELL_ShellExecute,<OFFSET32 ShexPacket>

它仅有一个参数,SHEXPACKET结构的平板地址。它从ShellExecute函数中返回一个值到eax中。让我们研究一下SHEXPACKET结构:

shex_dwTotalSize SHEXPACKET结构的字节数加上可选的参数rgchBaggage的大小,它直接跟随在这个结构之后。我等一下描述rgchBaggage。

  • shex_dwTotalSize SHEXPACKET结构的字节数加上可选的参数rgchBaggage的大小,它直接跟随在这个结构之后。我等一下描述rgchBaggage。
  • shex_dwSize SHEXPACKET结构的字节数,不包括rgchBaggage。结合上面的shex_dwTotalSize值,外壳VxD能计算任意长度的rgchBaggage的大小。
  • shex_ibOp 你要完成的操作。假如你指定0,意味着你想要打开一个文件。如果是一个可执行文件,就运行它。如果你想要完成其他的操作,你必须在rgchBaggage中指定操作的名字,在这个域中,必须包括从这个SHEXPACKET结构开始到一个ASCII字符串的距离,此距离大小以字节计数,字符串指定你要完成的操作的名称。SHEXPACKET结构的大小是32字节。如果操作字符串紧跟在SHEXPACKET结构后,shex_ibOp中的值必须是32。要知道你可以完成的操作,请查看ShellExecute服务。有三个操作被定义,"open"、"print"和"explore"。
  • shex_ibFile 从此结构开始到一个ASCII字符串的距离,这个字符串是你想要传递给ShellExecute的文件名,就象Shex_ibOp成员。
  • shex_ibParams 你想传递到由shex_ibFile指定的文件的可选参数。假如此文件是一个文档文件,你不想传递任何参数给它,就用0。假如你想传递参数给那个文件,在把从此结构开始到此成员指定的字符串的距离放在这个成员中。简而言之,就象shex_ibOp和shex_ibFile成员。
  • shex_ibDir 工作目录。假如你想使用Windows目录就指定0,否则指定其为在此结构后的首选目录名字符串,并把从此结构开始到目录名字符串的距离值放到这个成员中。
  • shex_dwReserved 如其名字所指,它是保留的。不要理它。
  • shex_nCmdShow 应用程序窗口怎样被显示。这是一个你正常传递给ShowWindow的值,比如,SW_XXXX值。可在windows.inc中查看这些值。

所有成员的大小都是双字的。在这里我介绍刚才我承诺的rgchBaggage成员。仅有一点不同,因为其大小是可变的,所以它作为SHEXPACKET结构的一员却不能包括在此结构的定义中。查看shell.inc,你看到rgchBaggage并不在SHEXPACKET结构的定义中,尽管在Windows 9x DDK文档中,声明其是SHEXPACKET结构的一员。

rgchBaggage是什么?简单说来其是跟在SHEXPACKET结构后的一个字符串数组。在这个数组中,你可以把你要对文件完成的操作名称、文件的名字、你要传递给文件的参数和工作目录放在其中。首先得到从SHEXPACKET结构到这些字符串的第一个字符之间的距离(即此结构的一些成员值),再把这些值加上SHEXPACKET结构的平板编移量,Shell VxD就能得到这些字符串在rgchBaggage数组中的偏移量。例如,假如SHEXPACKET结构从60000h开始,字符串紧跟其后,结构与字符串之间的距离是结构本身的大小,32字节(20h)。所以Shell VxD知道字符串定位在60020h。

例子

这是一个显示如何注册一个appy time事件并且使用_SHELL_ShellExecute的例子。VxD是动态的,被一个简单的Win32应用程序使用。当一个用户按下"run Calculator"按纽,win32应用程序调用DeviceIoControl去要求VxD注册一个appy time事件并且运行在Windows目录中的calc.exe。

;--------------------------------------------------------------------------------- 
;                                   VxD Source Code 
;--------------------------------------------------------------------------------- 
.386p 
include /masm/include/vmm.inc 
include /masm/include/vwin32.inc 
include /masm/include/shell.inc 
VxDName TEXTEQU  
ControlName TEXTEQU  
VxDMajorVersion TEXTEQU <1> 
VxDMinorVersion TEXTEQU <0> 

VxD_STATIC_DATA_SEG 
VxD_STATIC_DATA_ENDS 

VXD_LOCKED_CODE_SEG 
;---------------------------------------------------------------------------- 
; Remember: The name of the vxd MUST be uppercase else it won't work/unload 
;---------------------------------------------------------------------------- 
DECLARE_VIRTUAL_DEVICE %VxDName,%VxDMajorVersion,%VxDMinorVersion, %ControlName,UNDEFINED_DEVICE_ID,UNDEFINED_INIT_ORDER 

Begin_control_dispatch %VxDName 
        Control_Dispatch W32_DEVICEIOCONTROL, OnDeviceIoControl 
End_control_dispatch %VxDName 
  

BeginProc OnDeviceIoControl 
 assume esi:ptr DIOCParams 
 .if [esi].dwIoControlCode==1 
      VxDCall _SHELL_CallAtAppyTime,<,0,0,0> 
 .endif 
 xor eax,eax 
 ret 
EndProc OnDeviceIoControl 
VXD_LOCKED_CODE_ENDS 

VXD_PAGEABLE_CODE_SEG 
BeginProc OnAppyTime, CCALL 
 ArgVar RefData,DWORD 
 ArgVar TheFlag,DWORD 
 EnterProc 
 mov File.shex_dwTotalSize,sizeof SHEXPACKET 
 add File.shex_dwTotalSize,sizeof EXEName 
 mov File.shex_dwSize,sizeof SHEXPACKET 
 mov File.shex_ibOp,0 
 mov File.shex_ibFile,sizeof SHEXPACKET 
 mov File.shex_ibParams,0 
 mov File.shex_ibDir,0 
 mov File.shex_dwReserved,0 
 mov File.shex_nCmdShow,1 
 VxDCall _SHELL_ShellExecute,  
 LeaveProc 
 Return 
EndProc OnAppyTime 
VXD_PAGEABLE_CODE_ENDS 

VXD_PAGEABLE_DATA_SEG 
 File SHEXPACKET <> 
 EXEName db "calc.exe",0 
VXD_PAGEABLE_DATA_ENDS 

end

讲解

VxD等待一个DeviceIoControl消息:第1号服务。当它收到上述消息,它将注册一个appy time事件。

VxDCall _SHELL_CallAtAppyTime,<<OFFSET32 OnAppyTime>,0,0,0>

它将传送OnAppyTime函数的平板地址到_SHELL_CallAtAppyTime,这样,当appy time事件发生时,Shell VxD将调用它。因我们不需要使用任何参考数据并且不需要处理过期情况,所以紧跟OnAppyTime函数的三个参数都是0。

当appy time事件发生时, Shell VxD调用OnAppyTime函数。

BeginProc OnAppyTime, CCALL

我们用BeginProc描述一个函数。因为Shell VxD用C调用顺序调用OnAppyTime,我们需要指定CCALL属性。

ArgVar RefData,DWORD
ArgVar TheFlag,DWORD
EnterProc
...
LeaveProc
Return

因为Shell VxD用两个参数调用OnAppyTime,我们必须设置堆栈结构。ArgVar宏用来调整每个要传递到函数的参数的堆栈结构。它的语法如下:

ArgVar varname, size, used

varname是参数的名字。你可以使用你喜欢的任意名字。size是参数的大小。你可以使用BYTE、WORD、DWORD或1,2,4。used通常被忽略。

紧接着ArgVar宏,我们需要使用EnterProc和LeaveProc宏来标志在程序中存放变量和参数的结构的开始与结束,使其能被正确访问。使用Return宏返回到调用者。

    mov File.shex_dwTotalSize,sizeof SHEXPACKET 
    add File.shex_dwTotalSize,sizeof EXEName 
    mov File.shex_dwSize,sizeof SHEXPACKET 
    mov File.shex_ibOp,0 
    mov File.shex_ibFile,sizeof SHEXPACKET 
    mov File.shex_ibParams,0 
    mov File.shex_ibDir,0 
    mov File.shex_dwReserved,0 
    mov File.shex_nCmdShow,1 
    VxDCall _SHELL_ShellExecute, 

在这个程序中的指令是简单的:初始化SHEXPACKET结构并且调用_SHELL_ShellExecute服务。记住 shex_dwTotalSize包含SHEXPACKET结构自身的和跟着它的字符串的组合大小。这是一个简单的事情。假如字符串不紧跟在此结构之后的,你必须计算从结构第一个字节到到字符串最后一个字节之间的距离。shex_ibFile包含此结构自身的大小,因为程序名紧跟在此结构之后。shex_ibDir是0,意味着把Windows目录作为工作目录。这并不意味着程序必须在Windows目录中。程序可以在Windows能找到的任意地方。

shex_nCmdShow是1,即SW_SHOWNORMAL的值。

File SHEXPACKET <>
EXEName db "calc.exe",0

我们定义一个SHEXPACKET结构,其后紧跟着想要运行的程序名。


Iczelion's Win32 Assembly English(Iczelion的汇编教程英文版) Iczelion's Win32 Assembly English(Iczelion的汇编教程英文版) 从Iczelion的官网(http://win32assembly.online.fr)下载的zip,为方便收藏打包成chm。 立即下载

相关推荐

win32汇编语言教程

本帮助文件包括:Iczelion的Win32汇编教程、Iczelion 的 ODBC 教程、Iczelion 的 VxD 教程共三部分

客户寄存器结构

客户寄存器结构我们将学习本教程中另外一个重要的结构,叫客户寄存器结构。在本文中,V86指虚拟8086模式。在这里下载例子程序理论VxDs与正常的win32/win16/DOS应用程序有很大不同。大多数情况下,当其他应用程序正常工作时,它们是休眠的。它们象一个监管者一样工作,其作用是监视ring-3应用程序并在其出错时改正它们。下面是其工作时的典型的情况:1、中断发生时2、V

GodDragon的专栏 2325

win32汇编教程(比较全)

mht格式的win32汇编,比较全!想学汇编的朋友可以下载来看看。

请求执行时间段与Shell函数

请求执行时间段与Shell函数下载例子程序理论:请求执行时间段通常被简称为"appy time"。是指当系统VM稳定到充许VxDs和ring-3级别的应用软件(特别是16-bit的应用软件)交互时的时间段。例如,在一个特定时间段,VxDs能加载并调用在16-bit Dlls中的函数。这个appy time在Windows 3.x中是无效的。在Windows3.x,一个VxD能包

GodDragon的专栏 2307

Iczelion的Win32汇编教程.rar TXT文本

Iczelion的Win32汇编教程.rar TXT文本 适合囧魄的人用的 手机 MP3上能看 效果差点喽

测绘无人船避坑指南:云卓H12Pro遥控器接海康摄像头,从网络设置到RTSP流延迟优化全流程

本文详细解析了测绘无人船视频子系统的优化方案,重点介绍海康威视摄像头与云卓H12Pro遥控器的深度适配流程。从网络设置到RTSP流延迟优化,提供了一套经过实测的低延迟(<200ms)解决方案,适用于复杂水域环境下的测绘任务。

weixin_30415113的博客 625

vsdx是什么格式(图文细解)

Visio是Visio16含以上版本的的一种文件格式,以新文件格式 (.vsdx) 保存图表,该格式是桌面默认格式,并且适合在 SharePoint 上的浏览器中查看。在突然受到这个文件后不知道该如何打开,直接双击的话是无法打开的,因此有不少小伙伴都在问vsdx用什么软件打开,下面就介绍下吧!4、单击打开后,在计算机的弹出窗口界面中,选择vsdx选项;2、接下来在该应用程序首页中,点击打开左上角的文件;5、接着在弹出的对话框中,点击选择“由文件创建”;7、在弹出的界面中点击想要打开的vsd文件;

2301_76225458的博客 6万+

ai数字人系统部署

这段代码实现了基本的语音交互闭环,用户通过语音输入问题,数字人识别语音后进行自然语言理解并生成回复,再将回复转换为语音输出。但实际应用中的 AI 数字人系统更为复杂,如形象渲染需专业图形引擎(如 Unity、Unreal Engine),自然语言处理也会涉及更复杂的模型微调及多轮对话管理等。一个完整的 AI 数字人系统涵盖形象生成、自然语言处理、动作控制等多个复杂功能,下面为你提供一个 Python 示例,整合多个库来实现数字人基础功能,包括语音交互、简单的自然语言理解以及通过虚拟形象展示对话。

weixin_ggwwsscc的博客 369

基于Windows8与Visual Studio11开发第一个内核驱动程序

Windows 驱动程序的发展演变 我们在学习开发驱动程序时有必要弄清楚Windows设备驱动程序的发展演变过程(为了简便起见,以下简称驱动程序),以便明白我们将要开发什么样的驱动程序。这就象你开发一个应用程序时必须弄清楚它是运行在WINDOWS平台下还是在DOS平台下,否则我们能写出什么样的应用程序就可想而知了。 驱动程序开发者的各项任务之中,有许多是为特定的硬件编写驱动程序。由...

weixin_30553777的博客 400

Windows平台COLMAP实战:从零到三维重建的避坑指南

本文详细介绍了在Windows平台上使用COLMAP进行三维重建的完整流程,包括安装指南、数据准备技巧、图形界面操作及常见问题解决方案。特别针对Windows用户提供了CUDA版本与非CUDA版本的性能对比,帮助用户高效完成从照片到三维模型的重建过程。

weixin_29090677的博客 189

【Fluent】太阳辐射模型—Solar Ray Tracing

一、引言Fluent提供了一个太阳能负载模型,可用于计算进入计算域的太阳光线的辐射效应。该模型可以分为:太阳光线追踪和太阳辐照。其中太阳辐照需要使用DO或MC模型,直接向辐射模型提供外光束方向和强度参数。太阳光线追踪不限制辐射模型,可以独立于辐射方程使用,甚至可以在辐射模型off的情况下使用。本文主要介绍太阳光线追踪模型。该模型非常适用于以下领域汽车气候控制 (ACC) 应用建筑物中的人体热舒适建模应用该模型使用着色算法进行太阳光线追踪。光线会透过半透明的面加载在照射面上。

a5567899的博客 7588

Iczelion 的 Win32Asm VxD 汇编教程 (七) (转)

Iczelion 的 Win32Asm VxD 汇编教程 (七) (转)[@more@]请求执行时间段与shell函数 理论: 请求执行时间段通常被简称为"appy time"。是指当系统VM稳定到充许VxDs...

csd3176的博客 100

一文读懂「Chain of Thought,CoT」思维链

Chain-of-Thought(CoT)是一种改进的Prompt技术,目的在于提升大模型LLMs在复杂推理任务上的表现,对于复杂问题尤其是复杂的数学题大模型很难直接给出正确答案。如算术推理(arithmetic reasoning)、常识推理(commonsense reasoning)、符号推理(symbolic reasoning)。COT通过要求模型在输出最终答案之前,显式输出中间逐步的推理步骤这一方法来增强大模型的算数、常识和推理能力。简单,但有效。2022 年,在 Google 发布的论文。

女王の专属领地 4万+

Iczelion 的 Win32Asm VxD 汇编教程 (五)

VxD例程:消息框在上一节教程里,我们讲了编写一个VxD程序的方法。现在我们要学以致用。在这一节里,我们要编写一个静态VxD,这个静态VxD在一个虚拟机创建或销毁时就会弹出一个消息框。 在这里下载例子。 捕获虚拟机创建和结束事件当一个虚拟机创建时,VMM发送Create_VM控制消息给所有的VxD程序。当一个虚拟机退出时,它也发送VM_Terminate和VM_Terminate2消息给所

kingzeus的专栏 949

手把手教你学Simulink--使用Simulink进行双冗余电机驱动系统的故障切换验证

提高系统可靠性:当一个电机或其驱动器出现故障时,另一个可以立即接管,避免系统停机。增强安全性:对于一些关键任务的应用场景(如飞行控制),确保即使在硬件故障情况下也能维持基本操作能力。简化维护:允许在不影响系统正常工作的情况下进行维护和更换故障部件。确定可能发生的故障类型(如过流、欠压、温度过高),以及每种故障对应的条件。通过上述步骤,我们简要介绍了如何基于Simulink实现双冗余电机驱动系统的故障切换验证。

MHD0815的博客 438

WPF实现棋盘式图片切换效果

实现效果如下: 思路:在自定义控件中放置两个Image控件,点击前后翻页按钮时对图片进行裁剪,随机打乱顺序后添加动作。 步骤: 1、MyImageControl控件 /// <summary> /// MyImageControl.xaml 的交互逻辑 /// </summary> public partial class MyImageControl : UserControl { public static r

dnazhd的博客 1125

Iczelion 的 Win32Asm VxD 汇编教程 (四)

VxD 程序设计入门We 我们在上一节学会了如何编写一个什么事也不做的VxD程序。在这一节里,我们要给它增加处理控制消息的功能。 VxD的初始化和结束VxD程序分为两种:静态的和动态的。每种的加载方法都不同,接受到的初始化和结束的控制消息也不同。 静态VxD:下列情况下,VMM加载一个静态VxD: 一个实模式常驻程序通过调用中断2FH,1605H,来调用此VxD。 此VxD

kingzeus的专栏 949

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Iczelion 的 Win32Asm VxD 汇编教程 (一)

虚拟设备驱动程序初步在本教程里,我假定读者对诸如虚8086模式,调页,GDT,LDT,IDT之类的INTEL 80x86保护模式的操作比较熟悉。如果你不了解这些,那你要先在 http://developer.intel.com/design/pentium/manuals/阅读INTEL的文档。 内容:Windows95是一个运行在最高级特权,第0层级别的多线程操作系统。所有的应用程序

kingzeus的专栏 1072

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Iczelion 的 Win32Asm VxD 汇编教程 (三)

虚拟设备驱动程序结构现在大家对vmm和vxd有了一定的了解,接下来我们来看一看如何编写vxd代码。首先,你必须具备Windows 95/98 Device Driver Development Kit。Window95 ddk只有MSDN 订户才能拿到,但Windows98 ddk却可以免费从Microsoft公司取得。尽管Windows 98 ddk是面向WDM的,但你还是可以用它来开发Vx

kingzeus的专栏 1104

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Iczelion 的 Win32Asm VxD 汇编教程 (八)

客户寄存器结构我们将学习本教程中另外一个重要的结构,叫客户寄存器结构。在本文中,V86指虚拟8086模式。理论VxDs与正常的win32/win16/DOS应用程序有很大不同。大多数情况下,当其他应用程序正常工作时,它们是休眠的。它们象一个监管者一样工作,其作用是监视ring-3应用程序并在其出错时改正它们。下面是其工作时的典型的情况:1、中断发生时2、VMM得到控制权时

kingzeus的专栏 957

Iczelion 的 Win32Asm VxD 汇编教程 (一) (转)

Iczelion 的 Win32Asm VxD 汇编教程 (一) (转)[@more@] ...

csd3176的博客 167

win32汇编(ASM)学习资源

网站 AoGo汇编小站(MASMPlus作者) Win32Asm教程在线版 Win32Asm教程博客园文件备份版 Masm32补充教程系列 Win32 ASM Tutorial Resource Kit:dREAMtHEATER收集的WIN32ASM教程,内容很全,包括32位汇编的基础知识,Iczelion的经典教程中英文版,罗云彬的32位汇编教程,还有PE格式和VxD的一些内容。...

ai74583的博客 343

Iczelion 的 Win32Asm VxD 汇编教程 (六)

DeviceIoControl接口在这一节中我们将要关于学习动态VXD,特别是如何创建,加载和使用。点击这里下载例子VxD接口VxD总共提供了4种接口。l         VxD services                    VxD服务l         V86 Interface                   V86接口l         Protec

kingzeus的专栏 771

Iczelion 的 Win32Asm VxD 汇编教程 (五) (转)

Iczelion 的 Win32Asm VxD 汇编教程 (五) (转)[@more@] ...

csd3176的博客 135

Iczelion 的 Win32Asm VxD 汇编教程 (九)

虚拟8086模式的内存管理下边我们用到的V86即指虚拟8086模式。 在以前的教程中,你学习了怎样模拟V86中断,但还有一个问题没有解决:在VxD和V86代码之间交换数据。我们将在此学习如何使用V86内存管理器来实现这个功能。理论假如你的VxD和一些V86程序一起运行,如何传送大量数据到V86程序中或从V86程序中传送大量数据迟早是一个大问题。通过寄存器传送大量数据是不现实的。

kingzeus的专栏 943
上一篇: Iczelion 的 Win32Asm VxD 汇编教程 (五)
下一篇: Iczelion 的 Win32Asm VxD 汇编教程 (六)
kingzeus
博客等级 码龄26年 12粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值