你能翻译堆栈数据吗?数据是什么?

你能翻译堆栈数据吗?数据是什么?

我想知道的是堆栈中的数据是如何翻译的。我们可以看到这样的数据:0x80808080,但是它有什么意义吗?数字的哪些部分代表不同的东西? “0x”代表什么?

我想知道的主要事情是数据是如何组织的。我知道推送和弹出的工作原理,但我不完全理解以下内容:

(gdb) x/300wx 0xbffff155
0xbffff155: 0x80808080 0x80808080
0xbffff355: 0x80808080 0x80808080

每个部分的含义是什么? ^ 我知道 r=4 w=2 x=1 & -=0

答案1

0x是以十六进制(即以 16 为基数)书写的数字的一个非常常见的前缀。

x是一个GDB命令显示内存的一部分内容。后面的数字和字母/表示要打印的内容:300 个单词 ( w),十六进制 ( x)。之后的数字是开始打印的地址。

“r=4 w=2 x=1”是关于 Unix 文件权限的数字和符号表示,与此完全无关。

打印进程内存的随机部分不会产生任何有用的数据。如果您有源代码和使用调试符号构建的二进制文件,调试器也许能够告诉您程序中每个变量的存储地址;这提供了有关堆栈上数据的信息,但不提供有关动态分配的内存的信息。如果你没有源代码,那么你就是在进行逆向工程,这比调试要复杂得多。

意义数据的含义,即变量中的数据代表什么,不是计算机可以告诉您的。

一般来说,理解调试器显示的数据需要一些编程经验。这些数据的含义完全取决于程序,没有任何一般性考虑。如果不深入研究具体的程序及其编译方式,它只是一堆数字。

相关内容