首页
社区
课程
招聘
[讨论]关于函数名和内存地址对应关系
发表于: 2016-10-13 09:54 5576

[讨论]关于函数名和内存地址对应关系

2016-10-13 09:54
5576
在编译系统看来,你程序中的函数名、变量名、标号都是一个代号,对应一个地址,就如同指针一样。编译程序在程序中发现你使用函数名时,就会相应替换使用函数名的地方用这个地址。

以上是百度搜索出来的答案,这和我们平时的理解差不多..编译后在汇编里面调用的就是纯粹内存地址了之间的调用和我们定义的变量名函数名就没关系了

然后想起,如编译好了的DLL,里面的函数名和变量应该都变成了内存地址,可是其他程序调用的时候可以根据函数名调用.那么在里面某个角落肯定有函数名和函数地址的对应..请教大神这个地址和名称的对应在什么地方

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2143
活跃值: (720)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
导 出 表
2016-10-13 12:08
0
雪    币: 102
活跃值: (142)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
函数导出表
2016-10-13 12:36
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
你提问的答案楼上已经说了  
不过你所认为编译程序所做的事    都是WINDOWS做的
2016-10-13 13:31
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
不同意4楼的说法,对于编译型语言来说,这还真就是编译器干的事
只不过,在Win平台上,不管你用哪家的编译器,生成的目标是按照微软制定的PE格式生成的
在Linux平台上,那就是ELF格式了
如此而已
2016-10-13 15:50
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
4楼仅个人理解    可能有误导      但那个更接近实际   楼主自己领悟。
2016-10-13 17:39
0
雪    币: 126
活跃值: (169)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
前面你说的编译器按函数名对应函数地址,这个在编译技术中叫做符号表,符号表记录了函数,变量,类型等各种信息。
后面你说的加载DLL的时候根据函数名找到函数地址,这个叫导出函数表。DLL在加载的时候配合重定位表根据DLL在内存中加载的位置,修正函数名对应的函数地址。

另外有一些语言,例如Delphi,Java,C#这种具有运行时信息(RTTI)可以在运行的时候得到函数变量类型等各种信息,是因为他们把编译阶段的部分符号表保存到目标文件中。
2016-11-9 17:03
0
雪    币: 256
活跃值: (25)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
建议楼主看看PE文件格式,DLL、EXE文件都属于这种格式。里面讲到的导出表可能对你有用
2016-11-15 12:52
0
游客
登录 | 注册 方可回帖
返回
//