pigLoveRabbit的博客

pigLoveRabbit的博客

创建 NAT 虚拟网络

要用到一些PowerShell命令

1
2
3
4
5
New-VMSwitch -SwitchName "new" -SwitchType Internal

New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceAlias "vEthernet (new)"

New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24

New-VMSwitch 新建了一个内部的交换机
New-NetIPAddress 设置了网卡的ip
New-NetNat 设定了子网

端口映射

最后利用Add-NetNatStaticMapping命令,映射到宿主机端口:

1
Add-NetNatStaticMapping  -NatName MyNATnetwork  -Protocol TCP  -ExternalIPAddress 0.0.0.0/24  -ExternalPort 5400  -InternalIPAddress 192.168.0.3 -InternalPort 5400

参考: * https://learn.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/user-guide/setup-nat-network

顶点着色器

vertex.glsl

1
2
3
4
5
6
7
8
9
varying vec3 vPosition;

void main() {
vPosition = position;
// MVP
vec4 modelViewPosition = modelViewMatrix * vec4( position, 1.0 );
vec4 projectedPosition = projectionMatrix * modelViewPosition;
gl_Position = projectedPosition;
}

片段着色器

fragment.glsl

1
2
3
4
5
varying vec3 vPosition;

void main() {
gl_FragColor = vec4(vPosition, 1);
}

效果

用了PlaneGeometry

1
2
3
4
5
6
// meshes
const geometry = new THREE.PlaneGeometry(2, 2)
const material = new THREE.ShaderMaterial({
vertexShader: vertexShader,
fragmentShader: fragmentShader,
})

upload successful

旋转矩阵

首先要说明的是,左右手旋转矩阵是不一样的,DirectX中是左手坐标系,而OpenGL用的是右手坐标系,这里给出的旋转矩阵也是基于右手坐标系的

绕x轴旋转矩阵:

\[ \begin{bmatrix} \color{red}1 & \color{red}0 & \color{red}0 & \\ \color{green}0 & \color{green}{\cos \theta} & - \color{green}{\sin \theta} \\ \color{blue}0 & \color{blue}{\sin \theta} & \color{blue}{\cos \theta} \\ \end{bmatrix} \]

沿y轴旋转矩阵:
\[ \begin{bmatrix} \color{red}{\cos \theta} & \color{red}0 & \color{red}{\sin \theta} \\ \color{green}0 & \color{green}1 & \color{green}0 \\ -\color{blue}{\sin \theta} & \color{blue}0 & \color{blue}{\cos \theta} \end{bmatrix} \]

沿z轴旋转矩阵:
\[ \begin{bmatrix} \color{red}{\cos \theta} & - \color{red}{\sin \theta} & \color{red}0 \\ \color{green}{\sin \theta} & \color{green}{\cos \theta} & \color{green}0 \\ \color{blue}0 & \color{blue}0 & \color{blue}1 \\ \end{bmatrix} \]

参考:
* 变换

css中应用

对元素的transform属性,我们可以应用矩阵

1
matrix(a,b,c,d,e,f)	
这6参数,对应的矩阵就是:

upload successful
注意书写方向是竖着的。 e, f参数其实就是x,y方向上偏移。

阅读全文 »

平常我们用的都是Linux Container,这些容器用的都是Linux的内核,而今天我们要记录的是Windows Container,就是讲这些容器用的是Windows的内核,Windows内核是啥?那就是Windows NT
查看你的Windows内核版本,可以用

1
Get-ComputerInfo | Select WindowsProductName, WindowsVersion, WindowsInstallationType, OsServerLevel, OsVersion, OsHardwareAbstractionLayer
类似输出
1
2
3
4
5
6
WindowsProductName         : Windows 10 Pro for Workstations
WindowsVersion : 2009
WindowsInstallationType : Client
OsServerLevel :
OsVersion : 10.0.19044
OsHardwareAbstractionLayer : 10.0.19041.1566
上面NT的版本是10.0.19044。

环境
* 安装 .NET 6 SDK * Windows Server 2022 * Docker(针对Windows Server的docker,没有UI的) * 安装一个喜欢的代码编辑器,例如 Visual Studio(Code)。

阅读全文 »

x86汇编

8086的指令在32/64位的x86 CPU上都是能用的,所以汇编代码是类似的,80836之后的CPU 保护模式下段寄存器就不重要了,平常用的多的就是那8个通用寄存器(为啥用不到CS, DS, ES等寄存器了,请看这里):

通用寄存器 含义 低8位 功能
EAX 累加(Accumulator)寄存器 AX(AH、AL) 常用于乘、除法和函数返回值
EBX 基址(Base)寄存器 BX(BH、BL) 常做内存数据的指针, 或者说常以它为基址来访问内存.
ECX 计数器(Counter)寄存器 CX(CH、CL) 常做字符串和循环操作中的计数器
EDX 数据(Data)寄存器 DX(DH、DL) 常用于乘、除法和 I/O 指针
ESI 来源索引(Source Index)寄存器 SI 常做内存数据指针和源字符串指针
EDI 目的索引(Destination Index)寄存器 DI 常做内存数据指针和目的字符串指针
ESP 堆栈指针(Stack Point)寄存器 SP 只做堆栈的栈顶指针; 不能用于算术运算与数据传送
EBP 基址指针(Base Point)寄存器 BP 只做堆栈指针, 可以访问堆栈内任意地址, 经常用于中转 ESP 中的数据, 也常以它为基址来访问堆栈; 不能用于算术运算与数据传送

64位CPU兼容32位的程序,所有下面的程序都是32位的,汇编器用的是NASM

阅读全文 »

upload successful

INT表示interrupt(中断), INT指令是X86汇编语言中最重要的指令之一,它的作用是引发中断,调用“中断例程”(interrupt routine)。
中断是由于软件或硬件的信号,使CPU暂停执行当前的任务,转而去执行另一段子程序。
* 硬中断(外中断):由外部设备,如网卡、硬盘随机引发的,比如网卡收到数据包的时候,就会发出一个中断。 * 软中断(内中断):由执行中的指令产生的,可以通过程序控制触发。

可以通过 “ INT 中断码 ” 实现中断,内存中有一张中断向量表,用来存放中断码处理中断程序的入口地址。CPU在接受到中断信号后,暂停当前正在执行的程序,跳转到中断码对应的向量表地址处去执行中断。

我们理解上可以当INT就是调用系统内置的一些功能。
常用的中断:
* INT 21H:DOS系统功能调用 * INT 10H:BIOS终端调用 * INT 3H:断点中断,用于调试程序

这篇文章重点记录下DOS的系统功能调用,也就是INT 21H

阅读全文 »
0%