首页 > 解决方案 > 给定一个内存地址,我如何在 C 中打印位于该地址的字节?

问题描述

仍然是 C 的新手,我在网上找到的关于如何完成的不同事情让我感到困惑。

我将地址转换为无符号长值,以验证 /proc/self/maps 中的该地址是否存在某些内容。

验证后,我想打印该地址处的字节。

从我收集的内容来看,地址本身只是指向该字节的指针,因此我需要取消引用内存地址以获取该字节。

因此,如果我想将该字节打印为十六进制数字,则只需:

printf("%02x", *address)

任何输入将不胜感激。谢谢!

标签: c

解决方案


printf("%02x", (unsigned)*(unsigned char*)the_address_as_an_integer_or_pointer);

解释:

如果要从地址中获取值,则需要指针类型。因此,您将其转换为指向 a 的指针char。(严格的别名允许通过指向字符类型的指针获取任何值,其他指针类型受到更多限制)。转换为signed char *会导致符号扩展(如果您想将值打印为 ,则不希望出现unsigned)因此您转换为*unsigned char. 然后你取消引用(*)。这样的*(unsigned char*)addresshas 类型,当通过of时unsigned char被提升为。这通常适用于,但要完全满足标准,需要 an ,然后最终转换为。int...printf"%x""%x"unsignedunsigned


推荐阅读