Articles of 内存地址

文件名已被加载的地址缺失

我有以下示例代码 #include<stdio.h> int main() { int num1, num2; printf("Enter two numbers\n"); scanf("%d",&num1); scanf("%d",&num2); int i; for(i = 0; i < num2; i++) num1 = num1 + num1; printf("Result is %d \n",num1); return 0; } 我用-g选项编译了这个代码给gcc。 gcc -g file.c 生成单独的符号文件 objcopy –only-keep-debug a.out a.out.sym 从a.out中删除符号 strip -s a.out 在gdb中加载这个a.out gdb a.out gdb说“没有finddebugging信息”很好。 然后我在gdb中使用add-symbol-file命令 (gdb) add-symbol-file a.out.debug […]

禁用内存地址的随机化

我试图debugging一个使用了很多指针的二进制文件。 有时,为了快速查看输出以找出错误,我打印出对象的地址及其相应的值,但是对象地址是随机的,这就违反了快速检查的目的。 有没有一种方法来暂时/永久禁用此function,以便每次运行该程序时都能得到相同的值。 哎呀。 OS是Linux fsttcs1 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 23:42:43 UTC 2011 x86_64 GNU/Linux

如何在Linux中解码/ proc / pid / pagemap条目?

我正在试图破译如何使用/ proc / pid / pagemap来获取给定页面的物理地址。 假设从/ proc / pid / maps中,我得到对应于堆的虚拟地址afa2d000-afa42000。 我的问题是如何使用这个信息来遍历页面地图文件,并find物理页面框架对应的地址afa2d000-afa42000。 / proc / pid / pagemap条目是二进制格式。 有没有什么工具来帮助parsing这个文件?

为什么Windows为其系统地址空间预留1Gb(或2 Gb)?

众所周知,Windows应用程序通常在32位系统上拥有2Gb的专用地址空间。 这个空间可以通过/ 3Gb开关扩展到3Gb。 操作系统保留其余的4Gb。 我的问题是为什么? 以内核模式(即设备驱动程序代码)运行的代码有自己的地址空间。 为什么在独占的4Gb地址空间之上,操作系统仍然要保留2Gb的每个用户模式进程? 我认为原因是用户模式和内核模式调用之间的转换。 例如,对NtWriteFile的调用将需要一个内核调度例程的地址(因此为什么系统在每个应用程序中预留2Gb)。 但是,使用SYSENTER ,是不是足够的内核模式代码知道哪个函数/服务被调用的系统服务号? 如果您可以向我澄清,为什么操作系统在每个用户模式进程中占用2Gb(或1Gb)是如此重要。

从用户空间访问物理地址

在运行Linux的基于ARM的系统上,我有一个内存映射到物理地址的设备。 从所有地址都是虚拟的用户空间程序,我如何从这个地址读取内容?