例子1,只有图片
例子2,含有链接的图片
例子3,图片+介绍文字

标题样式

例子3,图片+介绍文字
注意要用换行符号换行
标题h3是紫色,h4是蓝色
PS:最大宽度300px
超出300px自动换行,参见下一张
链接
例子4,链接图片+介绍文字

『EVA:破』 画面曝光

在公开的预告片中,虽然没有主役台词 但是由鹭巢诗郎创作的音乐缓缓流淌,加上动感十足的战斗场面依然能牢牢吸引眼球。在这个简短的预告篇中,可以看到《EVA:破》中登场的EVA2号机在空中乱舞的场面,与TV系列中有异曲同工之妙的初号机和3号机激烈战斗的场面,此外还有疑似新使徒的身影出没。
猛击查看

密码保护:几个0day

This content is password protected. To view it please enter your password below:

虚函数

有时候脑袋短路,加上记忆力退化,很多已知的概念又模糊混淆了。唉,杯具。
今天就在想一个拥有虚函数的基类,它的对象是不是没有vptr和vtable?因为它本身很确定了,如下:
class CA
{
public:
 virtual void Func1()
 {
  printf("CA::Func1\n");
 }
};
CA a;
printf("sizeof(a)=%d, sizeof(CA)=%d\n", sizeof(a), sizeof(CA));
a.Func1();
事实是sizeof均为4,也就是说有vptr和vtable!而a.Func1的调用也确实是很确定的:
00424591  lea         ecx,[a]
00424594  call        CA::Func1 (41564Ah)
但若使用指针调用则:
CA *pa = &a;
0042D241  lea         eax,[a]
0042D244  mov         dword ptr [pa],eax
pa->Func1();
0042D247  mov         eax,dword ptr [pa]
0042D24A  mov         edx,dword ptr [eax]
0042D24C  mov         esi,esp
0042D24E  mov         ecx,dword ptr [pa]
0042D251  mov         eax,dword ptr [edx]
0042D253  call        eax
很明显是通过vptr和vtable实现的。想想多态的概念也确实是虚函数+指针/引用的结合实现的。
因此一个类只要拥有虚函数则一定是拥有vptr和vtable的,编译器可以不用区分这是不是多态(指针/引用的对象是基类CA的还是子类CB的)来分别生成代码,如下:
CA *pa = &b;
0042D264  lea         eax,[b]
0042D267  mov         dword ptr [pa],eax
pa->Func1();
0042D26A  mov         eax,dword ptr [pa]
0042D26D  mov         edx,dword ptr [eax]
0042D26F  mov         esi,esp
0042D271  mov         ecx,dword ptr [pa]
0042D274  mov         eax,dword ptr [edx]
0042D276  call        eax 
又在想另一个问题:若一个拥有虚函数的子类继承自一个拥有虚函数的基类,它的对象是不是有两套vptr和vtable?如下
class CB : public CA
{
public:
 virtual void Func2()
 {
  printf("CB::Func2\n");
 }
};
答案是不需要,因为可以通过一套vptr和vtable调用到各自的成员函数,只有多重继承时才会有多套vptr和vtable!

tagVARIANT CComVariant源码剖析

tagVARIANT CComVariant

Ubuntu技巧

Firefox

1.新建标签页Ctrl+T(新建窗口Ctrl+N)

2.关闭标签页Ctrl+F4

3.切换标签页Ctrl+Tab/Ctrl+Pg Up/Ctrl+Pg Dn

Ubuntu

1.切换窗口Atl+Tab,若同一应用有多个窗口会合并,此时只需Atl+Tab切换到该合并窗口后按住Atl键等一会或按住Atl键后+向下键即会展开合并的窗口,此时左右键选择展开的窗口,而向上键合并窗口。

2.启动栏中的应用切换Win+Tab

3.运行程序Atl+F2输入程序

4.长按Win键有快捷键提示

Ubuntu编译Bochs

下载了Bochs2.6的源码,准备编译,命令如下:

tar vxzf bochs-2.6.tar.gz

cd bochs-2.6

./configure --enable-debugger --enable-disasm

make

sudo make install

默认情况下运行./configure和make的时候会出问题,原因是因为编译Bochs需要一些依赖环境,解决办法如下:

Ubuntu 10.04下编译安装Bochs 2.6及问题解决

