Masm32 学习笔记 - 1. LastError$()
2017-04-08 18:23
197 查看
偶然机会接触到了 Masm32 语言(win32 下的 M-“宏” asm-“汇编语言”),并拜读了罗云彬那本书,收获颇大。
以前在学c语言的时候,看反汇编或者看汇编类的书籍,都会觉得很难啃,无法领会这两者之间的奥秘。在看了Masm32后,好像在汇编(16位 or dos时代)和c语言(或VC++)之中找到了两者之间的桥梁,但是这桥甚长,仍然无法看到对面的桥头。
第一篇,写点自己摸索时候的感触吧。
Masm 利用Macros和一些经过封装的“指令操作符”(不知道这称呼是否准确)来是整个程序代码的结构达到类似C语言的结构,这应该就是懂C语言和稍微有点asm基础的人能大致
看懂masm的原因吧。然而,在一些细节方面仍然需要对计算机的组成和asm有一定的了解。
例如:
最近在写一个小程序的时候想用 CRC32 来验证2个文件是否一样:
call
CRC32 ...
mov
dwCRC,eax
call
CRC32...
mov
dwCRC1,eax
.if
dwCRC != dwCRC1
...
.endif
熟悉汇编的人应该马上可以看出 .if 后面的比较条件是有问题的。
回归正题
LastError$() 这个Macro对于熟悉win32的人来说很容易就惨到是干什么的。
他结合了 GetLastError() 与 FormatMessage(), 并返回错误信息字符串的地址。
eg:
.data
szCap db
'Error',0
.if
eax == 0
invoke
MessageBox, NULL, GetLastError$(),offset szCap,MB_OK or MB_ICONERROR
;这里的invoke 就是对于 call 的封装,省了手动push参数的一步
;用上fn这个宏的话,这一句就可以简化成:
fn MessageBox,NULL,GetLastError$(),"Error",MB_OK or MB_ICONERROR
.endif
这样就可以很方便的在写程序的时候进行debug了。
关于Macro的用法和介绍在Masm32 sdk中有专门分类的文档进行列举。 把这些文档都吃透的时候Masm写win32程序便能便捷了。
那么问题来了,能比在vs下用win32, mfc, c#更简单? 这个答案不说大家心里也明白。
这个对我来说是一种知其所以然的学习,哈哈,至于相比之下masm32的优点,自行来体会吧!
--- Great Masm32
以前在学c语言的时候,看反汇编或者看汇编类的书籍,都会觉得很难啃,无法领会这两者之间的奥秘。在看了Masm32后,好像在汇编(16位 or dos时代)和c语言(或VC++)之中找到了两者之间的桥梁,但是这桥甚长,仍然无法看到对面的桥头。
第一篇,写点自己摸索时候的感触吧。
Masm 利用Macros和一些经过封装的“指令操作符”(不知道这称呼是否准确)来是整个程序代码的结构达到类似C语言的结构,这应该就是懂C语言和稍微有点asm基础的人能大致
看懂masm的原因吧。然而,在一些细节方面仍然需要对计算机的组成和asm有一定的了解。
例如:
最近在写一个小程序的时候想用 CRC32 来验证2个文件是否一样:
call
CRC32 ...
mov
dwCRC,eax
call
CRC32...
mov
dwCRC1,eax
.if
dwCRC != dwCRC1
...
.endif
熟悉汇编的人应该马上可以看出 .if 后面的比较条件是有问题的。
回归正题
LastError$() 这个Macro对于熟悉win32的人来说很容易就惨到是干什么的。
他结合了 GetLastError() 与 FormatMessage(), 并返回错误信息字符串的地址。
eg:
.data
szCap db
'Error',0
.if
eax == 0
invoke
MessageBox, NULL, GetLastError$(),offset szCap,MB_OK or MB_ICONERROR
;这里的invoke 就是对于 call 的封装,省了手动push参数的一步
;用上fn这个宏的话,这一句就可以简化成:
fn MessageBox,NULL,GetLastError$(),"Error",MB_OK or MB_ICONERROR
.endif
这样就可以很方便的在写程序的时候进行debug了。
关于Macro的用法和介绍在Masm32 sdk中有专门分类的文档进行列举。 把这些文档都吃透的时候Masm写win32程序便能便捷了。
那么问题来了,能比在vs下用win32, mfc, c#更简单? 这个答案不说大家心里也明白。
这个对我来说是一种知其所以然的学习,哈哈,至于相比之下masm32的优点,自行来体会吧!
--- Great Masm32
相关文章推荐
- JavaScript学习笔记(八) 基本类型包装器和Error对象
- C++学习之:根据GetLastError()返回值获取错误信息
- Lua 学习笔记(八)错误(error)
- c++学习之:根据GetLastError()返回值获取错误信息
- Angular学习笔记--last_update 20151106
- Android(java)学习笔记152:Android运行时异常“Binary XML file line # : Error inflating class”
- jsp:由rs.last()方法不可用,学习ResultSet游标笔记
- R语言学习笔记-Error in ts(x):对象不是矩阵问题解决
- php学习笔记--error
- Sharepoint学习笔记--Farm Backup Error:Administration 2010 Service is not started
- 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
- python学习笔记-zipimport.ZipImportError: can't decompress data; zlib not available
- ios学习笔记: IOS8解决获取位置坐标信息出错(Error Domain=kCLErrorDomain Code=0)
- c++学习之:根据GetLastError()返回值获取错误信息
- 学习win32 API开发4-GetLastError和FormatMessage获取错误信息
- 学习笔记:java.lang.ExceptionInInitializerError
- ERROR: Symbol file could not be found 寒江孤钓<<windows 内核安全编程>> 学习笔记
- 【Python学习笔记】macosx 10.11 python pip install 出现错误OSError: [Errno 1] Operation not permitted:
- 学习笔记之Myeclipse中 报错 Syntax error on token "Invalid Regular Expression Options", no accurate correc
- python3学习笔记1--TypeError: 'dict' object is not callable的解决