我正在尝试学习 x86 汇编中的调试并尝试调试我的简单 C 程序。但是,我对内存中存储的值(如字符串)有多大感到困惑。例如,假设我将字符串 VEQ9SZ9T8I62ZCIWE6RKZDE6AZSI2 存储在寄存器 EBX 的地址 0012E965 中,然后查看该地址的十六进制转储,我怎么知道它在哪里结束?假设我没有在那个位置存储一个好的 ASCII 字符串,我怎么知道那个特定地址的十六进制转储在哪里结束?如您所见,我是一个汇编新手,所以我感谢大家的耐心和帮助。
最佳答案
这主要是一个解释问题。解释字符串(或内存中的任何数据)的方式(毫不奇怪)由一些解释它的代码定义。仅通过查看十六进制数据转储,您无法说出使用了哪种方法来创建字符串,但很可能使用了通用方法。以 null 结尾的字符串很容易被尾零识别,一些字符串可能以字节或字符的长度为前缀。也有可能大小没有编码在数据内存中,而是作为立即值放入程序中。
关于c - assembly 十六进制转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571744/