c - 给定一个内存地址,我如何在 C 中打印位于该地址的字节?
问题描述
仍然是 C 的新手,我在网上找到的关于如何完成的不同事情让我感到困惑。
我将地址转换为无符号长值,以验证 /proc/self/maps 中的该地址是否存在某些内容。
验证后,我想打印该地址处的字节。
从我收集的内容来看,地址本身只是指向该字节的指针,因此我需要取消引用内存地址以获取该字节。
因此,如果我想将该字节打印为十六进制数字,则只需:
printf("%02x", *address)
任何输入将不胜感激。谢谢!
解决方案
printf("%02x", (unsigned)*(unsigned char*)the_address_as_an_integer_or_pointer);
解释:
如果要从地址中获取值,则需要指针类型。因此,您将其转换为指向 a 的指针char
。(严格的别名允许通过指向字符类型的指针获取任何值,其他指针类型受到更多限制)。转换为signed char *
会导致符号扩展(如果您想将值打印为 ,则不希望出现unsigned
)因此您转换为*unsigned char
. 然后你取消引用(*
)。这样的*(unsigned char*)address
has 类型,当通过of时unsigned char
被提升为。这通常适用于,但要完全满足标准,需要 an ,然后最终转换为。int
...
printf
"%x"
"%x"
unsigned
unsigned