困惑已久的问题 保护模式下程序运行时如何寻址,直接用线性地址那还是段基地址+段内偏移?

realmiss 2003-09-28 08:39:41
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib kernel32.lib
include \masm32\include\user32.inc
includelib user32.lib

.data
MsgCaption db "Iczelion's tutorial no.2",0
MsgBoxText db "Win32 Assembly is Great!",0

.code
start:
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
invoke ExitProcess,NULL
end start

上面的代码编译后 在win32Dasm中反汇编结果如下
//******************** Program Entry Point ********
:00401000 6A00 push 00000000
:00401002 6800304000 push 00403000 ;此处压入堆栈的地址是线性
; 还是段内偏移地址
* Possible StringData Ref from Data Obj ->"Win32 Assembly is Great!"
|
:00401007 6819304000 push 00403019 ; 疑问同上
:0040100C 6A00 push 00000000

* Reference To: USER32.MessageBoxA, Ord:01BBh
|
:0040100E E80D000000 Call 00401020 ; 此处调用是段间转移吗?
; 地址是线性地址还是段偏
; 移地址 为什么没有选择子

:00401013 6A00 push 00000000
* Reference To: KERNEL32.ExitProcess, Ord:0075h
|
:00401015 E800000000 Call 0040101A ;疑问同上

* Referenced by a CALL at Address:
|:00401015
|

* Reference To: KERNEL32.ExitProcess, Ord:0075h
|
:0040101A FF2500204000 Jmp dword ptr [00402000]

* Reference To: USER32.MessageBoxA, Ord:01BBh
|
:00401020 FF2508204000 Jmp dword ptr [00402008]
:00401026 00000000000000000000 BYTE 10 DUP(0)
...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
realmiss 2003-09-28
  • 打赏
  • 举报
回复
你说的这些太重要了 这个问题从我接触保护模式汇编到现在一直纳闷 现在总算明白了 送分^_^
wowocock 2003-09-28
  • 打赏
  • 举报
回复
倒,网上到处有资料的,很容易的东西啊.
realmiss 2003-09-28
  • 打赏
  • 举报
回复
是你自己说的所有段的
唉 我怎么早不知道 郁闷了好久 顺便问你啊 你怎么知道这些的?或者在什么资料看过的?或者自己领悟的?
wowocock 2003-09-28
  • 打赏
  • 举报
回复
倒,我所指的段CD,DS,ES,SS
不包括FS,GS,WINSOWS下GS 永远为0,FS则包括了相应的数据结构,比如SEH等.
realmiss 2003-09-28
  • 打赏
  • 举报
回复
所有的段基地址相同?
在softice中断了某个程序时我打了下面两条指令
d fs:12345
d cs:12345
但是数据显示却是不一样的 怎么解释??????????????
wowocock 2003-09-28
  • 打赏
  • 举报
回复
WINDOWS下所有的段都是BASE 0,LIMIT 4GB的所以不存在段的概念

线性地址=段基地址+段内偏移

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