万千只cnm 发表于 2021-3-11 13:53:44

程序入口问题

end start

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

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

start:

xxx

code ends
end start




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

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

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

万千只cnm 发表于 2021-3-11 13:54:17

来人呀来人呀

jackz007 发表于 2021-3-11 14:39:34

本帖最后由 jackz007 于 2021-3-11 14:45 编辑

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

       DOS 下的每个 exe 文件都有一个文件头,记载了 exe 文件内存映像的所有信息,其中就包含了程序入口的 CS : IP 以及 SS : SP 等数据, 操作系统在加载 exe 文件的过程中,会根据这些数据初始化内存及所有相关的寄存器,最后,才把控制权交给 exe。

万千只cnm 发表于 2021-3-11 14:50:25

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

所以我的理解对了嘛。。
大佬你说的太高深了{:5_104:}

jackz007 发表于 2021-3-11 15:09:23

万千只cnm 发表于 2021-3-11 14:50
所以我的理解对了嘛。。
大佬你说的太高深了

      不是我讲的太高深,是你自己懂的太少,建议你参考一下这篇文章,一点都不长,只有 2 页纸。
      http://www.doc88.com/p-3197688685997.html

万千只cnm 发表于 2021-3-11 15:11:51

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

okok{:5_104:}

万千只cnm 发表于 2021-3-11 20:46:45

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

请问大佬 第四步什么意思呀
{:5_104:}/Users/solitary/Desktop/截屏2021-03-11 下午8.36.07.png

这里的起始段值指的是 申请返回的 段地址+10h 嘛
然后与重定位表项后两个字节相加 ,前两个字节相当于偏移地址 -->新的物理地址
这个地址处的字正是需重定位的字,这个字处再加上起始段值
这句话怎么理解呀 让这个字的内容 add 起始段值嘛

万千只cnm 发表于 2021-3-11 20:47:14

重定位表

jackz007 发表于 2021-3-11 22:37:35

          那是重定位项,如果代码中出现绝对地址
102E:0010          CALL182E:0013
. . . . . .
102E:1023          JMP    182E : 1024
          这些绝对地址就属于重定位项, 在代码装入内存的时候,需要根据装入地址动态形成。   

万千只cnm 发表于 2021-3-11 23:27:50

jackz007 发表于 2021-3-11 22:37
那是重定位项,如果代码中出现绝对地址

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

现在还不懂{:5_104:}
等我以后回过头来再看
页: [1]
查看完整版本: 程序入口问题