如何在windows下调试保护模式的程序

lanhun7 2005-07-05 03:36:13
本人很菜,看了一个实模式转换到保护模式的程序,但是调试的时候老是出错,
编译正确的,有什么方法解决呀,谢谢了。
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanhun7 2005-07-11
  • 打赏
  • 举报
回复
不知道,你看标题没有
dali168 2005-07-10
  • 打赏
  • 举报
回复
#include <resource.h>

#define ICO_MAIN 100
#define DLG_SETUP 2003

ICO_MAIN ICON "Resource\Main.ico"

DLG_SETUP DIALOG DISCARDABLE 0, 0, 300, 120
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "屏幕保护程序"
FONT 9, "宋体"
BEGIN
...
...
DEFPUSHBUTTON "确定(&O)", IDOK, 240,10,50,14
PUSHBUTTON "取消(&C)", IDCANCEL, 240,29,50,14
END

STRINGTABLE DISCARDABLE
BEGIN
100 "保护程序"
END
.def 文件例子:

EXPORTS
ScreenSaverProc
ScreenSaverConfigureDialog
RegisterDialogClasses

源代码例子:

.386
.model flat, stdcall
option casemap :none ; case sensitive

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
include kernel32.inc
include comctl32.inc
include comdlg32.inc
include gdi32.inc
include advapi32.inc
include shell32.inc
include scrnsave.inc

includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
includelib gdi32.lib
includelib advapi32.lib
includelib shell32.lib
includelib scrnsave.lib
includelib msvcrt.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 100 ;Must be 100
DLG_SETUP equ 2003 ;Must be 2003

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data?

hInstance dd ?
hWinMain dd ?

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.code

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 设置对话框过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ScreenSaverConfigureDialog proc uses ebx edi esi, \
hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD

mov eax,wMsg
;********************************************************************
.elseif eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
;********************************************************************
.elseif eax == WM_COMMAND
mov eax,wParam
.if eax == IDOK
... 在此保存设置 ...
invoke EndDialog,hWnd,NULL
.elseif eax == IDCANCEL
invoke EndDialog,hWnd,NULL
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret

ScreenSaverConfigureDialog endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 主程序窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ScreenSaverProc proc uses ebx edi esi, \
hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

mov eax,uMsg
.if eax == WM_CREATE
invoke GetModuleHandle,NULL
mov hInstance,eax
mov eax,hWnd
mov hWinMain,eax ...
在此初始化,包括定义一个定时器 ...
invoke SetTimer,hWinMain,TIMER_MOON,100,NULL
.elseif eax == WM_DESTROY
call _Quit
;********************************************************************
.elseif eax == WM_TIMER
...
在此画屏幕动画 ...
xor eax,eax
ret
;********************************************************************
; .elseif eax == WM_ERASEBKGND
;********************************************************************
; 以下黑屏的代码在 DefScreenSaverProc 中已经包括,如果自己要处理
; 屏幕,可以把它去掉。
;********************************************************************
; invoke GetDC,hWnd
; mov @hDc,eax
; invoke GetClientRect,hWnd,addr @stRc
; invoke GetStockObject,BLACK_BRUSH
; invoke FillRect,@hDc,addr @stRc,eax
; invoke ReleaseDC,hWnd,@hDc
; xor eax,eax
; ret
.endif
;********************************************************************
invoke DefScreenSaverProc,hWnd,uMsg,wParam,lParam
ret

ScreenSaverProc endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 注册设置对话框窗口Class过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
RegisterDialogClasses proc uses ebx edi esi, hInst:DWORD

mov eax,TRUE
ret

RegisterDialogClasses endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end WinMain
lanhun7 2005-07-08
  • 打赏
  • 举报
回复
我用的是vm,我也想用bochs,因为他有源代码,不过不知道怎么用他
你是怎么用的呀?请教一下好吗?
zhang_jiang 2005-07-07
  • 打赏
  • 举报
回复
虚拟机: bochs
lanhun7 2005-07-07
  • 打赏
  • 举报
回复
他有三十多M呀,好慢哦,我的是朋友给我的,
你可以从网上下一个呀
VxD1 2005-07-07
  • 打赏
  • 举报
回复
什么虚拟机?给我一个,vxd111@21cn.com
我也在学保护方式
lanhun7 2005-07-06
  • 打赏
  • 举报
回复
你是对的,要在dos下调试,不过在windows下我用了虚拟机,就可以直接调试了
谢谢了哦
WYlslrt 2005-07-05
  • 打赏
  • 举报
回复
windows环境下肯定是没有办法调试的
你可以转到dos下。

21,459

社区成员

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

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