Win7和Ubuntu双系统

换了新笔记本,打算装Win7和Ubuntu双系统,在实施的过程中遇到了一系列纠结的问题,在这里记录下,以供参考。

Win7部分

首先是安装Win7,给系统分区的时候由于硬盘没格式化过,因此分第一个区时同时出现了一个100M的系统保留分区。关于这个系统保留分区这里罗嗦下,这是Win7的安全特性,将BootLoader(Win7的BootLoader是BootMgr)及其相关文件单独放在这个分区里,这个分区被设为系统、活动、主分区,并且没有分配驱动器号(因此在“我的电脑”中看不到该分区)。更多详细信息可以参考百度百科系统保留分区

MBR的分区表占64个字节,每项16字节,因此只能有4个主分区,这里系统保留分区和第一个分区就占了2个分区,因此剩下的空间只能分配在2个主分区了。但我打算给Win7 4个分区(这也是常见的分区形式),再给Ubuntu 1个分区,这里用到了扩展分区和逻辑分区。我分配了第二个主分区,剩下的为1个扩展分区,这个扩展分区中再分成3个逻辑分区,2个用于Win7(这样就凑成了4个分区,分配了驱动器号的),1个用于Ubuntu。这里关于分区的更多详细信息可以参考百度百科扩展分区

Win7按步骤装好后注意不要格式化最后一个准备给Ubuntu的分区(驱动器号也不用分配)。接下来怎样装Ubuntu呢,这就要用到EasyBCD了。

EasyBCD部分

引导Windows的启动过程中,可以有一个引导菜单,比如很多ghost后的系统在引导时就有除了正常引导Windows之外的一键恢复之类的选项。XP时代这个引导菜单是通过Boot.ini来配置的,有关Boot.ini的详细信息可以参考百度百科Boot.ini。Vista之后Windows开始使用BCD(Boot Configuration Data)来管理这个引导菜单,很明显EasyBCD的用途就是配置BCD的。

BCD的配置过程如下:Add New Entry--->Neo Grub Tab Page--->Install--->Configure,此时会用记事本打开一个menu.lst文件,加上下面的配置即可。

title Install Ubuntu

root (hd0,0)

kernel (hd0,0) /vmlinuz boot=casper iso-scan/filename=/ubuntu-12.10-desktop-i386.iso ro quiet

splash locale=zh_CN,UTF-8

initrd (hd0,0)/initrd.lz

这里简单说明下这些操作的意义(因为我也不甚了解),EasyBCD配置了一个新的引导项,事实上这个引导项是Neo Grub(关于Grub在Ubuntu部分再提它),这个程序的作用也是显示一个引导菜单供选择,因此上面的配置文件实际上是在配置Neo Grub的引导菜单项。看看这个配置文件,有几点需要注意,title后面的Install Ubuntu实际上是菜单项的名字;(hd0,0)是指安装Ubuntu的所需要的文件存放地址,这里的hd0是0号硬盘,后面的0是第1个分区,由于我之前装Win7的时候第1个分区是系统保留分区,没有驱动器号(也没有必要破坏Win7的安全特性),所以我修改成(hd0,1)了,若没有系统保留分区就不要修改了,然后将相关文件拷贝到C盘根目录下即可;注意这里的iso文件名要和C盘根目录下的一致,我这里安装的Ubuntu 12.10。

现在理清下安装Ubuntu时系统引导的过程,MBR--->Win7 bootmgr--->选择Neo Grub--->选择Install Ubuntu--->去(hd0,1)即Win7中的C盘找相关文件。

Ubuntu部分

前面都配置好了,安装Ubuntu的过程就简单了,只是要去Ubuntu官网上下载一个ubuntu-12.10-desktop-i386.iso,并拷贝到Win7 C盘,另外还需要解压出iso casper目录下的vmlinuz和initrd.lz两个文件,并拷贝到Win7 C盘下。

进入Install Ubuntu后,其实就相当于进了Win PE,桌面上有个安装包,双击就开始安装了。这里有些文档提到双击安装前要先通过终端运行sudo umount -l /isodevice,防止安装过程中出现“无法卸载挂载点”的情况,这里我没试过,但成功了(不确定12.10是不是还需要这样,有人实验过后请告诉我)。

