将无符号int地址视为指针,并将其解引用为字节数组
Treating an unsigned int address as a pointer and dereferencing it as a byte array
所以,我有一个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有点陌生,所以我不知道如何将无符号int视为地址/指针。其次,我不知道如何从地址中获得实际字节,每当我取消引用地址时,我得到的是它的实际值,但前提是我知道变量的类型。
一点背景:我正在开发一个名为Pin的工具,它让我可以选择挂接到正在运行的进程中,然后我使用DWARF和ELF信息。所以我确实可以访问我试图访问的虚拟内存空间
在中查看epatel的hexdump
函数
现成的C++十六进制转储代码
尽管标题是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");
}
}
"a"是要从中获取4个字节的地址。"字节"是您想要存储结果的位置。我将"I"的地址分配给"a",然后从该地址读取4个字节。
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned char bytes[4];
int i = 65535, j;
unsigned long a = (unsigned long) &i;
for (j = 0; j < 4; j++) {
bytes[j] = *((unsigned char*) a + j);
}
for (j = 0; j < 4; j++) {
printf("bytes[%d]: %dn", j, bytes[j]);
}
}
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 调用c++库时,如何在Python中使用ctypes传递字节作为引用
- 将无符号int地址视为指针,并将其解引用为字节数组
- 通过取消引用指向字节数组的指针来分配值是错误的吗?
- 为什么引用大小始终为 4 个字节 - C++
- 将16字节CAS与GCC一起使用时出现未定义的引用链接器错误
- 取消指针引用与字节移位
- C++引用字节数组
- 取消引用类型punned指针将打破严格的混叠规则:将字节数组转换为数字
- 从c#传递字节引用到非托管cppcom dll
- 为什么当分配给一个解引用的uint32_t指针时,uint8_t使用了4字节
- C++模板:字节/引用相互干扰