Friday, May 28, 2010

Live Forensics

http://www.atcorp.com/Publications/CACM_LiveForensics.pdf
http://www.foolmoon.net/downloads/Live_Forensics_Using_WFT.pdf
http://portal.acm.org/citation.cfm?id=1113070

Thursday, May 27, 2010

How to debug Linux kernel using QEMU?

How to debug Linux kernel using QEMU?
1. Install QEMU and install a QEMU VM, the Linux on VM is the one being debugged.
2. Enable some debug configurations, then recompile the kernel. The debugging configurations is described on LDD3 (Linux device driver), chapter 4.
3. Start QEMU VM, use –S argument. It means the VM will be suspended when start.
4. Click on the window of the QEMU VM, press ctrl+alt+2 to switch to QEMU monitor, then type: gdbserver 1234. This will start gdbserver built in QEMU and it listens on the port 1234. Then press “c” to “continue”. Then press alt+ctrl+1 to switch back to OS console.
5. Start a GDB on the host. To get the symbols of the linux kernel, put the source files of the compiled kernel on the same path on the host. Use “gdb vmlinux” to start gdb. Note the vmlinux is an uncompressed file and its size is about 30MB. If it is too small, it may not have necessary debug symbols.
6. In gdb command line, type: “target remote localhost:1234”. This 1234 is the port number used in the gdbserver in step 4.
7. Press “enter”, then the VM should be stopped, and gdb will display some source files, telling where the current function is.
8. To setup a breakpoint, use “b xxx” in gdb, then press “c” to continue.

Friday, May 21, 2010

HyperSpace

http://blog.sharevm.com/2010/03/10/bios-based-type-1-client-hypervisors-on-the-horizon/
http://www.linuxplanet.com/linuxplanet/reviews/6686/1/
http://www.informationweek.com/blog/main/archives/2007/11/phoenixs_hypers.html

Wednesday, May 12, 2010

Introduction to Bochs

Introduction to Bochs
1. Bochs is another emulator (virtual machine) supports X86.
2. Support multiple platforms: Linux, Windows, *BSD
3. Can compiled on Linux and Windows
4. Bochs-2.4.1 does not compile on 64bit CentOS. Bochs-2.4.5 OK.
5. On-line document is old. There is no bochs-dlx command mentioned in Chapter 3.3
6. ./configure --enable-debugger --enable-disasm --enable-debugger-gui=0


11.常用的bochs调试命令
c 继续执行
s count 单步执行,count为指令数量
vb seg:off 例如vb 0x0000:0x7c00(虚拟地址断点)
lb addr 线性地址断点
pb 物理地址断点
info break 断点相关信息
x /10 从当前地址执行10条指令
info cpu
info r 寄存器

Quick ref:
http://wiki.minix3.org/en/UsersGuide/RunningMinixOnBochs
http://box.matto.nl/minix3bochs.html
http://dev.csdn.net/article/83/83404.shtm (old)

Wednesday, May 5, 2010

Linux Suspend / Hibernate Functionality Support

http://www.cyberciti.biz/faq/linux-suspend-hibernate-functionality-support/

Xen常用的基本命令(ZZ)

http://hi.baidu.com/huangj/blog/item/2541bf38db8671cbd462252a.html

Xen常用的基本命令

RHEL5自带Xen,如果用上面的图形化操作也还是不错的。不过还是命令行比较方便——如果会的话。做下记录:
Xen的日志在/var/log/xen
一般是准备好一个虚拟硬盘在Domain-0上面,为安装System1做准备:dd if=/dev/zero of=/opt/Xen/system1.img bs=1024k count=10000 生成一个10g大小的硬盘(注:这一步可以省略,等virt-install来自己产生)。
开始安装:virt-install -n system1 -r 1024 --file=/opt/Xen/system1.img --nographic -l nfs:127.0.0.1:/media/cdrom
参数很好记忆。实在记不住,直接输入virt-install就可以,他会有文字提示一步步完成。或者也可以直接 virt-install -h看提示,里面有包括nfs,ftp,http的格式都有,所以其实不怎么费脑子。关键是要告诉xen,你装的虚拟机的名字,给他分多少内存,硬盘在哪,安装文件在哪,就够了。安装过程和正常装没什么区别。不过好像不能再选择在虚拟机里面装Xen了……

