c - 反汇编 C 代码并检查堆栈

标签 c memory gdb

所以我有一些简单的 C 代码来创建大小为 512 字节的缓冲区:

 #include <sys/types.h>
 #include <netinet/in.h>

 #include <stdio.h>
 #include <ctype.h>

 main(argc, argv)
      char *argv[];
 {
    char line[512];
    gets(line);
 }

这是否意味着为该缓冲区分配了 512 个字节? GDB 中有没有一种方法可以反汇编编译后的二进制文件,我们可以看到类似的内容

  • 堆栈和返回地址之间的距离
  • 什么参数被传递给“gets()”函数……例如地址?

我尝试使用 GDB 逐步完成此操作,但找不到检查此类内容的方法

最佳答案

您可以查看“strace”命令行工具。它将列出所有内部系统调用和相应的参数。它还可以让您了解分配了多少内存。

请注意,您应该谨慎使用 gets,因为它不会检查缓冲区溢出。

来自手册页:

gets() 从 stdin 读取一行到 s 指向的缓冲区,直到出现终止换行符或 EOF, 替换为‘\0’。不执行缓冲区溢出检查(请参阅下面的错误)。

关于c - 反汇编 C 代码并检查堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55746178/

相关文章:

c - 奇怪的文件输出套接字文件传输

c - 为结构体中的字符数组赋值

c - OCI中如何获取sql_id

c - 将指针内存分配从 main() 移动到函数并在其他函数中使用指针

Swift 显式与推断类型 : Memory Efficiency

ios - Objective C 内存布局 : Meaning of the highest 2 bits of a 64bit pointer?

c++ - gdb 在单例的静态方法中没有显示 '' 这个''?

objective-c - C 和 Objective C 之间的主要区别是什么。C 中可以进行抽象吗?

debugging - 如何使用 gdb 转储 ARM 协处理器寄存器?

c++ - 从核心转储中获取正在使用的内存