月度归档: <span>2018 年 6 月</span>

sse 指令中 xmm 寄存器复制到内存出现异常

在将我的东方弹幕游戏拖到 win10 虚拟机中运行时发现程序一运行就崩溃了,报了内存访问异常(0xc0000005),而且多运行几次现象也会不同,有时是直接崩溃,有时还能坚持到显示完启动画面,但进入游戏时还是会高概率的崩溃 – -b 。

于是挂上 windbg 看一下,发现断在了这里

0012da40 55              push    ebp
0012da41 8bec            mov     ebp,esp
0012da43 8b4508          mov     eax,dword ptr [ebp+8]
0012da46 0f2800          movaps  xmm0,xmmword ptr [eax]
0012da49 0f2901          movaps  xmmword ptr [ecx],xmm0    ; <--- 0xc0000005
0012da4c 0f284010        movaps  xmm0,xmmword ptr [eax+10h]
0012da50 0f294110        movaps  xmmword ptr [ecx+10h],xmm0

获取 USB 扫描枪输入

最近公司买了个扫描枪,要给设备二维码做扫描录入工作。原来跟我说的是串口的扫描枪,没想到后来买到的是 usb 的,似乎是考虑到 usb 的比较普遍。果然串口还是没 usb 来得方便啊,在使用上。

以前没搞过 usb 的,一开始还以为不能工作,后来开了个记事本发现能正常录入了。。。

上网确认了一下果然是通过类似键盘事件进行输入的,那这样就上键盘钩子吧。


菱形继承的内存布局

菱形继承来自于多重继承,是为了解决具有歧义的组合而产生的一个结果。通过引入虚继承,使得多个由虚基类直接或间接派生的类拥有一个共同的基类实例。实现上相当于派生类绕过了父类直接继承了祖父类(虚基类)。
下面我们通过 MSC 14 编译器(VS2015)来看一下菱形继承的实现细节。