gpt4 book ai didi

debugging - 当break(函数名)/break *(函数名)时gdb中断地址不同

转载 作者:行者123 更新时间:2023-12-02 23:38:59 25 4
gpt4 key购买 nike

#include <stdio.h>

int main(void){
int sum = 0;
sum += 0xabcd;
printf(“%x”, sum);
return 0;
}

这是我的代码,当我使用 gdb 时,我可以在break main/break *main 时找到不同的地址。

当我输入 disassemble main 时,它显示如下:

Dump of assembler code for function main:

0x080483c4 <+0>: push %ebp
0x080483c5 <+1>: mov %esp,%ebp
0x080483c7 <+3>: and $0xfffffff0,%esp
0x080483ca <+6>: sub $0x20,%esp
0x080483cd <+9>: movl $0x0,0x1c(%esp)
0x080483d5 <+17>:addl $0xabcd,0x1c(%esp)
0x080483dd <+25>:mov $0x80484c0,%eax
0x080483e2 <+30>:mov 0x1c(%esp),%edx
0x080483e6 <+34>:mov %edx,0x4(%esp)
0x080483ea <+38>:mov %eax,(%esp)
0x080483ed <+41>:call 0x80482f4 <printf@plt>
0x080483f2 <+46>:mov $0x0,%eax
0x080483f7 <+51>:leave
0x080483f8 <+52>:ret

End of assembler dump.

因此,当我输入 [break *main] 时,它会从 0x080483c4 开始,但输入 [break main] 时,它会从 0x080483cd 开始

为什么起始地址不同?

最佳答案

Why is the address different.

因为break函数break *addressnot the same thing (*address 指定在堆栈帧和参数设置之前函数第一条指令的地址)。

在第一种情况下,GDB 跳过函数序言(设置当前帧)。

关于debugging - 当break(函数名)/break *(函数名)时gdb中断地址不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12593638/

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