标签: memory-address

在Linux中查找共享库的加载地址

在运行时,我需要打印一个地址,然后找到该地址所属的功能.这些函数位于共享库中,因此不在固定地址.我的地图文件显然只显示每个共享库func的相对偏移量.是否有可能在运行时查询已加载库的位置,以便我可以从我的地址中减去该值以获得正确的映射文件偏移量?

目前我正在做一个有点hacky的approch,我也打印出库中一个函数的地址,然后在map文件中找到该函数来确定加载地址必须在哪里.我宁愿有一个通用的方法,不要求你命名一个引用函数.

(GDB在我的设置中不可用).谢谢.

linux load shared memory-address

8
推荐指数
2
解决办法
8300
查看次数

I/O地址空间如何映射到设备?

我希望这个问题措辞得足以让人理解.

我理解主存储器(RAM)和端口I/O驱动的I/O,它有自己的地址空间,像IN,OUT这样的指令使用.

如果要编写一个实模式汇编程序,开发人员是否需要获得必要的文档,说明主板上特定插槽的地址范围是在哪个地址范围内?假设PCIe插槽是地址X,打印机Y.

地址是否为标准地址范围,具体取决于总线类型?

我可以阅读什么来更好地理解这一点?希望有人能提供帮助.谢谢.

〜编辑

参考PC系统.

architecture io cpu assembly memory-address

8
推荐指数
1
解决办法
6445
查看次数

如何获取char数组中元素的地址?

我有一个char数组,我需要获取每个元素的地址.

cout << &charArray
Run Code Online (Sandbox Code Playgroud)

给我一个有效的地址,但是如果我试图获取特定元素的地址,它会吐出垃圾:

cout << &charArray[0]
Run Code Online (Sandbox Code Playgroud)

c++ arrays char memory-address

8
推荐指数
1
解决办法
3466
查看次数

给定一个地址范围如何计算内存大小?

我有一个练习,我无法解决它,我有3个内存范围:

      First @      Last @ 
Run Code Online (Sandbox Code Playgroud)

range1:FD00 0000到FDFF FFFF

range2:D000 0000到DFFF FFFF

range3:FA00 0000到FBFF FFFF

问题是:给出每个范围(兆字节)的内存大小?

我所知道的是我应该计算范围的大小=最后一个地址 - 第一个地址所以第一个范围的结果是:00FF FFFF.这是正确的吗?那我该怎么办?我在互联网上搜索过我没有找到一个例子

请帮忙

hex memory-address

8
推荐指数
1
解决办法
7万
查看次数

指针如何在C"引擎盖下"工作?

采取这样一个简单的程序:

int main(void)
{
    char p;
    char *q;

    q = &p;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何&p确定?编译器是在事先计算所有这样的引用还是在运行时完成?如果在运行时,是否有一些变量表或某些东西,它看起来像这些东西?操作系统是否跟踪它们,它只是询问操作系统?

我的问题在正确解释的背景下甚至可能没有意义,所以请随意让我直截了当.

c pointers memory-address

8
推荐指数
2
解决办法
795
查看次数

逻辑地址的目的?

逻辑地址的目的是什么?CPU为什么要生成逻辑地址?它可以直接访问可重定位的寄存器基地址并限制执行进程.MMU为什么要在逻辑地址和物理地址之间进行映射?

memory memory-address

8
推荐指数
2
解决办法
3459
查看次数

内存地址c中的正值或负值?

在c中,我试图打印出变量的地址和某些功能的地址.我得到一个是负值,另一个是正值.我的问题是:为什么C不代表所有负面或全部正值?

这是我的代码:

int foo() { 
     return 0;
}

int main() {

    int a;
    printf("%d\n",&a);

    printf("%d\n",foo);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

-1075908992 134513684
Run Code Online (Sandbox Code Playgroud)

c memory-address

7
推荐指数
3
解决办法
1万
查看次数

C++ - 使用"new"在堆上分配内存

如果我有以下声明:

int *x = new int;

在这种情况下,我已动态地在堆上分配内存.换句话说,我现在有reserved一个int对象的内存地址.

在那之后说我做了以下:

delete x;

这意味着我freed up在堆上的内存地址.

在那之后说我再次做了以下事情:

int *x = new int;

x指向它指出,在堆旧的内存地址被删除之前?

如果我这样做过delete:

x = NULL;

然后,这样做:

int *x = new int;

x指向堆上AA内存地址较旧的?

谢谢.

c++ heap new-operator memory-address dynamic-memory-allocation

7
推荐指数
2
解决办法
7866
查看次数

有没有办法获得寄存器的地址?

有没有办法获得寄存器的地址?例如,eax寄存器的地址(不是它的内容).

x86 assembly memory-address

7
推荐指数
2
解决办法
6241
查看次数

C/C++ 中的指针实际上是如何存储地址的?

如果一个int以 4 个字节存储在内存中,如果每个字节都有一个唯一的地址,那么这四个地址中的哪个地址是指向该int存储的指针?

c c++ memory pointers memory-address

7
推荐指数
1
解决办法
399
查看次数