注册 登录
编程论坛 汇编论坛

求助 反汇编代码分析 的几点困惑

vfdff 发布于 2008-11-03 00:47, 1963 次点击
if @Version gt 510
.model FLAT
else
_TEXT    SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT    ENDS
_DATA    SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA    ENDS
CONST    SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST    ENDS
_BSS    SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS    ENDS
_TLS    SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS    ENDS
CRT$XCA    SEGMENT DWORD USE32 PUBLIC 'DATA'
CRT$XCA    ENDS
CRT$XCU    SEGMENT DWORD USE32 PUBLIC 'DATA'
CRT$XCU    ENDS
CRT$XCL    SEGMENT DWORD USE32 PUBLIC 'DATA'
CRT$XCL    ENDS
CRT$XCC    SEGMENT DWORD USE32 PUBLIC 'DATA'
CRT$XCC    ENDS
CRT$XCZ    SEGMENT DWORD USE32 PUBLIC 'DATA'
CRT$XCZ    ENDS
shared    SEGMENT DWORD USE32 PUBLIC ''
shared    ENDS
FLAT    GROUP _DATA, CONST, _BSS, CRT$XCA, CRT$XCU, CRT$XCL, CRT$XCC, CRT$XCZ, shared
    ASSUME    CS: FLAT, DS: FLAT, SS: FLAT

endif
VC6 得到的反汇编代码总是由上面这部分,这是不是说明
(1)在以前,_TEXT, _DATA, CONST, _BSS, CRT$XCA, CRT$XCU, CRT$XCL, CRT$XCC, CRT$XCZ, shared等段是由相应的 DWORD USE32 PUBLIC '****'指定,但是现在对于版本高于Version 510 的则在 .model FLAT 中定义了各个段地址?
(2)好像FLAT就是在386以后的机子上才使用的一个标号,为什么需要在 版本号 小于 Version 510 的时候也需要对齐定义,难道是为了程序的向后兼容性?

[[it] 本帖最后由 vfdff 于 2008-11-3 01:02 编辑 [/it]]
4 回复
#2
cnhanxiao2008-11-03 05:34
学汇编就是为了最接近机器,你的执着我很感动,但是我真觉得你离真正的汇编越来越远。
对齐,在8086下不很重要,但是已经有了。
Flat——平面寻址,386保护模式下使用,这只是告诉编译连接程序生成的执行文件寻址模式的。
其实程序被分成很多段,是文件格式也是操作系统的要求。在保护模式的机器眼里,就是可写不可写的区别。

我们写汇编程序,无奈地要遵守操作系统规定的格式,因为可执行文件总是被操作系统加载的。假如你自己写一个操作系统,你会规定自己的可执行文件格式——这其实就是连接程序的任务。
#3
你们都要疼我哦2008-11-03 10:25
[bo][un]cnhanxiao[/un] 在 2008-11-3 05:34 的发言:[/bo]

学汇编就是为了最接近机器,你的执着我很感动,但是我真觉得你离真正的汇编越来越远。
对齐,在8086下不很重要,但是已经有了。
Flat——平面寻址,386保护模式下使用,这只是告诉编译连接程序生成的执行文件寻址模 ...


版主一针见血,楼主朋友的大部分问题,都是很模糊,似乎在钻牛角尖,但实际却是毫无章法,很多都是毫无意义的问题.对楼主的不少回帖当中,我都是说,要系统的看下相关知识,如果要学习偏底层知识,要从基础的汇编学起. 楼主似乎在以C/C++为基础向偏底层学习,也很想了解实现的细节,但是方法不得当,还是建议,要循序渐进,系统深入学一下win32汇编, 选本好的教材,精读. 磨刀不误砍柴工.
#4
zklhp2008-11-03 12:42
两位分析的透彻 偶就不多说了 呵呵
#5
vfdff2008-11-03 20:51
恩,谢谢楼上几位指正
1