python - 在 Python 中将 long 从寄存器转换为 char 数组

标签 python linux memory-management

我正在使用 Python 中的虚拟地址读取 64 位 Linux 机器上的内存寄存器。但是,我从每个寄存器输出的(当然)是一个长值,例如 282584257676671

我对一般的 PC 架构有点困惑,我有一些问题:

  • 为什么这个 long 值有 15 个位置(而不是 16 个?)
  • 那么 32 位架构中的 long 值是否有 7 个位置?
  • Linux 内存页 (4kb) 是 (4096/64) = 64 个寄存器的池吗?
  • Linux 内存页也有地址吗?
  • 最重要的是:我如何在 Python 中将这个 long 转换为字符串以及这个字符串有多长?

谢谢!

编辑:

这就是用 C 可以做的事情:

unsigned char dest[4];
unsigned long int l;
dest[0] = l         & 0xFF;
dest[1] = (l >>  8) & 0xFF;
dest[2] = (l >> 16) & 0xFF;
dest[3] = (l >> 24) & 0xFF;

我如何在 Python 中执行此操作,我的 char 数组在 64 位 arch 中的大小是否也为 4?还是 8 个?

最佳答案

是的,您可以在 python 中做基本相同的事情。

dest = [0] * 4
l = some_integer
dest[0] = l         & 0xFF
dest[1] = (l >>  8) & 0xFF
dest[2] = (l >> 16) & 0xFF
dest[3] = (l >> 24) & 0xFF

其他问题:

  • Why has this long value 15 positions (and not 16?)
  • Do the long values in a 32bit architecture have 7 positions then?

因为您在这里看到的数字没有用 0 填充,所以唯一的答案是它需要多长就多长!例如,如果内存地址是 42,当您以十进制打印时,它将是 2 位数字。

此外,您需要注意所谈论的基地。在十六进制中,64 位整数可以用 8 位或更少的数字表示,如 0xFFFFFFFF(每个字节两位数)。在十进制中,64 位整数可以用 20 位或更少的数字表示,例如 18446744073709551615

关于python - 在 Python 中将 long 从寄存器转换为 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789238/

相关文章:

memory-management - 段的静态重定位或静态重定位是什么意思

python - Django objects.all() 方法不返回任何数据

python - latex 故障 ipython daft matplotlib

python - 如何从 ASN1 语法解析对象类以在 pyasn1 中使用?

linux - AWS EC2 实例

java - 为什么 Java 应用程序在 Windows XP 32 和 Windows 7 64 中的内存使用有如此大的差异

python - 请求/响应中间件中的 Django 错误 - TypeError : __init__() takes 1 positional argument but 2 were given

c# - Linux 中的 SSL WebRequest

linux - 交叉编译后,如何更改make install的源目录名称?

c++ - 是否可以在其范围之外访问局部变量的内存?