鱼C论坛

 找回密码
 立即注册
查看: 5157|回复: 9

[已解决]程序入口问题

[复制链接]
发表于 2021-3-11 13:53:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
end start

start 就是入口  cs:ip指向 入口执行第一条命令没问题

请问cs在哪呢
比如 
assume  cs:code
code segment 
dw   xxx(数据)

start:

xxx

code ends
end start


cs:ip指向start ,而这时想访问数据 就用cs:[idata]

是不是 cs就指向code,code的值就是cs的值呢
我的理解是:

入口被设定 系统就知道是代码段  code就自动是 cs(段地址)  然后通过ip跳过数据指向入口
不用人为的
mov ax,code     
mov cs,ax  
  而想其他段名 指向段寄存器  就必须用汇编指令完成 不能像cs一样自动指向
这样理解对嘛

最佳答案
2021-3-11 14:39:34
本帖最后由 jackz007 于 2021-3-11 14:45 编辑

       汇编语言规定,在默认情况下,代码段的开头一律是 CS:0。除非有特殊要求,可以使用 org 伪指令指定起始偏移值。

       DOS 下的每个 exe 文件都有一个文件头,记载了 exe 文件内存映像的所有信息,其中就包含了程序入口的 CS : IP 以及 SS : SP 等数据, 操作系统在加载 exe 文件的过程中,会根据这些数据初始化内存及所有相关的寄存器,最后,才把控制权交给 exe。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-11 13:54:17 | 显示全部楼层
来人呀来人呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-11 14:39:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-3-11 14:45 编辑

       汇编语言规定,在默认情况下,代码段的开头一律是 CS:0。除非有特殊要求,可以使用 org 伪指令指定起始偏移值。

       DOS 下的每个 exe 文件都有一个文件头,记载了 exe 文件内存映像的所有信息,其中就包含了程序入口的 CS : IP 以及 SS : SP 等数据, 操作系统在加载 exe 文件的过程中,会根据这些数据初始化内存及所有相关的寄存器,最后,才把控制权交给 exe。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 14:50:25 | 显示全部楼层
jackz007 发表于 2021-3-11 14:39
汇编语言规定,在默认情况下,代码段的开头一律是 CS:0。除非有特殊要求,可以使用 org 伪指令指定 ...

所以我的理解对了嘛。。
大佬你说的太高深了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-11 15:09:23 | 显示全部楼层
万千只cnm 发表于 2021-3-11 14:50
所以我的理解对了嘛。。
大佬你说的太高深了

        不是我讲的太高深,是你自己懂的太少,建议你参考一下这篇文章,一点都不长,只有 2 页纸。
        http://www.doc88.com/p-3197688685997.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 15:11:51 | 显示全部楼层
jackz007 发表于 2021-3-11 15:09
不是我讲的太高深,是你自己懂的太少,建议你参考一下这篇文章,一点都不长,只有 2 页纸。
    ...

okok
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 20:46:45 | 显示全部楼层
jackz007 发表于 2021-3-11 15:09
不是我讲的太高深,是你自己懂的太少,建议你参考一下这篇文章,一点都不长,只有 2 页纸。
    ...

请问大佬 第四步什么意思呀

                               
登录/注册后可看大图


这里的起始段值指的是 申请返回的 段地址+10h 嘛
然后与重定位表项后两个字节相加 ,前两个字节相当于偏移地址 -->新的物理地址
这个地址处的字正是需重定位的字,这个字处再加上起始段值
这句话怎么理解呀 让这个字的内容 add 起始段值嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 20:47:14 | 显示全部楼层
重定位表
截屏2021-03-11 下午8.36.07.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-11 22:37:35 | 显示全部楼层
          那是重定位项,如果代码中出现绝对地址
102E:0010          CALL  182E:0013
. . . . . .
102E:1023          JMP    182E : 1024 

          这些绝对地址就属于重定位项, 在代码装入内存的时候,需要根据装入地址动态形成。     
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 23:27:50 | 显示全部楼层
jackz007 发表于 2021-3-11 22:37
那是重定位项,如果代码中出现绝对地址

          这些绝对地址就属于重定位项, 在代码装入 ...

现在还不懂
等我以后回过头来再看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 09:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表