【WIN32 宏汇编】罗云彬的13章代码关于宏汇编的部分

zhourenyun 2009-02-18 02:07:25
reverseArgs macro arglist:VARARG
local txt,count

txt TEXTEQU <>
count = 0
for i,<arglist>
count = count + 1
txt TEXTEQU @CatStr(i,<!,>,<%txt>)
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1
endif
exitm txt
endm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 建立一个类似于 invoke 的 Macro
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_invoke macro _Proc,args:VARARG
local count

count = 0
% for i,< reverseArgs( args ) >
count = count + 1
push i
endm
call dword ptr _Proc

endm
======================================================
1 这个的大概解释 ,搜索以前的帖子我还是有点迷糊,能高人详细指点下。
2 资料从那里收集。(masm的help除外)

3 问下题外话 反汇编的市场到底有多大?
我说的是市场需求 ?需要的公司多吗?
我知道的有1 安全相关 (木马病毒)2 破解相关 3 加密解密(壳相关) 4 外挂(安全范畴?)

4 谁有罗云彬的windwo32汇编的电子书的完整版,我下的都是缺页的。给个链接也好。谢谢,分不够可以补。

...全文
480 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
audryhepburn 2010-09-24
  • 打赏
  • 举报
回复
mark!!!之前一直不知所以,现在总算明白了!
licoon 2009-10-17
  • 打赏
  • 举报
回复
还是不懂,我查了不少资料
讲汇编中宏使用的教程非常少
zhourenyun 2009-02-18
  • 打赏
  • 举报
回复
谢谢各位的回复和热心,我看看去。
xtdumpling 2009-02-18
  • 打赏
  • 举报
回复
MASM programmers guide 611
http://download.csdn.net/source/356130
killbug2004 2009-02-18
  • 打赏
  • 举报
回复
这里是汇编宏特有的语法规则,不同于别的语言,在ms的开发包中应该有help文件,别的地方估计资料很少,懂得人更少
大熊猫侯佩 2009-02-18
  • 打赏
  • 举报
回复
至于你说GT的含义:

[code=BatchFile]
Relational Operators

Syntax: expression1 EQ expression2

expression1 NE expression2

expression1 GT expression2

expression1 LT expression2

expression1 GE expression2

expression1 LE expression2

Description:

The EQ, NE, GT, LT, GE, and LE relational operators determine if
two constant expressions or data labels (in the same segment)
are equal, not equal, greater than, less than, greater than or

equal, or less than or equal to each other. The comparison returns
true (-1) or false (0).

These operators work only with assembler symbols and constants;
they cannot be used to evaluate registers or memory locations.
Use comparison run-time operators with the .IF, .ELSEIF, .WHILE,
and .UNTIL directives.

[/code]
大熊猫侯佩 2009-02-18
  • 打赏
  • 举报
回复
语法规则是怎么回事?从那里可以找到相关的资料?
看masm32 自带的masm32帮助文件(\masm32\help\masm32.hlp)

_invoke 宏比较简单,我只说前一个宏reverseArgs的意思:
TEXTEQU,=符号的含义看我以前解释的帖子:
http://topic.csdn.net/t/20041018/22/3468159.html

reverseArgs macro arglist:VARARG
local txt,count

txt TEXTEQU <>
count = 0
for i,<arglist>
count = count + 1
txt TEXTEQU @CatStr(i,<!,>,<%txt>)
;如果arglist是1,2,3则上一句每一步扩展为:
;1, ; 2,1, ; 3,2,1,
;<!,>中可以省略!号即可以直接写为<,>
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1
;因为3,2,1,最后多了一个,号,所以这里将最后一个,删掉。
endif
exitm txt ;返回字面值 3,2,1
endm

你可以这样使用reverseArgs宏:

invoke SortLowToHig,reverseArgs(1,2,3,4,5)
zhourenyun 2009-02-18
  • 打赏
  • 举报
回复
reverseArgs macro arglist:VARARG
local txt,count

txt TEXTEQU <> 定义一个预处理文本变量 <-----------------------------------语法规则是怎么回事?从那里可以找到相关的资料?
count = 0 这个用来保存参数个数
for i, <arglist> 循环遍历arglist,将每个参数的名字赋给i // % for i, < reverseArgs( args ) > 两个for的区别 一个有% 一个没有%
count = count + 1 统计参数个数
txt TEXTEQU @CatStr(i, <!,>, <%txt>) 将每个参数倒过来练成一个文本字符串,最后的结果应该如同:参数2,参数1
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1 返回上面得到的参数文本字符串
endif
exitm txt
endm

PS:我这样的解释可能不太明白,在这里一个字符串和数值变量可以互相转换,比如txt是一个字符变量,但加上 <txt>后可以便是取它的值 %号也是取值的意思 !是转义的意思,像txt TEXTEQU @CatStr(i, <!,>, <%txt>) 这句话,你就可以理解为txt = @CatStr(i, txt) 不过这样写会出错而已。
code]
// txt TEXTEQU @CatStr(i, <!,>, <%txt>)
if count GT 0
GT是什么 关键字?或者其他?
86的宏汇编 还有资料 32的宏汇编的资料可以怎么找呢?

zhourenyun 2009-02-18
  • 打赏
  • 举报
回复
首先,谢谢你的回复。上面的帖子我看过了。
_invoke macro _Proc,args:VARARG
local count

count = 0
% for i, < reverseArgs( args ) > 循环遍历reverseArgs( args )的返回值,将每个返回值循环赋给i //
count = count + 1
push i 将参数压栈
endm
call dword ptr _Proc 调用函数

endm
=========================================
% for i, < reverseArgs( args ) >
1 %做什么用的,reverseArgs( args )从那里出现的?
call dword ptr _Proc自己调用自己 不是死循环了吗?(我知道不是,不过从C的角度来讲自己调用自己又没有判断结束的标志就会是死循环)



killbug2004 2009-02-18
  • 打赏
  • 举报
回复
这贴很清楚,具体还有哪里不懂,懂比较复杂宏的很少
http://topic.csdn.net/t/20040803/15/3238382.html

[code=Assembly]写一下主要语句的意思

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 建立一个类似于 invoke 的 Macro
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_invoke macro _Proc,args:VARARG
local count

count = 0
% for i,< reverseArgs( args ) > 循环遍历reverseArgs( args )的返回值,将每个返回值循环赋给i
count = count + 1
push i 将参数压栈
endm
call dword ptr _Proc 调用函数

endm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 将参数列表的顺序翻转
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
reverseArgs macro arglist:VARARG
local txt,count

txt TEXTEQU <> 定义一个预处理文本变量
count = 0 这个用来保存参数个数
for i,<arglist> 循环遍历arglist,将每个参数的名字赋给i
count = count + 1 统计参数个数
txt TEXTEQU @CatStr(i,<!,>,<%txt>) 将每个参数倒过来练成一个文本字符串,最后的结果应该如同:参数2,参数1
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1 返回上面得到的参数文本字符串
endif
exitm txt
endm

PS:我这样的解释可能不太明白,在这里一个字符串和数值变量可以互相转换,比如txt是一个字符变量,但加上<txt>后可以便是取它的值 %号也是取值的意思 !是转义的意思,像txt TEXTEQU @CatStr(i,<!,>,<%txt>) 这句话,你就可以理解为txt = @CatStr(i, txt) 不过这样写会出错而已。
code]

这些是不是你要的
http://search.download.csdn.net/search/%E7%BD%97%E4%BA%91%E5%BD%AC

21,460

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