编程编译时生成的obj文件和exe文件本质上有什么区别?
发布网友
发布时间:2022-05-10 09:12
我来回答
共2个回答
热心网友
时间:2024-02-05 05:31
本质上都是2进制代码, 但是 obj 没有经过链接的重定位,不是可执行的代码。
而且一个obj对应一个cpp编译单元,里面的外部符号都没解析出来。
比如a.cpp 通过b.h使用了一个 b.cpp里定义的函数 func(); 那么a.cpp生成的obj里面只会有func() 这个函数名的调用而已,也就是一个(对a.obj来说的)外部符号。 只有经过链接成为了.exe, 相应于a.obj里面的func()的调用才会更新成实际的b.obj里面的func()的实际地址。 对全局变量也是同样的道理。
热心网友
时间:2024-02-05 05:32
m 其实和bin是一样的,直接载入内存运行。
汇编的obj 如果只是单一obj,那么就和com差不多一样了,否则就要link多个obj在一起(可以变成exe)。
PE 是 exe 文件前面加了PE头,用于重新定位数据和代码位置(因为有虚拟内存机制在里面)
都是通过2进制在CPU里面跑。
最后放在内存里面都是一样的。