0
我刚开始尝试了解linux内核,并试图找到IDTR的位置。它似乎像它应该是一个简单的过程,因为汇编语言提供lidt
指令为此目的。因此,我要觉得,我可以提供大到足以容纳该寄存器的内容作为输出操作数,像这样的结构:在内联汇编中读取非标准大小(IDTR)的寄存器(简单?)
struct idt_ptr
{
unsigned short limit;
unsigned long long base;
} __attribute__((packed));
struct idt_ptr idtp;
int * get_idt() {
__asm__
__volatile__(
"lidt %0;"
: "=&r"(idtp)
);
}
这不起作用的,当然。它导致
/var/folders/yb/ybzqw8850nz9lzjsc6jf9hkw0000gn/T//ccvNm3SA.s:11:suffix or operands invalid for `lidt'
我认为该结构的大小是正确的,short
应为段地址16位和偏移long long
64位。问题只是我不能使用结构作为输出目标?否则我会怎么做?此外,由于资源(对我的发现)一直稀缺,有谁能推荐一个关于这个主题的好教程或书籍吗?
谢谢。
谢谢,我知道这是简单的事情(我把盖茨和西德特混淆是有点尴尬)。很明显,我正在向后推进。谢谢你的帮助。 – fromClouds 2012-04-15 23:16:14