【win32汇编】0x01 开篇一些乱七八糟的话

之前弄完了16位汇编,现在正式学习win32汇编,首先就是一些原理了,其实就是在16位的基础上增加了一些内容,其程序主要的结构记录如下

(1)指令集
    .386     这是指定指令集 必须工作在80386的处理器上
    mov cr0,eax    这类指令在特权级0上运行,编译到这个就报错
    如果要写VxD等驱动程序,中间要用到特权指令。必须定义.386p
    但是在正常情况只要.386就可以了,这个是运行在特权级3上面的
    Pentium MMX中增加了mmx指令
        需要 .386
            .mmx
        
(2)model
    .model 内存模式 [.语言模式] [其他模式]
    自动为各种段寄存器定义了地址 assume那些
    
(3)option 语句
    option casemap:none 是表示对变量名和子程序大小写敏感
    接下来就是一些include预计
    <include xxx>
    #下面就是一些段了
    .stack [栈的大小]
    .data
    <初始化过的变量定义>
    .data?
    <未初始化的变量定义>
    .const
    <一些常量定义>
    .code
        <代码>
    end 开始标号
    实际上,这些段是内存的分段,而不是8086汇编的那些段

时间: 2024-11-08 23:18:00

【win32汇编】0x01 开篇一些乱七八糟的话的相关文章

二鸟学Win32 汇编——PE头文件

;代码段    .code;---------------------; 将内存偏移量RVA转换为文件偏移; lp_FileHead为文件头的起始地址; _dwRVA为给定的RVA地址;---------------------_RVAToOffset proc _lpFileHead, _dwRVA local @ret pushad mov esi, _lpFileHead assume esi:ptr IMAGE_DOS_HEADER add esi, [esi].e_lfanew ass

win32汇编实现阶乘和斐波那契数列

win32阶乘程序 .486 ;使用486处理器.model flat,stdcall include \masm32\include\msvcrt.inc includelib \masm32\lib\msvcrt.lib .data result0 dd 1;存储最终结果 inputdata dd ?;输入的阶乘的最大值 type0 db '%d',0 data4 db '请输入阶乘最大值ddddd: ',0 data1 db '请输入阶乘最大值: ',0 data2 db '阶乘结果为:

Win32汇编开始 Hello Asm

今天开始学习Win32汇编 因为自己很多都是Windows方面 所以 接触一下Win32汇编 .386 ;.386指令集 .model flat,stdcall ;工作模式 option casemap:none ;关键字大小写不敏感 include Windows.inc include kernel32.inc includelib kernel32.lib include user32.inc includelib user32.lib .data MessageBoxText db "H

【Win32汇编】编译环境配置

开始学习[Win32汇编],编译过程较为繁琐,做个记录. 使用 MASM32 提供的 ml.exe 和 link.exe,以及 VS2013 中的 nmake.exe 和资源编辑器. ml.exe: ml  [选项]  文件列表  [/link] link.exe: link  [选项]  文件列表 nmake.exe: nmake  [选项]  [描述文件名]  [宏定义]  [目标文件] /f 描述文件名:指定其他的描述文件名,而不是默认的 makefile 宏定义:指定新的定义,覆盖描述文

谈Win32汇编

最近接触到Win32汇编,才知道汇编必须是和平台相关的,如做应用则和操作系统和CPU类型相关,而做操作系统就和只和的CPU类型有关.对于<微机原理>里面的汇编,那是DOS汇编,而Win32汇编是基于Windows的汇编.DOS和Windows是两个完全不同的操作系统了. DOS汇编功能的实现依靠的是DOS系统提供的软中断,DOS程序是面向过程的单任务的:而Win32汇编功能的实现依靠的是WinAPI,基本的元素是与具体CPU类型有关的汇编指令(一般都是X86啦,因为微软就支持这个~~).然后记

win32汇编实现一个简单的TCP服务端程序(WinSock的简单认知应用)

Windows网络编程,相信好多人都知道,但是我们一般都是用其他语言编写,例如C,C++,JAVA,python等等,这些语言都可以,但是汇编语言比较底层,利用它,我们可以更清晰的了解到网络编程的内在部分,这是其他语言不能相比的,好了,废话不多说,这其实就是这次的目的(毕竟水平欠缺,还是先来按照罗云斌老师的WIN32汇编书上的例子加以学习,举一反三吧). 说道网络编程,现在我所接触到的程序开发,工具软件的使用,库等等都是基于Windows平台的,想要了解Windows的网络编程就必须要知道Win

Win32汇编基础1

1.关于寄存器Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器,而且并不去检测这些寄存器的值是否被更改,所以如果要使用这些寄存器时必须先保存它们的值,待用完后再恢复它们 eax 是WIN32 API 默认的返回值存放处.ecx 是LOOP指令自动减一的寄存器,也就是一半用来计数,比如使用rep指令时,也是比较CX的值.esp 是堆栈指针,指向栈顶.ebp 经常用来在堆栈中寻址.esi 好像常常用在指针寻址中. edi 是目的地址寄存器. 2.关于堆栈 Windows为每个程

【win32汇编】0x04 第一个窗口程序

第一个win32汇编窗口程序,主要来自 win32汇编语言程序设计,然后加上了自己查阅msdn文档的一些理解,基本过程: start入口地址 --> _WinMain主函数 --> 定义一些需要用的消息实体和类实体 --> 注册窗口类 --> 建立并显示窗口 --> 消息循环 ( _ProcMain主要用于处理程序接受的消息 ) 1 ;模式定义 2 ;>>>>>>>>>>>>>>>>

WIN32汇编 Richedit控件的使用

这次来介绍一下一个独特的控件------Richedit    说实话这次也是第一次接触到这个控件,以前虽然听说过但是不知道具体它是干什么的,从字面上看好像是edit控件的扩展一样,其实这样只说对了一半,Richedit控件确实比edit控件功能强大丰富,但是它们的使用位置不同,edit控件以前在学习控件的时候,就出现了许多edit控件,那时候用edit控件主要是实现向一个小的文本框中输入文本而且基本都是用在对话框中,而且大小也有限制,在单行模式下能容纳的文本不能超过32KB,在多行模式下也不能