首页 > *nix技术 > 汇编硬编码触发中断

汇编硬编码触发中断

2012年6月16日 发表评论 阅读评论 7,160 次浏览

Intel cpu中断是一些非常有意思的玩意,比如对于3号中断,很多内核调试机制像kprobe、kgdb就利用了它,而这在3号中断的内核处理函数do_int3内可以看到一些端倪。
怎样去主动触发这些中断呢?可以使用int指令,以下代码触发3号中断:

#include <stdio.h>

void interrupt(void) {
        __asm__ __volatile__("int $3":);
}

int main() {
        interrupt();
        return 0;
}

别忘了给立即数加上美元符号,否则AT&T提示:
code.c:4: Error: suffix or operands invalid for `int’
编译执行:

[root@localhost lenky]# gcc code.c -o code
[root@localhost lenky]# ./code
Trace/breakpoint trap (core dumped)
[root@localhost lenky]#

还可以进行硬编码触发中断,中断的硬编码字符如下表所示:

Code Mnemonic Description
CC INT 3 Interrupt 3 – trap to debugger
CD ib INT imm8 Interrupt vector number specified by immediate byte
CE INTO Interrupt 4 – if overflow flag is 1

因此,触发3号中断的代码还可以这样写:

[root@localhost lenky]# cat int3_1.c 
#include <stdio.h>

void interrupt(void) {
	__asm__ __volatile__(".byte 0xcc":);
}

int main() {
	interrupt();
	return 0;
}
[root@localhost lenky]# cat int3_2.c 
#include <stdio.h>

void interrupt(void) {
	__asm__ __volatile__(".byte 0xcd, 0x03":);
}

int main() {
	interrupt();
	return 0;
}
[root@localhost lenky]# gcc int3_1.c -o int3_1
[root@localhost lenky]# gcc int3_2.c -o int3_2
[root@localhost lenky]# ./int3_1
Trace/breakpoint trap (core dumped)
[root@localhost lenky]# ./int3_2
Trace/breakpoint trap (core dumped)
[root@localhost lenky]# 

转载请保留地址:http://www.lenky.info/archives/2012/06/1729http://lenky.info/?p=1729


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

分类: *nix技术 标签: , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.