这里再罗嗦一点,估计很多人都找不到在哪里运行终端,我也摸索了N久,快捷键是Ctrl+Atl+T,也可以通过Dash主页搜终端。搜索资料时发现有人说Ctrl+Atl+F1和Ctrl+Atl+F2的,坑爹货!虽然是终端的样子但是是tty1和tty2,基本上输入命令不起作用,还有乱码(这个问题有人能告诉我一下吗?),若要从tty1和tty2切换到桌面是Ctrl+Atl+F7。关于tty1/tty2不太懂,说是Linux里的工作组,桌面是第七个工作组。

最后还有一点设置回Win7为默认启动项的事我就不写了,请参考下面三篇文章。无非就是安装Ubuntu后Ubuntu的Grub(这里也遇到了它)代替了Win7的bootmgr,需要由它引导到bootmgr再到Win7了。

如何在windows7系统下硬盘安装ubuntu双系统(菜鸟版)

Windows7和Linux双系统安装方法

WIN7下硬盘安装linux双系统

说点Ubuntu初用的一些纠结事。第一个就是重启卡死的问题,搜了下资料说是ACPI兼容问题,但是BIOS又没有相关设置,因此要通过设置Grub来配置了。需要将ACPI的设置改为acpi=froce/noacpi acpi=off等,这里的命令是sudo gedit /filepath,但这里我遇到了分不清tty和终端的坑爹问题,导致tty中执行命令出错,还是乱码!!!网上有说改menu.lst(是不是想起了前面配置EasyBCD时的menu.lst?)的,坑爹的是Ubuntu 12.10的Grub中根本没有menu.lst,而是一个grub.cfg(/boot/grub目录下),该文件类似脚本(说实话,看不懂)无从下手,后面发现它是由/etc/default/grub生成的,因此sudo gedit /etc/default/grub编辑GRUB_CMDLINE_LINUX_DEFAULT="quiet splash",在quiet splash后面加上acpi=froce之类,但是很遗憾,均没有效果(若是有人成功搞定这个问题请一定告诉我)。

第二个是中文输入法的问题,Ubuntu 12.10中文环境默认中文输入法是ibus-sunpinyin,但是它翻页默认是用Pg Up和Pg Dn。对于习惯了Windows环境下-和=翻页的我实在受不了。查了下网上的设置,说是/usr/lib/ibus-pinyin/ibus-setup-pinyin,在其弹出来的设置窗口中设置后即可,坑爹的是它竟然默认就是-和=还有,和。来翻页的!为什么不对?原来这不是sunpinyin,sunpinyin是ibus-setup-sunpinyin,问题又来了,/usr/lib/ibus-pinyin/ibus-setup-sunpinyin竟然不存在?!原来完整的路径应该是/usr/lib/ibus-sunpinyin/ibus-setup-sunpinyin,拜托回帖的大侠写全啊,菜鸟伤不起啊!另外Ubuntu的输入法切换是Ctrl+Space。

[已解决]Ubuntu12中的ibus的输入法默认翻页是PageUp和PageDown键怎么改?

Ubuntu下ibus-sunpinyin的安装及翻页快捷键设置!

第三个是坑爹的Ubuntu软件中心装Flash的问题了。Firefox看视频提示要装Flash,进了Adobe的网页下载选择了Ubuntu,结果就拉起了Ubuntu软件中心。不知道是下载进度还是安装进度,卡住不动了,没点提示,又不知道如何关闭重来。解决方法:sudo rm -rf /var/lib/dpkg/lock(对安装库解锁),sudo dpkg -r flashplugin-installer(卸载flashplugin),sudo apt-get remove --purge flashplugin-installer(删除配置),到这里算是卸赶紧了flashplugin,但Ubuntu软件中心还显示着Flash的进度。这里需要杀掉这个进程,ps -af | grep dpkg列出包含dpkg关键字的进程,sudo kill -9 PID,杀掉该PID进程即可。如何安装Flash呢,去Adobe下载时选择tar.gz,解压到某目录下后,将相关文件拷贝到对应的目录下即可:sudo cp libflashplayer.so /usr/lib/mozilla/plugins和sudo cp -r usr/* /usr。

ubuntu下解决FLASH安装卡死问题

最后说一下Linux QQ安装,找到个帖子提供的二进制安装了,就是支持得太弱了,还不如用WebQQ。

QQ for Linux(Ubuntu)

无觅相关文章插件,快速提升流量