内存位置的十六进制转储

3

我使用指针来指定某种“共享内存”,用于在不同的进程/线程之间交换数据。现在我想要获得共享缓冲区内容的十六进制转储。有人知道如何做吗?

谢谢, R


1
你是在询问如何编写一个通用的十六进制转储函数吗? - anon
粗略地说,我这么认为;)。基本上,我想知道如何在不知道它们的类型的情况下输出特定内存位置的内容。 - Robert
2个回答

14

当然要使用强制类型转换 :-) 函数应该长这样:

void Dump( const void * mem, unsigned int n ) {
  const char * p = reinterpret_cast< const char *>( mem );
  for ( unsigned int i = 0; i < n; i++ ) {
     std::cout << hex << int(p[i]) << " ";
  }
  std::cout << std::endl;
}

然后在使用中:

Foo * f = GetSharedFoo();
Dump( f, somesize );

somesize是您想要转储的大小。


1
刚刚翻看了我的工具箱。我的也将 std::setw(2) << std::setfill( os.widen('0') ) 插入到流中。但这可能是因为我用任何字符宽度写入流的缘故。 - sbi
是的,设置宽度和填充是个好主意,但在这里已经讨论过几次了 - 我正在专注于被转储的事物的转换。 - anon
5
值得一提的是,为避免在后续的整数转换中将 ff 值扩展为 ffffffff,您可能应该强制转换为 const unsigned char* - Rawler

0
在Windows上,您可以使用 ReadProcessMemory。我不知道Linux的等效命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接