IDA连接GDBSERVER远程调试QEMU虚拟WINDOWS

QEMU本身带有GDB SERVER功能,可以调试GUEST系统,此方法比较适用于GUEST系统为LINUX或GUEST系统为WINDOWS但未开调试功能的情况。

开启QEMU里的GDBSERVER

不同的管理工具启动方式不同,可以运行时加启动参数,或运行时开启:

# qm monitor 7993449837980
qm> gdbserver
Waiting for gdb connection on device 'tcp::1234'

确保用于调试的WINDOWS机与虚拟机所在的宿主机可访问

例如,LINUX HOST关闭防火墙:

# /sf/etc/init.d/fw.sh stop

连接到卡死的GUEST机

通过虚拟机所在宿主机开启的GDBSERVER

继续阅读

LINUX高精度定时器实现分析

hrtimer,是High-resolution kernel timers的缩写,从字面意思就知道,这是一个高精度内核timer。

HRTIMER用法示例

先调用hrtimer_init初始化,然后设置function回调,例如,此处设置回调为coalesced_timer_fn。

设置超时时间,设置一个超时的ABS时间,超时时间设置了,并不代表timer已经运行,还必须将其加入active队列,start系列函数就做此事。

继续阅读

基本时钟设备概念

时钟事件设备(clock-event device)

系统中可以触发 one-shot(单次)或者周期性中断的设备都可以作为时钟事件设备。如 HPET,CPU Local APIC Timer 等。

如下为常用时钟事件设备(HPET在时钟源里一并介绍):

Local APIC (local advanced programmable interrupt controller timers)

counter: 32-bit
是时钟事件设备,其rating为100。
频率:软件没有一个靠谱的方法去探测其频率,一般来说,我们可以通过PIT或RTC来帮助探测其频率,但是,这只是个估值。
省电模式是否影响: 处理器在某些电源管理情况下会暂停

是现代PC中的中断分发逻辑单元,在多处理器的系统,每个CPU就有一个Local APIC,一般被集成到处理器芯片内部,包含了一个时钟设备,有一个32-bit的counter和counter输入寄存器,比起PIT或RTC来说,他具有更精细的粒度(more finely grained)
和能存储更大的counterbit值(因为它有32-bit),但是精度还是较低。 继续阅读