回忆已成伤 发表于 2013-12-16 16:40:55

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

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

霸气外露 发表于 2013-12-16 17:20:47

个人观点:
asm文件中,编辑的时候并没有明确的写出CS的值。
只是用了assume cs:abc
所以在编译生成OBJ的时候,OBJ里面的内容就没有CS的值。
既然没有CS的值,那就是说每次运行EXE的时候,CS是CPU决定的了。

以上是本人观点,不一定对,如有错误请回帖我,我也学习下。
希望对你有帮助。

回忆已成伤 发表于 2013-12-16 17:56:24

霸气外露 发表于 2013-12-16 17:20 static/image/common/back.gif
个人观点:
asm文件中,编辑的时候并没有明确的写出CS的值。
只是用了assume cs:abc


那程序是否写入到内存中了呢

霸气外露 发表于 2013-12-16 18:05:34

本帖最后由 霸气外露 于 2013-12-16 18:07 编辑

回忆已成伤 发表于 2013-12-16 17:56 static/image/common/back.gif
那程序是否写入到内存中了呢

只有运行EXE的时候才可以写入内存的。因为我们查看肯定用这个语句debug XX.EXE。不运行,内存无任何反应。

回忆已成伤 发表于 2013-12-16 18:11:37

霸气外露 发表于 2013-12-16 18:05 static/image/common/back.gif
只有运行EXE的时候才可以写入内存的。因为我们查看肯定用这个语句debug XX.EXE。不运行,内存无任何反应 ...

抱歉 我没说明白,我知道只有执行.exe文件才能加载到内存,我想问的是生成了obj文件的时候不是已经分配了相应的内存了吗,这个时候是否已经加载到内存上了,还有就是通过link之后内存地址会不会发生变化

霸气外露 发表于 2013-12-16 18:13:39

回忆已成伤 发表于 2013-12-16 18:11 static/image/common/back.gif
抱歉 我没说明白,我知道只有执行.exe文件才能加载到内存,我想问的是生成了obj文件的时候不是已经分配了 ...

执行EXE,CPU自动分配内存,其他MASM编译OBJ文件啊,LINK连接EXE文件啊,都没有内存地址。

~逆天~ 发表于 2013-12-16 20:25:52

执行的时候加载到内存中,程序的入口地址有end 标号指定。至于在内存的何处,完全由计算机决定

大娱乐家_╮ 发表于 2013-12-18 13:50:21

都没有内存地址。

戏++ 发表于 2013-12-18 14:45:25

obj是文件而已,拿来的占用内存啊,这个文件只能说是占用了磁盘空间
assume cs:codesg,ds:datasg,ss:stacksg
像这种,编译后的exe,用debug调试载入内存,没有执行代码的时候,用-d ds:0查看内存,发现所指的并不是datasg的数据,只能说明那只是个写法而已,告诉程序员,ds需要指向datasg,对计算机来说没用
是不是这样啊,正确吗

麦麦Acassing 发表于 2014-1-2 16:14:24

我觉得是这样的,首先 ASM文件MASM称OBJ文件时 使用MSAM文件运行了ASM文件的生成OBJ文件
这个过程肯定用了内存 1个是MASM.EXE的程序内存,1个是ASM文件的数据内存 也就是说 MASM内存中的数据是代码段,ASM文件中的数据是数据段, 这个文件执行完毕后成OBJ文件,这个文件你没有用他的时候是不占内存的 是放在磁盘里的 当你打开它或者处理这个OBJ文件时 OBJ文件才占内存 而且内存位置应该是随机的根据你 此时内存的使用情况而定

lms99251 发表于 2014-1-10 10:46:23

程序只有运行后才会加载如内存,你打开obj文件,里面应该是代码的数据,存放在硬盘上的,我是这么理解的
页: [1]
查看完整版本: 在执行mase后生成的obj文件就已经将代码分配到不变的内存地址中吗?