gpt4 book ai didi

debugging - 为什么 int 3 生成 64 位的 SIGSEGV 而不是停止调试器?

转载 作者:行者123 更新时间:2023-12-03 13:17:16 25 4
gpt4 key购买 nike

在 32 位模式编程中,我曾经使用 int 3在我的程序中,使用调试器在给定位置停止了很多(将指令嵌入源代码中)。现在在 64 位中它似乎无法正常工作,在 gdb 下生成一个非常普通的 SIGSEGV 并超出希望地破坏程序(“程序以信号 SIGSEGV 终止,段错误。
该程序不再存在。”)。我想知道 64 位模式是否有另一种机制,或者我是否应该做一些缓存刷新(int 3 在这种情况下是动态生成的操作码 (0xcc),有点类似于 jit代码)。

最佳答案

以下代码适用于 amd64 UNIX平台:

断点.c

int main() {
int i;
for(i=0; i<3;i++) {
__asm__("int3");
}
}

简单编译: gcc -c breakpoint.c并开始 gdb a.out :
(gdb) run
Starting program: /tmp/a.out

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00000000004004fb in main ()

你看,gdb 在断点处停止。

关于debugging - 为什么 int 3 生成 64 位的 SIGSEGV 而不是停止调试器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3634124/

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