Re: 执行和完成调用BTS的代码是属于系统或者CPU的哪一部分呢?可以调试吗?

《软件调试》的示例程序

执行和完成调用BTS的代码是属于系统或者CPU的哪一部分呢?可以调试吗?


microbe0821 2010-05-19, 22:14 下午
前面问的CpuWhere无法获取到数据的问题,没有人回答,所以我想实际调试一下,看看为什么BTS没有起作用,请问完成BTS功能的代码应该是哪一部分,,是CPU的微码么?我怎么样才能调试它们啊?
非常感谢!

Re: 执行和完成调用BTS的代码是属于系统或者CPU的哪一部分呢?可以调试吗?


格蠹老雷 2010-05-20, 12:55 下午
 BTS是通过MSR寄存器来启用的,代码在EnableBTS函数中,最近有些忙,我今晚找时间试一下你说的问题

Re: 执行和完成调用BTS的代码是属于系统或者CPU的哪一部分呢?可以调试吗?


格蠹老雷 2010-05-20, 22:55 下午

原因是CPU对BTS记录的大小做了调整。

typedef struct tagBtsRecord
{
 DWORD dwFrom;
 DWORD dwTo;
 DWORD dwFlags;
} BtsRecord, *PBtsRecord;

Pentium M和P4时,这个结构在32位模式时每个字段都是32位的,64位时各个字段都是64位的。

但是后来的CPU统一使用64位了,不管是否工作在32位模式还是64位模式。

也就是说,需要把上面的结构扩展成64位。可以通过cpuid指令来检查CPU的这种特征:

以EAX=1执行CPUID指令,然后判断ECX寄存器的bit 2,即DTES64位:

64-bit DS Area. A value of 1 indicates the processor supports DS
area using 64-bit layout

 

 

Re: 执行和完成调用BTS的代码是属于系统或者CPU的哪一部分呢?可以调试吗?


microbe0821 2010-05-24, 20:14 下午
好的,谢谢老师,我已经在试了。
老师这个是在Intel手册上看到的么?难道我看漏了?

是不是只有BTS_RECORD才是64位的,DEBUG_STORE是不是也要一并改成64位的哇?

Re: 执行和完成调用BTS的代码是属于系统或者CPU的哪一部分呢?可以调试吗?


格蠹老雷 2010-05-24, 20:43 下午

目前的手册说的不是很清楚,建议你看一下LINUX内核的源代码

Re: 执行和完成调用BTS的代码是属于系统或者CPU的哪一部分呢?可以调试吗?


microbe0821 2010-05-25, 22:03 下午

非常谢谢老师的回答,我已经搞定啦,呵呵!

参考以下地址的Linux源代码:http://lwn.net/Articles/259339/

64 bit DS Area,应该就是指DebugStore和BtsRecord都是64位的。

Powered by Community Server Powered by CnForums.Net