|
发表于 2015-9-5 15:00:34
|
显示全部楼层
上面所列的code有bug,在显示完register value会,程序会提法非法操作,被WIN OS阻止.我这里重新改写了一下,现在,一切都好了..:){:soso_e100:}
请参见下列代码:
- ; Example of 64-bit PE program
- format PE64 GUI
- entry start
- include 'WIN64A.INC'
- section '.text' code readable executable
- start:
-
- sub rsp, 8
- invoke wsprintf, szTemp, "PE64 Demo: %s", _message
- invoke MessageBoxA, 0, szTemp, _caption, 0
-
- ;Showing registers.
- pushf
- pop rax
- lea r15, [rip]
-
- invoke wsprintf, szTemp, RegStr, rax, rax, r8, rbx, r9, rcx, r10, rdx, r11, rsp, r12, rbp, r13, rsi, r14, rdi, r15, r15
- invoke MessageBoxA, 0, szTemp, _caption, 0
-
- mov rcx,rax
- ;call [ExitProcess]
- invoke ExitProcess
- section '.data' data readable writeable
- _caption db 'Win64 assembly program',0
- _message db 'Hello World!- Kenneth Zheng',0
- szTemp rb 1000
- RegStr db 'FLAGS: %.8X',13,10
- db 'RAX: %.16IX',9,'R8: %.16IX',13,10
- db 'RBX: %.16IX',9,'R9: %.16IX',13,10
- db 'RCX: %.16IX',9,'R10: %.16IX',13,10
- db 'RDX: %.16IX',9,'R11: %.16IX',13,10
- db 'RSP: %.16IX',9,'R12: %.16IX',13,10
- db 'RBP: %.16IX',9,'R13: %.16IX',13,10
- db 'RSI: %.16IX',9,'R14: %.16IX',13,10
- db 'RDI: %.16IX',9,'R15: %.16IX',13,10
- db 'RIP: %.16IX',13,10,0
-
- section '.idata' import data readable writeable
- dd 0,0,0,RVA kernel_name,RVA kernel_table
- dd 0,0,0,RVA user_name,RVA user_table
- dd 0,0,0,0,0
- kernel_table:
- ExitProcess dq RVA _ExitProcess
- dq 0
- user_table:
- MessageBoxA dq RVA _MessageBoxA
- wsprintf dq RVA _wsprintfA
- dq 0
- kernel_name db 'KERNEL32.DLL',0
- user_name db 'USER32.DLL',0
- _ExitProcess dw 0
- db 'ExitProcess',0
- _MessageBoxA dw 0
- db 'MessageBoxA',0
- _wsprintfA dw 0
- db 'wsprintfA',0
复制代码 |
|