gpt4 book ai didi

c - gdb 跳转某些部分的汇编代码

转载 作者:行者123 更新时间:2023-12-03 22:32:26 25 4
gpt4 key购买 nike

我很难在汇编级别调试程序,因为 GDB 正在跳过代码的某些部分。代码是:

#include <stdio.h>
#define BUF_SIZE 8

void getInput(){
char buf[BUF_SIZE];
gets(buf);
puts(buf);
}

int main(int argc, char* argv){
printf("Digite alguma coisa, tamanho do buffer eh: %d\n", BUF_SIZE);

getInput();
return 0;
}

程序是用 gcc -ggdb -fno-stack-protector -mpreferred-stack-boundary=4 -o exploit1 exploit1.c 编译的
在 gdb 中,我添加了 break getInput当我跑 disas getInput它返回给我:
Dump of assembler code for function getInput:
0x00000000004005cc <+0>: push %rbp
0x00000000004005cd <+1>: mov %rsp,%rbp
0x00000000004005d0 <+4>: sub $0x10,%rsp
0x00000000004005d4 <+8>: lea -0x10(%rbp),%rax
0x00000000004005d8 <+12>: mov %rax,%rdi
0x00000000004005db <+15>: mov $0x0,%eax
0x00000000004005e0 <+20>: callq 0x4004a0 <gets@plt>
0x00000000004005e5 <+25>: lea -0x10(%rbp),%rax
0x00000000004005e9 <+29>: mov %rax,%rdi
0x00000000004005ec <+32>: callq 0x400470 <puts@plt>
0x00000000004005f1 <+37>: nop
0x00000000004005f2 <+38>: leaveq
0x00000000004005f3 <+39>: retq

如果我输入 run我注意到程序停在 0x00000000004005d4 行而不是在函数的第一行 0x00000000004005cc正如我所料。为什么会这样?

顺便说一下 ,这让我很困惑,因为我注意到一些额外的数据被添加到堆栈中,我想逐步看到堆栈的增长。

最佳答案

If I type run I noticed that the program stops at the line 0x00000000004005d4 and not in the first line of the function 0x00000000004005cc as I expected.



你的期望是错误的。

Why is this happening?



因为当你通过 break getInput 设置断点时, GDB 在函数 prolog 之后设置断点。来自 documentation :
-function function
The value specifies the name of a function. Operations on function locations
unmodified by other options (such as -label or -line) refer to the line that
begins the body of the function. In C, for example, this is the line with the
open brace.

如果要在第一条指令上设置断点,请使用 break *getInput反而。

文档 herehere .

关于c - gdb 跳转某些部分的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058134/

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