在运行时,我需要打印一个地址,然后找到该地址所属的功能.这些函数位于共享库中,因此不在固定地址.我的地图文件显然只显示每个共享库func的相对偏移量.是否有可能在运行时查询已加载库的位置,以便我可以从我的地址中减去该值以获得正确的映射文件偏移量?
目前我正在做一个有点hacky的approch,我也打印出库中一个函数的地址,然后在map文件中找到该函数来确定加载地址必须在哪里.我宁愿有一个通用的方法,不要求你命名一个引用函数.
(GDB在我的设置中不可用).谢谢.
我希望这个问题措辞得足以让人理解.
我理解主存储器(RAM)和端口I/O驱动的I/O,它有自己的地址空间,像IN,OUT这样的指令使用.
如果要编写一个实模式汇编程序,开发人员是否需要获得必要的文档,说明主板上特定插槽的地址范围是在哪个地址范围内?假设PCIe插槽是地址X,打印机Y.
地址是否为标准地址范围,具体取决于总线类型?
我可以阅读什么来更好地理解这一点?希望有人能提供帮助.谢谢.
〜编辑
参考PC系统.
我有一个char数组,我需要获取每个元素的地址.
cout << &charArray
Run Code Online (Sandbox Code Playgroud)
给我一个有效的地址,但是如果我试图获取特定元素的地址,它会吐出垃圾:
cout << &charArray[0]
Run Code Online (Sandbox Code Playgroud) 我有一个练习,我无法解决它,我有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.这是正确的吗?那我该怎么办?我在互联网上搜索过我没有找到一个例子
请帮忙
采取这样一个简单的程序:
int main(void)
{
char p;
char *q;
q = &p;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何&p确定?编译器是在事先计算所有这样的引用还是在运行时完成?如果在运行时,是否有一些变量表或某些东西,它看起来像这些东西?操作系统是否跟踪它们,它只是询问操作系统?
我的问题在正确解释的背景下甚至可能没有意义,所以请随意让我直截了当.
逻辑地址的目的是什么?CPU为什么要生成逻辑地址?它可以直接访问可重定位的寄存器基地址并限制执行进程.MMU为什么要在逻辑地址和物理地址之间进行映射?
在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) 如果我有以下声明:
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
如果一个int以 4 个字节存储在内存中,如果每个字节都有一个唯一的地址,那么这四个地址中的哪个地址是指向该int存储的指针?