gpt4 book ai didi

linux - x86 Linux IDT Hook

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:01 26 4
gpt4 key购买 nike

我正在 Hook 我的 x86 linux 内核的 IDT 条目。更具体地说,我连接了第 0x80 个 IDT 条目,它是系统调用中断处理程序。

如果我如下设置 Hook 处理函数,一切都会顺利

void my_handler(){
asm("leave\n"); // clean up stack
asm("push $0xc0504020\n"); push original handler's address
asm("ret\n");
}

但是,如果我添加类似 printk()、current->pid...的东西

void my_handler(){
printk("pid : %d\n", current->pid);
asm("leave\n"); // clean up stack
asm("push $0xc0504020\n"); push original handler's address
asm("ret\n");
}

一切都卡住了。我认为这是因为我没有正确设置 fs 或 gs 段寄存器...但我不知道如何正确设置它。有人可以给我建议吗?

提前致谢。

最佳答案

不仅仅是FS和GS。

您应该用汇编语言而不是 C 语言来编写整个例程!

您必须注意在进入原始系统调用向量之前存储和恢复所有寄存器。否则 "printk"将修改(破坏!)EAX...

关于 DS、ES、FS 和 GS 的正确值,您应该查看 Linux 的源代码。据我所知不是FS和GS有问题,而是DS和ES的值必须适配!

关于linux - x86 Linux IDT Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19403490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com