【发布时间】:2019-04-18 12:35:05
【问题描述】:
所以我有一些简单的 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 逐步执行此操作,但找不到检查此类内容的方法
【问题讨论】:
-
我不确定我是否完全理解你在问“堆栈和返回地址之间的距离” - 你可以让 gdb 打印一个函数的反汇编,例如
(gdb) disas /s main见@ 987654321@ -
我认为这里不需要 gdb。查看 objdump --disassemble 并查看 linux.die.net/man/1/objdump 。你可以在那里看到指令的汇编代码,你会看到堆栈将减少大约 512 字节的大小 - 如果不需要对齐。
-
C 中没有
gets函数。请扔掉任何教它的书。 -
@n.m 它似乎工作,所以也许坚持那些书
-
1970 年代打电话,他们想要回他们的 pre-ANSI C 代码。