鱼C论坛

 找回密码
 立即注册
查看: 2752|回复: 10

在执行mase后生成的obj文件就已经将代码分配到不变的内存地址中吗?

[复制链接]
发表于 2013-12-16 16:40:55 | 显示全部楼层 |阅读模式

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

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

x
我认为运行.exe文件的时候才把代码加载到内存中,但是看到还没有执行link的时候,查看生成的obj文件,里面就有内存地址和相应的机器码,是不是运行.exe文件加载到的内存地址和obj文件中显示的是一样的地址,还有就是生成了obj文件之后,最后生成的.exe不管执行多少回段地址都不变?而且伪代码assume cs:abc并没有指定cs具体的值,那么每次运行.exe文件的时候cs值又是多少,随机分配?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-16 17:20:47 | 显示全部楼层
个人观点:
asm文件中,编辑的时候并没有明确的写出CS的值。
只是用了assume cs:abc
所以在编译生成OBJ的时候,OBJ里面的内容就没有CS的值。
既然没有CS的值,那就是说每次运行EXE的时候,CS是CPU决定的了。

以上是本人观点,不一定对,如有错误请回帖我,我也学习下。
希望对你有帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-16 17:56:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 18:05:34 | 显示全部楼层
本帖最后由 霸气外露 于 2013-12-16 18:07 编辑
回忆已成伤 发表于 2013-12-16 17:56
那程序是否写入到内存中了呢


只有运行EXE的时候才可以写入内存的。因为我们查看肯定用这个语句debug XX.EXE。不运行,内存无任何反应。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-16 18:11:37 | 显示全部楼层
霸气外露 发表于 2013-12-16 18:05
只有运行EXE的时候才可以写入内存的。因为我们查看肯定用这个语句debug XX.EXE。不运行,内存无任何反应 ...

抱歉 我没说明白,我知道只有执行.exe文件才能加载到内存,我想问的是生成了obj文件的时候不是已经分配了相应的内存了吗,这个时候是否已经加载到内存上了,还有就是通过link之后内存地址会不会发生变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 18:13:39 | 显示全部楼层
回忆已成伤 发表于 2013-12-16 18:11
抱歉 我没说明白,我知道只有执行.exe文件才能加载到内存,我想问的是生成了obj文件的时候不是已经分配了 ...

执行EXE,CPU自动分配内存,其他MASM编译OBJ文件啊,LINK连接EXE文件啊,都没有内存地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-16 20:25:52 | 显示全部楼层
执行的时候加载到内存中,程序的入口地址有end 标号指定。至于在内存的何处,完全由计算机决定
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-18 13:50:21 | 显示全部楼层
都没有内存地址。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-18 14:45:25 | 显示全部楼层
obj是文件而已,拿来的占用内存啊,这个文件只能说是占用了磁盘空间
assume cs:codesg,ds:datasg,ss:stacksg
像这种,编译后的exe,用debug调试载入内存,没有执行代码的时候,用-d ds:0查看内存,发现所指的并不是datasg的数据,只能说明那只是个写法而已,告诉程序员,ds需要指向datasg,对计算机来说没用
是不是这样啊,正确吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-2 16:14:24 | 显示全部楼层
我觉得是这样的,首先 ASM文件MASM称OBJ文件时 使用MSAM文件运行了ASM文件的生成OBJ文件
这个过程肯定用了内存 1个是MASM.EXE的程序内存,1个是ASM文件的数据内存 也就是说 MASM内存中的数据是代码段,ASM文件中的数据是数据段, 这个文件执行完毕后成OBJ文件,这个文件你没有用他的时候是不占内存的 是放在磁盘里的 当你打开它或者处理这个OBJ文件时 OBJ文件才占内存 而且内存位置应该是随机的根据你 此时内存的使用情况而定
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-10 10:46:23 | 显示全部楼层
程序只有运行后才会加载如内存,你打开obj文件,里面应该是代码的数据,存放在硬盘上的,我是这么理解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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