导航:首页 > 文档加密 > win32汇编pdf

win32汇编pdf

发布时间:2022-08-23 11:58:06

㈠ Win32的汇编语言手册了从哪里可以找到了

"hello,world!"win32汇编小程序szText db "Hello, world!",0

szCaption db "Win32Asm",0

.code
start:
push MB_OK
lea eax,szCaption
push eax
lea eax,szText
push eax
push NULL
call messageboxa
xor eax,eax
push eax
call exitprocess
end start
--------------------------------------------------

编译链接:

分下面两步进行:

ml /c /coff 3.asm

link /subsystem:windows /libpath:d:masm7lib 3.obj

第一步编译生成3.obj文件

/c 表示只编译,不链接

/coff 表示生成COFF格式的目标文件

第二步链接生成3.exe文件

/subsystem:windows 表示生成windows文件

/libpath:d:masm7lib 表示引入库的路径为:d:masm7lib。

在安装Masm32后,引入库位于Masm32Lib目录下。

也可设置环境变量Lib的值:在dos提示符下键入Set Lib=d:masm7lib,这样“链接”就可简单写成:

link /subsystem:windows 3.obj,试想一下,在程序调试过程中,修改源程序是常用的事啦,每次编译链接都要带/libpath:...那该有多烦人呢。当然,我们也可在源程序中直接给出引入库的位置,这样,链接时就方便啦,如下:

includelib d:masm7libkernel32.lib

includelib d:masm7libuser32.lib

--------------------------------------------------

执行:在dos提示符下键入3,回车,出现一个消息框,哈哈,真正的Win32程序!
--------------------------------------------------

深入分析:

看一下源程序,有这么两行:call messageboxacall exitprocess。大家一看都知道,这是子程序调用,但是我们并没写这样的子程序,事实上,这些是API函数。作为函数,我们在调用时可能需要传送给函数一些参数,程序怎么知道传送的参数有哪些,类型是什么呢?就是通过函数原型定义,如下所示:

ExitProcess PROTO :DWORD

MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD

可以看出,ExitProcess有一个参数,MessageBoxA有四个参数,这些参数都是DWORD类型。

在Win32中,参数的传递都是通过堆栈来完成的。象MessageBoxA这个函数有四个参数,究竟是左边的先压入堆栈还是右边的先入栈呢?.model flat,stdcall给出了答案。stdcall 指定参数是从右到左压入堆栈的,且调整堆栈是在子程序返回时完成的。在源程序中不需要用“add sp,值”来保持堆栈平衡。对MessageBox,在API手册中是这样定义的:

int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
)
;所以会有我们的程序段: 看看上面的程序,不难想到,假如在写程序时,少往堆栈里压入一个数据,那将是一个致命的错误。能不能将这种检查参数个数是否匹配的工作交给计算机来完成呢?这是可以的,INVOKE指令可以帮助我们完成这样的工作。假如你的参数个数不正确,连接器将给出错误提示。所以,极力建议你使用invoke代替call来调用子程序,当然,这不是绝对的。使用invoke上面的指令就可简写成下面的样子,看起来简炼多啦,查错也方便啦!

invoke messageboxa, NULL,addr szText,addr szCaption,MB_OK

另外,像NULL,MB_OK都是一些常量,这样的常量有很多,还有很多的结构,如果在我们的程序中一开始都写这么多的东西,可能一下子就把你吓怕啦,也容易出错,更不便于看程序的主要部分。hutch整理的windows.inc包含了WIN32编程所需要的常量和结构体的定义,我们可简单的用一个include指令将这些常量和结构的定义插入到我们的文件中:

include d:masm32includewindows.inc

但是windows.inc中并不包含函数原型的声明,还要从其他的头文件中得到函数原型的声明,比如:messageboxa的原型声明在user32.inc文件中,exitprocess在kernel32.inc文件中。这些头文件都放在 masm32include文件夹下。

还有,要用windows.inc,必须使用option casemap:none,它的意思是告诉 MASM 要区分符号的大小写,譬如:start和START是不一样的。否则,一个小小的程序,可能会出成百上千的错误呀!

其他的,就不再细说啦,到此,上面的程序可重新修改如下:

-----------------------------------------------------------------

;最终的结果;32位程序,要用flat啦!;stadcall,标准调用;数据区,定义2个字符串szText db "Hello, world!",0

szCaption db "Win32Asm",0

.code;代码开始执行处 /I d:masm7include 表示*.inc文件的位置,也可设置环境变量Set include=d:masm7include来简化操作,也可在程序中明确指出*.inc的位置。

前面讲的都是用两条指令来完成编译链接,实际上用一条指令也可完成,如下:

ml /coff /I d:masm7include 3.asm /link /subsystem:windows /libpath:lib

若*.inc及引入库在源程序中都明确指出其位置,则可简化为:

ml /coff 3.asm /link /subsystem:windows

未完。
请去 这里查
http://tech.ddvip.com/program/masm/index.html

㈡ win32汇编问题

:00401007 0BDB or ebx,ebx ; ebx或操作自身
; .break .if ebx
:00401009 750C jne 00401017 ;或以后的判断,这里是JNE,所以是判断EBX
;是否为0。非0则跳转到00401017(esi+=2)
;如果是0则不跳转,执行下一条指令
…………
…………
:00401017 BE01000000 mov esi,00000002 ;EBX非0则跳转到这里

