· GetStdHandle
检索指定标准设备的句柄(标准输入、标准输出或标准错误)
HANDLE WINAPI GetStdHandle(
_In_ DWORD nStdHandle // 标准设备
);
https://learn.microsoft.com/zh-cn/windows/console/getstdhandle
· WriteFile
将数据写入指定的文件或输入/输出 (I/O) 设备
BOOL WriteFile(
[in] HANDLE hFile, // 文件或 I/O 设备的句柄
[in] LPCVOID lpBuffer, // 要写入的数据缓冲区
[in] DWORD nNumberOfBytesToWrite, // 要写入的字节数
[out, optional] LPDWORD lpNumberOfBytesWritten, // 接收写入的字节数
[in, out, optional] LPOVERLAPPED lpOverlapped // 指向 OVERLAPPED 结构的指针
);
https://learn.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-writefile
void ExitProcess(
[in] UINT uExitCode // 进程和所有线程的退出代码
);
format PE64 console
entry start
include 'win64a.inc'
include 'apikernel32.inc'
section '.data' data readable writeable
message db 'Hello World!',0
;要在控制台上显示的消息
message_length = $-message
;计算消息长度,在写入控制台时知道写多少
section '.text' code readable executable
start:
push rbp ;保存基指针
mov rbp, rsp ;设置新的基指针
mov rcx, -11
表示程序运行时的标准输出流,通常是控制台窗口
call [GetStdHandle]
GetStdHandle(STD_OUTPUT_HANDLE),会返回一个句柄
WriteFile
mov rcx, rax
lea rdx, [message]
mov r8d, message_length
lea r9, [rsp+4*8]
mov qword[rsp+5*8], 0
call [WriteFile]
WriteFile 将 Hello World! 写入控制台
mov ecx, eax
call [ExitProcess] ;调用 ExitProcess 结束程序
leave ;恢复基指针和栈指针
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL'
原文始发于微信公众号(走在网安路上的哥布林):x64 汇编 - Windows 平台输出 Hello World!
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论