X86实模式程序动态加载的流水账

本文探讨了程序加载过程中的重定位技术,包括如何获取加载程序的入口地址、段地址及偏移地址等内容,并讨论了单段或多段程序的处理方法。
一、加载程序

        被加载程序有个约定的头部,能够得到它足够的位置信息,而进行代码的重定位

        1.读取了加载的程序到内存后,怎么实现跳转?

        要得到它的入口地址跳转,那么就要得到它的段地址和偏移地址;

        2.那么加载的程序只有一个段很好办了

        在程序的开头声明它:代码的长度,偏移地址,段地址;偏移地址很好得到,关键是段地址的重新定义;

        在Nasm中 |section.段名称.start| 得到的的地址是相对于整个程序开头的地址,

        这个得到的第一个段的地址是0

       3.要是有多个段的定义怎么办?

        定义入口地址是必须的,还要把段的段地址,个数方便重定位

        4.多个段中标号的开始信息是相对于程序的开始的位置,而不是相对于段的位置,那么程序怎么识别哪?

        另一个定义语句是 |vstart=| 的意思是标号代表的便宜地址是从段开始的,而不是从程序开头偏移的

----------------------------------------------------------------------?

       |section.段名称.start| 代表的是段相对于程序开始的偏移地址还是段地址?

                                    标号代表的是偏移量

 

 

       

转载于:https://my.oschina.net/findurl/blog/182528

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值