这里or ebx,ebx需要设置什么标志位,主要是看后面的跳转是什么。JNE是非0跳转,所以OR操作是判断EBX是否为0,为0则设置标志位ZF=1,非0则设置标志位ZF=0

㈢ 谁可以把win32下汇编第二版的清晰版pdf发给我谢谢

这类书 还是 拿到手里看比较好

可以到处看

不然你只能在电脑前看

很苦闷的

我就是买了书看

去可以打折的书店

才卖50 不贵把

这么经典的书才50

㈣ Win32汇编高手请进

MOV DWORD PTR DS:[_osver],EAX ;保存eax中的内容
MOV EAX,DWORD PTR DS:[_osver]
AND EAX,0FF ;将eax的高16位清零,低16位不变
MOV DWORD PTR DS:[_winminor],EAX ;把eax中内容放到DS:[_winminor]指向的内存
AND ECX,0FF ;将ecx的高16位清零,低16位不变
MOV DWORD PTR DS:[_winmajor],ECX ; 把ecx中内容放到DS:[_winmajor]指向的内存
MOV EDX,DWORD PTR DS:[_winmajor] ;把DS:[_winmajor]内容放到edx(0-7位有效)
SHL EDX,8 ;将edx左移8位(变为8-15有效)
ADD EDX,DWORD PTR DS:[_winminor] ;把DS:[_winminor]内容放到edx(0-7位改变)
MOV DWORD PTR DS:[_winver],EDX ;edx存入DS:[_winver]指向的内存
MOV EAX,DWORD PTR DS:[_osver] ;取DS:[_osver](即原eax内容)到eax
SHR EAX,10 ;eax右移10位
AND EAX,0FFFF ;将eax的高16位清零,低16位不变
MOV DWORD PTR DS:[_osver],EAX ;把eax的内容存入DS:[_osver]指向的内存

代码不全,看不出具体的作用。
但总体来看,一是将eax的低8位放到edx的8-15位,ecx的低8位放到edx的0-7位。二是将原eax的11-26位放到DS:[_osver]指向的内存单元(从低位放起)

㈤ 大家做WIN32汇编是怎么编辑资源啊

VC当然可以,生成的.RES文件就是已经编译好的,不需要再调用MASM32的RC,但是,需要使用cvtres将已经编译的资源文件转换成obj文件,以便与目标EXE进行链接。格式如下:cvtres /machine:ix86 filename.res 只有.RC文件才是没有经过编译的文本文件,必须先执行rc.exe 生成.RES文件,再用cvtres转成obj文件。 工具软件还有很多,Borland Resource Compiler(brcc32.exe),Resource Workshop,Resource Builder都可以用。一般都可以生成.RES文件,或者可以保存成未编译的资源脚本*.RC文件。 说VC当然不行的那个,简直就是误人子弟!

㈥ win32汇编中的子窗口控件ID定义问题。

没有系统预定义的Id,都是程序中定义并使用的。
Res格式中记录了定义好的Id,
程序调用Windows的API来加载/处理资源(用Hinstance来指定 hDlg)中指定Id的资源(控件)
因为必须明确指定从哪个model中加载,而在一个Model中是不允许有同名的同种类资源的,所以Windows不会找不到正确的资源。

㈦ Win32汇编语言程序设计的电子书教程在哪儿下载啊

网络搜 Windows环境下32位汇编程序设计 罗云斌

㈧ Win32 汇编,如何向指定文件写入内容

要写入的文件内容放到1.txt中,向2.txt中写入1.txt的内容,代码:
DATA SEGMENT
FILE1 DB '1.TXT',0
FILE2 DB '2.TXT',0
INBUF DB 256 DUP(?)
HANDLE1 DW ?
HANDLE2 DW ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AH,3DH
MOV AL,0
LEA DX,FILE1
INT 21H
MOV HANDLE1,AX
mov ah,3ch
mov cx,00
lea dx,FILE2
int 21h
mov HANDLE2,ax

black: MOV AH,3FH
MOV BX,HANDLE1
MOV CX,1
LEA DX,INBUF
INT 21H
cmp ax,0
je out1
mov ah,40h
mov bx,HANDLE2
mov cx,1
lea dx,INBUF
int 21h
jmp black
out1: MOV AH,4CH
INT 21H
CODE ENDS
END START

阅读全文

与win32汇编pdf相关的资料

热点内容
单片机左移右移后是补1还是0 浏览:595
湛江一号命令 浏览:333
导出命令行 浏览:274
C和php交互 浏览:600
苹果手机里的通讯录如何导入安卓手机 浏览:170
怎么在京东app里面看自己会员等级 浏览:43
emerson服务器怎么短接启动 浏览:559
工控编程人员工资 浏览:397
速成意大利语pdf 浏览:250
连续加减乘除法的算法 浏览:652
用mfc编程实现dda算法 浏览:41
linux命令打开应用 浏览:146
改造后的程序员 浏览:270
数控编程变量 浏览:785
江门哪里有plc编程系统 浏览:378
安卓手机如何下载外服b站 浏览:700
pythonetree库 浏览:759
数据插值算法 浏览:723
澳大利亚加密货币逃税 浏览:484
pdf文档如何压缩 浏览:329