所以我有一些简单的 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/