首页
社区
课程
招聘
[求助]能有哪位大侠给我科普下程序入口点的知识?
发表于: 2015-4-16 16:24 3922

[求助]能有哪位大侠给我科普下程序入口点的知识?

2015-4-16 16:24
3922
对于程序入口点,我的理解还是很模糊啊!
我现在的理解是:程序被加载到内存中的开始的位置。不知道是不是这样?
还有就是main函数和入口点有什么关系呢?
再还有就是在程序中,我想获得本程序的入口点有没有可能?
谢谢各位关注问题。

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
获取本程序的入口点解析Pe结构获取入口点+PEB中的baseaddress就是入口点的地址。至于入口点只是编译的时候被写入到文件中,主线程运行后的开始位置。
2015-4-16 16:39
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
main函数你改变编译器的入口点配置以后想写什么都无所谓或者你自己写入PE结构都可以搞一个入口出来本身并没有特殊意义
2015-4-16 16:43
0
雪    币: 16451
活跃值: (1715)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
多多看视频 教程  看多了   练多了  就懂了。不实际动手练是永远 搞不明白的。
2015-4-16 17:26
0
雪    币: 62
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
首先需要了解何谓“程序”?举几个例子。在windows上,所有的exe、lib、dll等,均是PE格式文件,这些文件就是程序;在Linux下,所有的elf、a等,均是elf格式文件,这些文件也是程序;在单片机上,例如s、bin、hex等也可以是程序。
那么他们都有什么共同点及区别呢?
先说共同点。既然是程序,那么必须包含机器能识别的机器码,也就是经过编译器转化后的代码,当然,也可能会包含一些数据,例如你写的程序中有一些全局对象是有初值的,这些初值,也必须包含在你的程序中。
再说区别。这也是需要重点关注的地方。通常,一个程序只提供机器码及数据,程序加载器就无法知道程序从哪运行,也不知道程序中的资源(例如函数接口或对象)如何访问,所以,“程序”也需要提供一些对代码和数据的控制信息,用来告诉加载器相关信息,当然,这些控制信息是编译器和链接器根据你的指定帮你生成。不同格式的文件,收集的这些控制信息会不同,存储方式也不同。当然,也存在不带任何控制信息的“程序”,例如bin文件,这意味着加载器与bin已经事先商定好程序入口,单片机常常使用这一做法。
现在你的问题自然就得到解答。
程序入口点就是程序被加载到内存中的开始的位置吗?在PE/ELF中,通常不是,程序文本的开始,通常是程序控制信息,在单片机中,可能是,因为没有程序控制信息,那么最简单的协商方式就是默认程序文本的开始位置就是程序入口。当然也可能不是,因为加载器可能是通过中断加载的方式,这时,程序文本的开始,会是一个中断函数入口地址。
main函数和入口点有什么关系呢?通常这是你告诉编译器,main是你的代码入口点。编译器根据你的指定,在程序控制信息中,就会声明main是入口,加载器查询程序控制信息后,就知道跳到main去执行了。
再还有就是在程序中,我想获得本程序的入口点有没有可能?当然有可能,不过需要系统支持。加载器是能够清楚的知道你的每一个函数和变量地址的(只要你在控制信息中声明了这一点),加载器告知告知系统,你的程序通过调用系统的函数,就能找到自己。
2015-4-16 18:39
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢你解答得这么详细,我现在明白了。
2015-4-16 21:48
0
游客
登录 | 注册 方可回帖
返回
//