安装完成以后,在/etc/xen目录下,会产生类似 system1这样的目录,里面就是这个虚拟机的配置文件。通过观察配置文件,比如我这里的system1这个文件,就会发现其实里面记录的就是一些虚拟机的信息,比如硬盘在哪,网卡用什么mac地址,cpu,机器名等。

常用的命令:
xm list 查看当前机器里的全部虚拟机列表
xm create xxxx 启动名字为xxx的虚拟机
xm shutdown xxxxm
reboot xxxxm
pause xxxxm
resuem xxx

需要管理登入的时候:xm console xxxx就可以像在本机一样操作虚拟机了,如果要退出到Domain-0,按住Ctrl+] 就行

硬盘不够可以添加,添加了以后不用重启,直接生效,和插u盘一个效果xm block-list xxxx 查看xxx虚拟机的可用硬盘设备xm block-attach xxx tap:aio:/xxxx.img xvdb w这里可以参照一下之前的/etc/xen下的配置文件,对于之前用dd生成的文件挂载,貌似就是用tap:aio:这样的形式,如果是vmware的 vmdk文件就写上vmdk(我只尝试了dd产生的文件的形式),xen支持好些个虚拟机的硬盘格式转化。剩下的在虚拟机里面就可以看到新硬盘,然后就和实体机一样操作就好了。

注意:
xm list 在XEN3.1 CENTOS HOST上没法显示所有的VM. 还是要自己到/etc/xen下面去看已经有的配置文件。

Monday, May 3, 2010

ACPI中ASL的简单介绍

ACPI中ASL的简单介绍

ACPI中ASL的简单介绍

ACPI(Advanced Configuration and Power Interface)中,一个特色是有自己专门的一个语言来编写ACPI的那些表。这个语言叫做:ASL(ACPI Source Language). ASL在经过编译器编译后,变成AML(ACPI Machine Language)。然后由OSPM(一般也就是OS)来执行。

AML是一种BYTECODE,类似JAVA BYTECODE。也就是说,他并不是直接在机器上执行的2进制代码,而是需要OS来解释后执行。这样做的好处是方便错误检查,减少由于代码没写好而带来 的负面影响。

本文主要介绍下ASL,并把他和其他常见的编程语言,比如C,C++,JAVA,PERL之类的进行对比。适合初学者。另外,作者本人也是刚刚学 ACPI, ASL,所以文中也许有不对的地方,欢迎大家指正。

在学ASL之前,我也学过一些编程语言,比如C,C++,JAVA,PERL之类。所以在开始学ASL的时候,有意无意的同这些以前学的语言进行比较。慢 慢的,我发现ASL同前面提的这些语言差别还是很大的。下面简要介绍下ASL的特性和差别。


1、ACPI NAMESPACE与一般的常量,变量的区别。
一般的编程语言中操作的是常量和变量。这些变量之间一般没啥关系,可以说是一堆平行(有序或者随机排列的)的内存地址而已。而在ACPI中,这个发生了明 显变化。ACPI引入了一个NAMESPACE的观念。也就是说所有的OBJECT之间是有等级关系的。类似一个文件或者注册表系统,各个ACPI OBJECT(类似常量)之间都存在于一个路径下面,其中的根目录就是以符号“\"来表示。然后上下级目录之间用 “.”来连接起来。

比如\_SB_. FOO.BAR 就表示根目录下的_SB_这个OBJECT下的FOO OBJECT下的BAR OBJECT.

因此,在ACPI中,很多操作都是作用在这个NAME SPACE 中的某个OBJECT上面。并由此引入了一系列相关概念。比如SCOPE。

为什么要这样设计呢?因为ACPI本身是一个针对性很强的规范,就是电源管理。因此把这些常用的OBJECT排列好,分类好。处理起来也方便。灵活性比一 般的编程语言差了,但是简单,并且能满足设计要求。


2、ASL中有大量的OPERATOR(操作符)。
基本上看一段ASL代码,其中操作符占掉了大部分。比如ASL中很多都是如下形式:Device(PCI0)。一般在小括号前面的都是操作符,也就是预先定义好的。这也是因为ASL本身的目的就很简单,所以 很多东西可以先定好。


参考资料:
ACPI SPEC 4.0, CHAPTER 5, 18.