原创 利用VC向存储器写数据

2006-11-17 08:09 3626 9 16 分类: MCU/ 嵌入式

      一.Win16

#define MemBase 0L
#define MemLen  65536L//你要操作的内存长度,这里是PC机的低端64K内存
UINT selDS;
/****************************************************************************
    FUNCTION: TestLinearMem16()

****************************************************************************/
void TestLinearMem16(void){
 LPSTR pData;

    selDS = HIWORD ((DWORD) (WORD FAR *) &selDS);
    selDS="AllocSelector"(selDS);
    SetSelectorBase(selDS,MemBase);
    SetSelectorLimit(selDS,MemLen);
    pData="MK"_FP(selDS,0);
    //现在用pData来读写你的内存
    FreeSelector(selDS);
}
//***************************************************************************

二.Win32
1.自己写一个Vxd
2.采用下面的方法:


   Windows 95/98应用程序无法直接读写物理内存,如果使用VxD编程,可以
调用VMM功能_MapPhysToLinear将物理地址映射到线性地址再进行修改,但是这
样就必须单独写一个VxD,比较麻烦,那么能不能在应用程序中直接调用VMM功
能呢?一般不能,因为VMM功能要在Ring 0上调用,而一般的应用程序工作在
Ring 3上,采用Intel处理器的中断从Ring 3转到Ring 0的技术来调用VMM功能,下面的程序演示了如何修改物理内存——以在Windows 95加密程序 中修改加密扇区大小(物理地址0000:0525H)为例:

;****************************************************************************
;*     Windows 95加密软件核心模块之一--磁盘扇区大小修改程序               *
;*                                                                          *
;*     本程序在Windows 95下修改内存物理地址0000:0525 处的磁盘扇区大小字节, *
;* 为了能够修改物理地址,本程序使用了VMM 功能_MapPhysToLinear将物理地址映射 *
;* 到线性地址进行修改。为了在应用程序中调用VMM 功能,本程序使用了CIH 病毒的 *
;* 原理,使用中断将系统由Ring 3转到Ring 0,然后调用VMM 功能。               *
;*     本程序中的过程ChangeSectorSize在VC中的原型可以写成:                 *
;*                                                                          *
;*     void _stdcall ChangeSectorSize(BYTE SectorSize);                     *
;****************************************************************************

.386p

.model flat,stdcall

;修改的中断号,如果本中断号改成3则可以防止Soft-ICE跟踪!

HookExceptionNo EQU 05h

.data
        IDTR_1 db 6 dup(0) ;保存中断描述符表寄存器
        OldExceptionHook dd 0 ;保存原先的中断入口地址

.code

;修改扇区大小过程

ChangeSectorSize PROC SectorSize:BYTE
        push eax
        ;获取修改的中断的中断描述符(中断门)地址
        sidt IDTR_1
        mov eax,dword ptr IDTR_1+02h
        add eax,HookExceptionNo*08h+04h
        cli
        ;保存原先的中断入口地址
        push ecx
        mov ecx,dword ptr [eax]
        mov cx,word ptr [eax-04h]
        mov dword ptr OldExceptionHook,ecx
        pop ecx
        ;设置修改的中断入口地址为新的中断处理程序入口地址
        push ebx
        lea ebx,NewExceptionHook
        mov word ptr [eax-04h],bx
        shr ebx,10h
        mov word ptr [eax+02h],bx
        pop ebx
        ;执行中断,转到Ring 0(与CIH 病毒原理相似!)
        push ebx
        mov bl,byte ptr SectorSize ;扇区大小保存在bl寄存器中
        int HookExceptionNo
        pop ebx
        ;恢复原先的中断入口地址
        push ecx
        mov ecx,dword ptr OldExceptionHook
        mov word ptr [eax-04h],cx
        shr ecx,10h
        mov word ptr [eax+02h],cx
        pop ecx
        ;修改扇区大小过程结束
        sti
        pop eax
        ret
ChangeSectorSize ENDP

;新的中断处理程序

