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

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

2009-2-18 09:52
5905
书上代码注入的例子由于需要重定位,用了定义的宏如下(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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1278
活跃值: (114)
能力值: ( 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
取自 740K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8G2M7r3W2U0i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4g2Q4x3V1j5J5x3o6l9&6x3o6t1I4z5q4)9J5c8U0p5@1i4K6u0r3j5K6q4S2x3o6k6T1y4K6y4Q4x3X3c8W2k6U0m8S2i4K6u0V1y4o6t1I4y4#2)9J5k6o6W2U0k6U0y4Q4x3X3b7J5y4o6p5K6j5K6u0T1x3$3b7$3y4K6q4Q4x3X3g2Z5N6r3#2D9
一楼

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

这些是不是你要的
e20K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4W2j5i4u0U0K9q4)9J5k6h3c8G2N6$3&6D9L8$3q4V1i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4y4W2j5i4u0U0K9q4)9J5c8W2)9J5y4f1f1%4i4K6t1#2b7V1c8Q4x3U0f1&6y4#2)9J5y4f1f1@1i4K6t1#2b7V1q4Q4x3U0f1&6x3g2)9J5y4f1f1#2i4K6t1#2b7V1c8Q4x3U0g2m8b7H3`.`.
2009-2-18 19:29
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
6
感谢sessiondiy大牛提供的帮助
2009-2-18 20:36
0
游客
登录 | 注册 方可回帖
返回