首页
社区
课程
招聘
[旧帖] [求助][已解决]关于罗云斌的《Win32汇编》的进程注入的一个问题 0.00雪花
发表于: 2009-2-18 09:52 5664

[旧帖] [求助][已解决]关于罗云斌的《Win32汇编》的进程注入的一个问题 0.00雪花

2009-2-18 09:52
5664
书上代码注入的例子由于需要重定位,用了定义的宏如下(P501),但书上对这两个宏却没有一点注释,看得本人一头无绪,请问各位大牛解释一下这个两个宏的具体工作过程

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 将参数列表的顺序翻转
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1270
活跃值: (109)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
菜鸟看宏:
第二个宏不是把各个参数压栈,然后调用函数吗?“Push i”。
第一个看不懂,因为买了罗老的书,一直没有看。
2009-2-18 13:06
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
第一个宏是把参数倒过来压入堆栈 因为约定是从右到左的 和进来的参数顺序相反
2009-2-18 15:42
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
4
这两个宏的功能知道,但问题是这两个宏(特别是reverseArgs)的功能是怎么实现?
2009-2-18 17:28
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
取自 http://topic.csdn.net/u/20090218/14/c1a06b73-ef0a-4217-9cf3-2413c2b3d671.html
一楼

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
  ;  将参数列表的顺序翻转 
  ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
  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
2009-2-18 19:29
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
6
感谢sessiondiy大牛提供的帮助
2009-2-18 20:36
0
游客
登录 | 注册 方可回帖
返回
//