Windows IOCP 示例
这个示将接收到的数据原样返回给客户端:
1#include <WinSock2.h>
2#include <WS2tcpip.h>
3#include <MSWSock.h>
4#include <cstdio>这个示将接收到的数据原样返回给客户端:
1#include <WinSock2.h>
2#include <WS2tcpip.h>
3#include <MSWSock.h>
4#include <cstdio>首先需要一个 ico 格式的图片,然后创建一个 .rc 的资源文件,内容如下:
1IDI_ICON1 ICON "icon.ico"在 CMake 配置中将 .rc 资源文件添加到源码列表中:
需要将项目类型设为桌面程序。此时入口函数默认为 WinMainCRTStartup,它会在初始化后调用 WinMain 而不是 main。
可以将入口函数修改为 mainCRTStartup 来调研 main。
VS 的链接选项:
1:/SUBSYSTEM:windows;/ENTRY:mainCRTStartup在使用汇编编程时,调用间需要保存与恢复寄存器,这些寄存器可以由调用者保存恢复(Caller Saved Register)也可以由被调用者保存恢复(Callee Saved Register)。
由于调用者不知道哪些寄存器会被修改,因此只能将所有 Caller Saved Register 进行保存恢复,但这样做效率低下。
因此使用 Callee Saved Register 由被调用者根据需要保存和恢复会被改变的寄存器更常用。需要保存的寄存器如下:
| 架构 | 被调用者保存的寄存器 |
|---|
调用规约是在关于程序调用和返回的约定,参考维基百科。
| 参数 | 寄存器 |
|---|---|
| 整数或指针(1-6) | RDI, RSI, RDX, RCX, R8, R9 |
| 浮点数(1-8) | XMM0 - XMM7 |
安装依赖
1sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common添加 docker 的 GPG key
sudo docker pull ubuntu:20.04sudo docker run -h aarch64 --name aarch64 -it ubuntu:20.04最新版 ubuntu 22.04 的
libc6-dev-arm64-cross为 2.35,与目标平台上的版本 2.28 不兼容,因此使用 20.04 版本的镜像。
Tan90-Proxy 是一个 NAT 穿透代理服务器。
可以将 Minecraft 服务程序部署在本地,然后通过一个廉价低配的公网服务器转发,从而降低开服成本。
一些服务器优惠页面: