找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 7654|回复: 5

charme写的显示寄存器值[FASM]

[复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-6-17 21:26:45 | 显示全部楼层 |阅读模式

  1. ;info

  2. ;;author:charme[X64]
  3. ;;index:http://hi.baidu.com/charme000
  4. ;;site:http://www.x64asm.com/
  5. ;;date:2010.1.8

  6. format PE64 GUI

  7. ;;include
  8. include 'C:\asm\tool\fasm\fasmw\INCLUDE\win64axp.inc'

  9. ;;data
  10. .data
  11.         status          db      'Status',0
  12.         reg             db      'FLAGS: %.8X',13,10,'%s',13,10

  13.                         db      'RAX: %.16IX',9,'R8: %.16IX',13,10
  14.                         db      'RBX: %.16IX',9,'R9: %.16IX',13,10
  15.                         db      'RCX: %.16IX',9,'R10: %.16IX',13,10
  16.                         db      'RDX: %.16IX',9,'R11: %.16IX',13,10
  17.                         db      'RSP: %.16IX',9,'R12: %.16IX',13,10
  18.                         db      'RBP: %.16IX',9,'R13: %.16IX',13,10
  19.                         db      'RSI: %.16IX',9,'R14: %.16IX',13,10
  20.                         db      'RDI: %.16IX',9,'R15: %.16IX',13,10

  21.                         db      'RIP: %.16IX',13,10,0

  22.         buff            rb      1024
  23.         flag            dd      ?

  24. .code

  25.         start:
  26.                         sub     rsp,4*8
  27.                         jmp     print
  28.                         ;jmp     print
  29.                         ;jmp     print

  30.                         ;;exit
  31.                         add     rsp,4*8
  32.                         xor     rcx,rcx
  33.                         call    [ExitProcess]

  34.         print:
  35.                         pushf
  36.                         push    qword [rsp+8] ;;return address
  37.                         push    r15
  38.                         push    rdi
  39.                         push    r14
  40.                         push    rsi
  41.                         push    r13
  42.                         push    rbp
  43.                         push    r12
  44.                         push    rsp
  45.                         push    r11
  46.                         push    rdx
  47.                         push    r10
  48.                         push    rcx
  49.                         push    r9
  50.                         push    rbx
  51.                         push    r8
  52.                         push    rax      ;;we have push 17*8 xx

  53.                         mov     r8,[rsp+17*8];;3th arg

  54.                         ;;create stack for wsprintf
  55.                         sub      rsp,4*8

  56.                         ;;push arrgs
  57.                         lea    rcx,[buff]  ;;1th arg
  58.                         lea    rdx,[reg]   ;;2th arg
  59.                         lea    r9,[flag]   ;;4th arg
  60.                         call   [wsprintf]

  61.                         ;;msgbox
  62.                         xor     rcx,rcx
  63.                         lea     rdx,[buff]
  64.                         lea     r8,[status]
  65.                         xor     r9,r9
  66.                         call    [MessageBoxA]

  67.                         ;;recover stack
  68.                         add     rsp,4*8

  69.                         ;;pop
  70.                         pop     rax
  71.                         pop     r8
  72.                         pop     rbx
  73.                         pop     r9
  74.                         pop     rcx
  75.                         pop     r10
  76.                         pop     rdx
  77.                         pop     r11
  78.                         pop     rsp
  79.                         pop     r12
  80.                         pop     rbp
  81.                         pop     r13
  82.                         pop     rsi
  83.                         pop     r14
  84.                         pop     rdi
  85.                         pop     r15
  86.                         pop     qword [rsp+8]
  87.                         popf

  88. .end    start
复制代码

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2012-1-27 23:15:28 | 显示全部楼层
charme先生貌似很久没来了。

28

主题

116

回帖

0

精华

铜牌会员

积分
273
发表于 2012-5-6 18:42:15 | 显示全部楼层

好贴顶一下

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-12 16:37:16 | 显示全部楼层
我也來推一下

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-5-2 10:44:53 | 显示全部楼层
好贴需要顶

0

主题

2

回帖

0

精华

初来乍到

积分
65
发表于 2015-9-5 15:00:34 | 显示全部楼层
上面所列的code有bug,在显示完register value会,程序会提法非法操作,被WIN OS阻止.我这里重新改写了一下,现在,一切都好了..:){:soso_e100:}

请参见下列代码:


  1. ; Example of 64-bit PE program

  2. format PE64 GUI
  3. entry start

  4. include         'WIN64A.INC'

  5. section '.text' code readable executable

  6.   start:
  7.        
  8.         sub        rsp, 8        
  9.         invoke wsprintf, szTemp, "PE64 Demo: %s", _message
  10.         invoke MessageBoxA, 0, szTemp, _caption, 0
  11.        
  12.         ;Showing registers.
  13.         pushf
  14.         pop        rax
  15.         lea        r15, [rip]
  16.        
  17.         invoke wsprintf, szTemp, RegStr, rax, rax, r8, rbx, r9, rcx, r10, rdx, r11, rsp, r12, rbp, r13, rsi, r14, rdi, r15, r15
  18.         invoke MessageBoxA, 0, szTemp, _caption, 0
  19.        
  20.         mov        rcx,rax
  21.         ;call        [ExitProcess]
  22.         invoke ExitProcess

  23. section '.data' data readable writeable

  24.   _caption db 'Win64 assembly program',0
  25.   _message db 'Hello World!- Kenneth Zheng',0
  26.   szTemp        rb        1000
  27.         RegStr                             db      'FLAGS: %.8X',13,10
  28.                         db      'RAX: %.16IX',9,'R8: %.16IX',13,10
  29.                         db      'RBX: %.16IX',9,'R9: %.16IX',13,10
  30.                         db      'RCX: %.16IX',9,'R10: %.16IX',13,10
  31.                         db      'RDX: %.16IX',9,'R11: %.16IX',13,10
  32.                         db      'RSP: %.16IX',9,'R12: %.16IX',13,10
  33.                         db      'RBP: %.16IX',9,'R13: %.16IX',13,10
  34.                         db      'RSI: %.16IX',9,'R14: %.16IX',13,10
  35.                         db      'RDI: %.16IX',9,'R15: %.16IX',13,10

  36.                         db      'RIP: %.16IX',13,10,0
  37.                         
  38. section '.idata' import data readable writeable

  39.   dd 0,0,0,RVA kernel_name,RVA kernel_table
  40.   dd 0,0,0,RVA user_name,RVA user_table
  41.   dd 0,0,0,0,0

  42.   kernel_table:
  43.     ExitProcess dq RVA _ExitProcess
  44.     dq 0
  45.   user_table:
  46.     MessageBoxA dq RVA _MessageBoxA
  47.     wsprintf                dq RVA _wsprintfA
  48.     dq 0

  49.   kernel_name db 'KERNEL32.DLL',0
  50.   user_name db 'USER32.DLL',0

  51.   _ExitProcess dw 0
  52.     db 'ExitProcess',0
  53.   _MessageBoxA dw 0
  54.     db 'MessageBoxA',0
  55.   _wsprintfA dw 0
  56.     db 'wsprintfA',0
复制代码

WIN64_REG.rar

1.38 KB, 下载次数: 3173

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表