c - assembly 十六进制转储

标签 c assembly x86

我正在尝试学习 x86 汇编中的调试并尝试调试我的简单 C 程序。但是,我对内存中存储的值(如字符串)有多大感到困惑。例如,假设我将字符串 VEQ9SZ9T8I62ZCIWE6RKZDE6AZSI2 存储在寄存器 EBX 的地址 0012E965 中,然后查看该地址的十六进制转储,我怎么知道它在哪里结束?假设我没有在那个位置存储一个好的 ASCII 字符串,我怎么知道那个特定地址的十六进制转储在哪里结束?如您所见,我是一个汇编新手,所以我感谢大家的耐心和帮助。

最佳答案

这主要是一个解释问题。解释字符串(或内存中的任何数据)的方式(毫不奇怪)由一些解释它的代码定义。仅通过查看十六进制数据转储,您无法说出使用了哪种方法来创建字符串,但很可能使用了通用方法。以 null 结尾的字符串很容易被尾零识别,一些字符串可能以字节或字符的长度为前缀。也有可能大小没有编码在数据内存中,而是作为立即值放入程序中。

关于c - assembly 十六进制转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571744/

相关文章:

c - dtruss 与 DYLD_BIND_AT_LAUNCH 和 sshfs 在 OSX 10.9 中安装?

c - 汇编:对已排序字符串数组进行二进制搜索

linux - 在 x86 (32bit) Linux 上启动 x86_64 代码,在 x86_64 CPU 上运行

c - 了解Linux中的膜垒函数

c - 为什么 libcurl 在调用 curl_easy_perform() 时出现段错误?

c - 传递数据时隐藏实现细节

c - 如何获取物体变换后的新坐标?

assembly - 当您使用内存覆盖前缀但所有操作数都是寄存器时会发生什么?

c - x86 内联汇编标志

assembly - 为什么奔腾汇编指令越多花费的时间就越少?