NewExceptionHook PROC
        push eax
        push ebx
        push ecx
        push edx
        push esi
        ;修改扇区大小
        push dword ptr 00000000h ;必须为0
        push dword ptr 00000001h ;字节数
        push dword ptr 00000525h ;物理地址0000:0525
        int 20h
        dd 0001006ch ;以上两条指令相当于 VMMCall _MapPhysToLinear
        pop esi
        pop esi
        pop esi
        mov byte ptr [eax],bl ;修改扇区大小
        ;中断处理程序结束
        pop esi
        pop edx
        pop ecx
        pop ebx
        pop eax
        iretd
NewExceptionHook ENDP

end

    本过程可以被C语言调用,编译方法:ml /c /coff w95enc.asm。请用MASM 6.11
以上版本编译,不需要DDK。将编译生成的OBJ文件插入VC的工程中,并在VC程序中写
上函数原型说明,就可以调用了。

文章评论10条评论)

登录后参与讨论

用户377235 2013-10-24 22:53

请发一份,谢谢了!ni_miii@sina.com

用户377235 2013-10-24 22:50

请发一份,谢谢了!ni_miii@sina.com

用户377235 2013-8-26 12:00

楼主您好,我刚接触lpc2468.能否发一份原理图给我。谢谢您了。我的邮箱jlqirui@126.com

用户114496 2012-2-14 17:38

fenchaigohao

用户1651317 2011-12-1 16:55

请问能否将这个NXP LPC2470/LPC2478 开发板 原理图给我发一份 谢谢!wangling.18@163.com

用户509423 2011-3-29 14:30

请问怎么卖的啊?能否发一份原理图给我啊? xuxiaozhao163@163.com 谢谢学习学习

用户146556 2010-4-25 19:18

KAO,标题党

用户299096 2010-4-23 13:43

3Q

用户299096 2010-4-23 13:42

楼主能不能也给我一份啊 sskk327@163.com

用户138419 2010-3-13 15:54

能发给我一份吗 正在学习LPC2478? wjjxx22@163.com 王
相关推荐阅读
用户1318081 2012-11-22 08:47
Altera Quartus II软件12.1版借助强大的高级设计流程,加速系统开发
Altera公司 (Nasdaq: ALTR) 今天宣布,推出Quartus® II 软件12.1 版——在CPLD、FPGA、SoC FPGA和HardCopy® ASIC设计方面,性能和效能在...
用户1318081 2012-11-17 23:26
介绍28nm创新技术,超越摩尔定律
在工艺方法基础上,Altera利用FPGA创新技术超越了摩尔定律,满足更大的带宽要 求,以及成本和功耗预算。Altera Stratix® V FPGA通过28-Gbps高功效收发器突破 了带...
用户1318081 2012-11-17 23:22
Altera与Northwest Logic联合开发RLDRAM 3存储器接口解决方案
Altera公司 (NASDAQ: ALTR)与FPGA高性能知识产权(IP)内核领先供应商Northwest Logic今天宣布,开始提供硬件成熟的1,600 Mbps低延时DRAM (RLDR...
用户1318081 2012-11-17 23:21
Altera电机控制开发工作台前所未有的提高系统集成度、可扩展的性能和灵活性
Altera公司(NASDAQ: ALTR)今天宣布,新的电机控制开发工作台前所未有的提高了电机控制系统设计的系统集成度和灵活性,而且性能还可以扩展,同时大幅度缩短开发时间,降低风险。工作台包括一...
用户1318081 2012-11-07 11:05
Altera OpenCL统一的异构编程
观看OpenCL怎样为异构计算提供统一的平台。在这一演示中,我们将为GPU编写的NVIDIA代码重新定位到Stratix V FPGA上。  ...
用户1318081 2012-11-07 10:58
Altera宣布业界首款支持FPGA的OpenCL工具——进一步加速了FPGA在异构系统中的应用
Altera公司 (NASDAQ: ALTR)今天宣布,提供FPGA业界的第一款用于OpenCL™ 的软件开发套件(SDK) (开放计算语言) 的软件开发套件,它结合了FPGA强大的并行体系结构以...
我要评论
10
9
关闭 站长推荐上一条 /2 下一条