c++ - 将无符号的int地址视为指针,并将其解引用为字节数组

标签 c++ c pointers byte memory-address

所以,我有一个unsigned int变量,上面存储着一个十进制值地址,比如说unsigned int var = 1232342,我想做的是在不知道变量的类型的情况下,但是知道变量的大小和存储它的地址,以byte array的形式获取值。例如,假设我有一个int var = 20及其地址和字节大小。我希望能够转到该地址并返回一个字节数组,在这种情况下,[00001100]char变量和结构的数据成员相同。

一点伪代码将类似于:

for var.address until var.address = var.address + bytesize
    do 
       byte_array = *var.address
       var.address++ 

我遇到了一些问题,但是我对C有点陌生,所以我不知道如何将unsigned int视为地址/指针。其次,每当我取消引用该地址时,我都不知道如何从该地址中获取实际的字节,但这是我知道变量的类型的情况。

背景:我正在使用一个名为Pin的工具,该工具使我可以选择挂接到正在运行的进程,然后使用DWARF和ELF信息。所以我确实有权访问我要访问的虚拟内存空间

最佳答案

在这里看看epatelhexdump函数

Off-the-Shelf C++ Hex Dump Code

尽管有标题,但实际上是C代码。为了方便起见,我会在这里复制

#include <ctype.h>
#include <stdio.h>

void hexdump(void *ptr, int buflen) {
  unsigned char *buf = (unsigned char*)ptr;
  int i, j;
  for (i=0; i<buflen; i+=16) {
    printf("%06x: ", i);
    for (j=0; j<16; j++) 
      if (i+j < buflen)
        printf("%02x ", buf[i+j]);
      else
        printf("   ");
    printf(" ");
    for (j=0; j<16; j++) 
      if (i+j < buflen)
        printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
    printf("\n");
  }
}

关于c++ - 将无符号的int地址视为指针,并将其解引用为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12611311/

相关文章:

c - Socket select() 时间切换?

c++ - 链表函数有问题

c++ - Qt 模型 View 编程。 QAbstractItemModel 和 QAbstractListModel。索引()和父级()

c - 如何将文件中的行存储到动态数组中并打印?

c++ - 警告信息的目的?

c - PingPong 由 1 个管道和 1 个信号 : what is scanf waiting for?

c - 你如何清除 C 中的字符串 vector ?

python - 比较 Python 中的 C 指针

c++ - 如何查找目标文件 *.o 的 ram rom 使用情况(.bss .text .rodata .data)?

c++ - 这个指针操作是如何工作的?