小端
先定义的位域占用字节低位
1 2 3 4
| struct { uint8_t a:4; uint8_t b:4; } Bit;
|
内存中:
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h> #include <stdint.h>
struct { uint8_t a:4; uint8_t b:4; } Bit;
int main() { Bit.a = 0x0; Bit.b = 0xf;
printf("Bit:%#x\n", Bit); printf("address:%x\n", (char*)&Bit);
return 0; }
|
输出:
阅读此文
Windows下实现本地透明代理可以通过一个过滤驱动和代理进程实现。
过滤驱动Attach到“//Device//Tcp”和”//Device//Udp”,然后在Dispatch函数中修改
连接的目的地址并保存原始目的地址和源地址。
上层的代理进程在accept到连接时,向过滤驱动查询连接的原始目的地址,
然后向原始目的地址发起连接。
Linux下面使用netfilter(iptables)可以很容易的实现一个TCP透明代理,
使用iptables的REDIRECT选项无需编写内核模块就可以把连接重定向到本地代理进程。
然后代理进程accept到连接时通过SO_ORIGINAL_DST这个socket选项就可以得到原始目的地址,
非常方便。
不过这只是对TCP而言的,对应UDP而言,还是需要编写一个内核模块,自己做一些处理。
对于UDP,可以用nf_register_hook注册一个Hook,然后保存socket目的地址。
另外注册一个字符设备,在字符设备的IOCTL处理函数中把socket的原始目的地址发送给代理进程。
这一点与Windows的过滤驱动很相似,过滤驱动一般也是注册一个控制设备,
用户态程序通过控制设备与过滤驱动通信。
Mac OS X中也有类似的机制(使用ipfw的fwd、divert选项),不过用的人较少。
Mac OS X中可以注册Socket Filters手工过滤特定的连接。
阅读此文
系统命令方式(优先级低于用户设置,即存储于注册表中的)
assoc改变指定拓展名对应的文件类型
assoc .apk=AndroidPackage
<=>
reg add HKEY_CLASSES_ROOT\.apk /d "AndroidPackage" /f
ftype来指定文件执行命令,%1代表该文件,%*代表参数
ftype txtfile="e:\OS\Android\Exeperience\apk-install.bat" %1 %*
<=>
reg add HKEY_CLASSES_ROOT\AndroidPackage\Shell\Open\Command /d "\"e:\OS\Android\Exeperience\apk-install.bat\" %%1 %%*" /f
修改用户设置
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice]
"Rrogid"="\"C:\\Program Files (x86)\\Vim\\vim73\\gvim.exe\" \"%1\" \"%*\""
阅读此文
精度
这个函数并非实时发送,而是由系统每18ms发送一次,因此其最小精度为18ms。当需要有小于18ms的精度计算时,应使用StopWatch方法进行。
阅读此文