文档库 最新最全的文档下载
当前位置:文档库 › VB用常断点

VB用常断点

VB用常断点
VB用常断点

OD常用断点之我收集,里面有VB绝对万能断点,杀VB程序专用

常用断点(OD中)

拦截窗口:

bp CreateWindow 创建窗口

bp CreateWindowEx(A) 创建窗口

bp ShowWindow 显示窗口

bp UpdateWindow 更新窗口

bp GetWindowText(A) 获取窗口文本

拦截消息框:

bp MessageBox(A) 创建消息框

bp MessageBoxExA 创建消息框

bp MessageBoxIndirect(A) 创建定制消息框

bp IsDialogMessageW

拦截警告声:

bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)

拦截对话框:

bp DialogBox 创建模态对话框

bp DialogBoxParam(A) 创建模态对话框

bp DialogBoxIndirect 创建模态对话框

bp DialogBoxIndirectParam(A) 创建模态对话框

bp CreateDialog 创建非模态对话框

bp CreateDialogParam(A) 创建非模态对话框

bp CreateDialogIndirect 创建非模态对话框

bp CreateDialogIndirectParam(A) 创建非模态对话框

bp GetDlgItemText(A) 获取对话框文本

bp GetDlgItemInt 获取对话框整数值

拦截剪贴板:

bp GetClipboardData 获取剪贴板数据

拦截注册表:

bp RegOpenKey(A) 打开子健

bp RegOpenKeyEx 打开子健

bp RegQueryValue(A) 查找子健

bp RegQueryValueEx 查找子健

bp RegSetValue(A) 设置子健

bp RegSetValueEx(A) 设置子健

功能限制拦截断点:

bp EnableMenuItem 禁止或允许菜单项

bp EnableWindow 禁止或允许窗口

拦截时间:

bp GetLocalTime 获取本地时间

bp GetSystemTime 获取系统时间

bp GetFileTime 获取文件时间

bp GetTickCount 获得自系统成功启动以来所经历的毫秒数

bp GetCurrentTime 获取当前时间(16位)

bp SetTimer 创建定时器

bp TimerProc 定时器超时回调函数

GetDlgItemInt 得指定输入框整数值

GetDlgItemText 得指定输入框输入字符串

GetDlgItemTextA 得指定输入框输入字符串

拦截文件:

bp CreateFileA 创建或打开文件 (32位)

bp OpenFile 打开文件 (32位)

bp ReadFile 读文件 (32位)

bp WriteFile 写文件 (32位)

GetModuleFileNameA

GetFileSize

Setfilepointer

fileopen

FindFirstFileA

ReadFile

拦截驱动器:

bp GetDriveTypeA 获取磁盘驱动器类型

bp GetLogicalDrives 获取逻辑驱动器符号

bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径★★VB程序专用断点★★

文件长度:RtcFileLen

bp __vbaFreeStr 对付VB程序重启验证

bp __vbaStrCmp 比较字符串是否相等

bp __vbaStrComp 比较字符串是否相等

bp __vbaVarTstNe 比较变量是否不相等

bp __vbaVarTstEq 比较变量是否相等

bp __vbaStrCopy 复制字符串

bp __vbaStrMove 移动字符串

bp MultiByteToWideChar ANSI字符串转换成Unicode字符串

bp WideCharToMultiByte Unicode字符串转换成ANSI字符串

=============== ================

密码常用中断

Hmemcpy (win9x专用)

GetDlgItemTextA

GetDlgItemInt

vb:

getvolumeinformationa

vbastrcomp (trw)

Bpx __vbaStrComp (记得是两个 '_')

MSVBVM60!_vbastrcomp|sofice

MSVBVM50! |

VBAI4STR

Ctrl+D

bpx msvbvm60!__vbastrcomp do "d *(esp+0c)"(softice)

按几次F5出册码出来了。

bpx regqueryvalueexa do "d esp->8"(trw)

vbaVarTstEq 判断是否注册的函数

(0042932F 66898580FEFFFF mov word ptr [ebp+FFFFFE80], ax

改为0042932F 66898580FEFFFF mov word ptr [ebp+FFFFFE80], bx)

时间常用中断

GetSystemTime

GetLocalTime

GetTickCount

vb:

rtcGetPresentDate //取得当前日期

杀窗常用中断

Lockmytask (win9x专用)

bp ExitProcess 退出进程

DestroyWindow

mouse_event (鼠标中断)

postquitmessage (Cracking足彩xp,很有用^_^)

vb:

_rtcMsgBox

ini文件内容常用中断

GetPrivateProfileStringA

GetPrivateProfileProfileInt

key文件:

getprivateprofileint

ReadFile

CreateFileA

注册表常用中断

RegQueryvalueA

RegQueryvalueExA

狗加密中断

BPIO -h 278 R

BPIO -h 378 R

其它常用函数断点

CreateFileA (读狗驱动程序),

DeviceIOControl,

FreeEnvironmentStringsA (对付HASP非常有效).

Prestochangoselector (16-bit HASP's), '7242' 查找字符串 (对付圣天诺).具体含义参考下面的范例。

光盘破解中断

16:

getvolumeinformation

getdrivetype

int 2fh (dos)

32:

GetDriveTypeA

GetFullPathNameA

GetWindowsDirectoryA

读磁盘中断

GETLASTERROR 返回扩充出错代码

限制中断

EnableMenuItem 允许、禁止或变灰指定的菜单条目

EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰)

不知道软盘中断是什么了?还有其它特殊中断,不知道其他朋友可否说一下了?

如ockmytask and mouse_event,这些就不是api32函数?

win9x 与 win2k进行破解,以上中断有部分已经不能用了?

不知道在win2k上,以上常用中断函数是什么了?

也就是问密码、时间、窗口、ini、key、注册表、加密狗、光盘、软盘、限制等!

了解常用的中断,对破解分析可以做到事半功倍!

请大家说一下!还有如何破解了某个软件时,一重启就打回原形?

不知道下什么中断了?可以分为三种情况:

1.比较可能在注册表中

2.比较在特殊文件(*.key *.ini *.dat等)

3.比较在程序中,没有任何错误提示或者反译也找不到明显字符(这个就是我想问的)

还有一个是最难的,就是去掉水印!

也可以三种情况:

A.水印是位图文件(bitblt,creatBITMAP等位图函数)

B.水印是明显字符(反译分析)

C.水印不是明显字符(如:This a demo!它只是显示在另一个制作文件上,可是*.htm *.exe 等)

C.才是最难搞,也是很多人想知道的!包括我在内。不知道高手们有何提示了?

广告条:

可以分两种情况:

A.从创建窗口进手,可以用到movewindow或者其它窗口函数!

B.从位图进手,也可以用到bitblt或者其它位图函数!

最后可以借助一些现有工具(如:api27,vwindset,freespy之类的工具)

葡萄虽无树,藤生棚中秧。

人处凡尘中,岂不惹尘埃?

小球[CCG]

那要看是在哪作的标记,通常是在注册表中留下信息!

在softice中就要用bpx regqueryvalueexa do "d esp->8"来中断看看,

在trw中要用bpx regqueryvalueexa do "d*(esp+8)"来中断看看。

还有的是在本目录下留下注册信息,常见的有.dat .ini .dll等等,

我是用bpx readfile来中断的,还有的是在windows目录下留下注册信息。

你可以借助专用的工具帮助你查看,入filemon等!

vb:

1、__vbaVarTstNe //比较两个变量是否不相等

2、rtcR8ValFromBstr //把字符串转换成浮点数

3、rtcMsgBox 显示一信息对话框

4、rtcBeep //让扬声器叫唤

5、rtcGetPresentDate //取得当前日期

针对字串:

__vbaStrComp

__vbaStrCmp

__vbaStrCompVar

__vbaStrLike

__vbaStrTextComp

__vbaStrTextLike

针对变量:

__vbaVarCompEq

__vbaVarCompLe

__vbaVarCompLt

__vbaVarCompGe

__vbaVarCompGt

__vbaVarCompNe

VB的指针:

THROW

VB DLL还调用了oleauto32.dll中的部分函数。oleauto32.dll是个通用的proxy/stub DLL,其每个函数的原型在中定义,并在MSDN中有详细描述。这也有助于理解VB DLL 中的函数的作用。

举例:

LEA EAX, [EBP-58]

PUSH EAX

CALL [MSVBVM60!__vbaI4Var]

执行call之前敲dd eax+8,得到的值为3;

执行完call之后,eax = 3

从而可知__vbaI4Var的作用是将一个VARIANT转换为I4(即一个长整数)。

__vbaVarTstNe似乎是用来进行自校验的,正常情况下返回值为0。

已知适用的软件有:网络三国智能机器人、音乐贺卡厂。当这两个软件被脱壳后都回出错,网络三国智能机器人会产生非法*作,而音乐贺卡厂会告诉你是非法拷贝,通过修改__vbaVarTstNe的返回值都可让它们正常运行。

所以当您遇到一个VB软件,脱壳后无法正常运行,而又找不出其它问题时,可试试拦截这个函数,说不定会有用哦。8-)

API不太知道,也许可以通过BIOS在98平台上读写扇区,不过在2000/NT下可以通过内黑ATAPI,HAL写扇区

machoman[CCG]

bpx WRITE_PORT_BUFFER_USHORT

NT/2000下这个断点,当edx=1f0h,时,可以看见EDI地址内数据为扇区位置数据,必须先在winice.dat 中装入hal.sys 详细内容看ATAPI手册

补充篇:

关于对VB程序和时间限制程序的断点

CrackerABC

先给出修改能正确反编译VB程序的W32DASM的地址:======================

offsets 0x16B6C-0x16B6D

修改机器码为: 98 F4

======================

VB程序的跟踪断点:

============

MultiByteToWideChar,

rtcR8ValFromBstr,

WideCharToMultiByte,

__vbaStrCmp

__vbaStrComp

__vbaStrCopy

__vbaStrMove

__vbaVarTstNe

rtcBeep

rtcGetPresentDate (时间API)

rtcMsgBox

=========

时间限制断点:

================

CompareFileTime

GetLocalTime

GetSystemTime

GetTimeZoneInformation

msvcrt.diffTime()

msvcrt.Time()

================

一般处理

bpx hmemcpy

bpx MessageBox

bpx MessageBoxExA

bpx MessageBeep

bpx SendMessage

bpx GetDlgItemText

bpx GetDlgItemInt

bpx GetWindowText

bpx GetWindowWord

bpx GetWindowInt

bpx DialogBoxParamA

bpx CreateWindow

bpx CreateWindowEx

bpx ShowWindow

bpx UpdateWindow

bmsg xxxx wm_move

bmsg xxxx wm_gettext

bmsg xxxx wm_command

bmsg xxxx wm_activate

时间相关

bpint 21 if ah==2A (DOS)

bpx GetLocalTime

bpx GetFileTime

bpx GetSystemtime

CD-ROM 或磁盘相关

bpint 13 if ah==2 (DOS)

bpint 13 if ah==3 (DOS)

bpint 13 if ah==4 (DOS)

bpx GetFileAttributesA

bpx GetFileSize

bpx GetDriveType

bpx GetLastError

bpx ReadFile

bpio -h (Your CD-ROM Port Address) R

软件狗相关

bpio -h 278 R

bpio -h 378 R

键盘输入相关

bpint 16 if ah==0 (DOS)

bpint 21 if ah==0xA (DOS)

文件访问相关

bpint 21 if ah==3dh (DOS)

bpint 31 if ah==3fh (DOS)

bpint 21 if ah==3dh (DOS)

bpx ReadFile

bpx WriteFile

bpx CreateFile

bpx SetFilePointer

bpx GetSystemDirectory

INI 初始化文件相关

bpx GetPrivateProfileString

bpx GetPrivateProfileInt

bpx WritePrivateProfileString

bpx WritePrivateProfileInt

注册表相关

bpx RegCreateKey

bpx RegDeleteKey

bpx RegQueryvalue

bpx RegCloseKey

bpx RegOpenKey

注册标志相关

bpx cs:eip if EAX==0

内存标准相关

bpmb cs:eip rw if 0x30:0x45AA==0

显示相关

bpx 0x30:0x45AA do "d 0x30:0x44BB"

bpx CS:0x66CC do "? EAX"

查找窗口

FindWindowA

BP SetFilePointer

bpx hmemcpy ;破解万能断点,拦截内存拷贝动作(注意:Win9x专用断点)

bpx Lockmytask ;当你用其它断点都无效时可以试一下,这个断点拦截按键的动作(Win9x专用)

实在找不到断点可以试下面的方法:

bmsg handle wm_gettext ;拦截注册码(handle为对应窗口的句柄)

bmsg handle wm_command ;拦截OK按钮(handle为对应窗口的句柄)

拦截窗口:

bpx CreateWindow ;创建窗口

bpx CreateWindowEx(A/W) ;创建窗口

bpx ShowWindow ;显示窗口

bpx UpdateWindow ;更新窗口

bpx GetWindowText(A/W) ;获取窗口文本

拦截消息框:

bpx MessageBox(A/W) ;创建消息框

bpx MessageBoxExA(W) ;创建消息框

bpx MessageBoxIndirect(A/W) ;创建定制消息框

拦截警告声:

bpx MessageBeep ;发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)

拦截对话框:

bpx DialogBox ;创建模态对话框

bpx DialogBoxParam(A/W) ;创建模态对话框

bpx DialogBoxIndirect ;创建模态对话框

bpx DialogBoxIndirectParam(A/W) ;创建模态对话框

bpx CreateDialog ;创建非模态对话框

bpx CreateDialogParam(A/W) ;创建非模态对话框

bpx CreateDialogIndirect ;创建非模态对话框

bpx CreateDialogIndirectParam(A/W) ;创建非模态对话框

bpx GetDlgItemText(A/W) ;获取对话框文本

bpx GetDlgItemInt ;获取对话框整数值

拦截剪贴板:

bpx GetClipboardData ;获取剪贴板数据

拦截注册表:

bpx RegOpenKey(A/W) ;打开子健 ( 例:bpx RegOpenKey(A) if *(esp->8)=='****' )

bpx RegOpenKeyExA(W) ;打开子健 ( 例:bpx RegOpenKeyEx if *(esp->8)=='****' )

bpx RegQueryValue(A/W) ;查找子健 ( 例:bpx RegQueryValue(A) if *(esp->8)=='****' ) bpx RegQueryValueEx(A/W) ;查找子健 ( 例:bpx RegQueryValueEx if *(esp->8)=='****' ) bpx RegSetValue(A/W) ;设置子健 ( 例:bpx RegSetValue(A) if *(esp->8)=='****' ) bpx RegSetValueEx(A/W) ;设置子健 ( 例:bpx RegSetValueEx(A) if *(esp->8)=='****' )

注意:'****'为指定子键名的前4个字符,如子键为'Regcode',则'****'= 'Regc'

功能限制拦截断点:

bpx EnableMenuItem ;禁止或允许菜单项

bpx EnableWindow ;禁止或允许窗口

bmsg hMenu wm_command ;拦截菜单按键事件,其中hMenu为菜单句柄

bpx K32Thk1632Prolog ;配合bmsg hMenu wm_command使用,可以通过这个断点进入菜单处理程序

应用示例:

CALL [KERNEL32!K32Thk1632Prolog]

CALL [......] <-- 由此跟踪进入菜单处理程序

CALL [KERNEL32!K32Thk1632Epilog]

拦截时间:

bpx GetLocalTime ;获取本地时间

bpx GetSystemTime ;获取系统时间

bpx GetFileTime ;获取文件时间

bpx GetTickCount ;获得自系统成功启动以来所经历的毫秒数

bpx GetCurrentTime ;获取当前时间(16位)

bpx SetTimer ;创建定时器

bpx TimerProc ;定时器超时回调函数

拦截文件:

bpx CreateFileA(W) ;创建或打开文件 (32位)

bpx OpenFile ;打开文件 (32位)

bpx ReadFile ;读文件 (32位)

bpx WriteFile ;写文件 (32位)

bpx _lcreat ;创建或打开文件 (16位)

bpx _lopen ;打开文件 (16位)

bpx _lread ;读文件 (16位)

bpx _lwrite ;写文件 (16位)

bpx _hread ;读文件 (16位)

bpx _hwrite ;写文件 (16位)

拦截驱动器:

bpx GetDrivetype(A/W) ;获取磁盘驱动器类型

bpx GetLogicalDrives ;获取逻辑驱动器符号

bpx GetLogicalDriveStringsA(W) ;获取当前所有逻辑驱动器的根驱动器路径

拦截狗:

bpio -h 378(或278、3BC) R ;378、278、3BC是并行打印端口

bpio -h 3F8(或2F8、3E8、2E8) R ;3F8、2F8、3E8、2E8是串行端口VB程序专用断点:

bpx msvbvm60!rtcMsgBox

bpx msvbvm60!__vbaStrCmp

bpx msvbvm60!__vbaStrComp

bpx msvbvm60!__vbaStrCompVar

bpx msvbvm60!__vbaStrTextCmp

bpx msvbvm60!__vbaFileOpen

bpx msvbvm60!__vbaInputFile

bpx msvbvm60!__vbaFileSeek

bpx msvbvm60!__vbaWriteFile

bpx msvbvm60!__vbaFileClose

bpx msvbvm60!rtcFileAttributes

bpx msvbvm60!rtcFileDateTime

bpx msvbvm60!rtcFileLen

bpx msvbvm60!rtcFileLength

bpx msvbvm60!__vbaVarInt

bpx msvbvm60!__vbaVarCmpGe

bpx msvbvm60!__vbaVarCmpGt

bpx msvbvm60!__vbaVarCmpLe

bpx msvbvm60!__vbaVarCmpLt

bpx msvbvm60!__vbaVarCmpNe

bpx msvbvm60!__vbaVarTextCmpEq

bpx msvbvm60!__vbaVarTextCmpGe

bpx msvbvm60!__vbaVarTextCmpGt

bpx msvbvm60!__vbaVarTextCmpLe

bpx msvbvm60!__vbaVarTextCmpLt

bpx msvbvm60!__vbaVarTextCmpNe

bpx msvbvm60!__vbaVarTextTstEq

bpx msvbvm60!__vbaVarTextTstGe

bpx msvbvm60!__vbaVarTextTstGt

bpx msvbvm60!__vbaVarTextTstLe

bpx msvbvm60!__vbaVarTextTstLt

bpx msvbvm60!__vbaVarTextTstNe

bpx msvbvm60!__vbaVarTstEq

bpx msvbvm60!__vbaVarTstGe

bpx msvbvm60!__vbaVarTstGt

bpx msvbvm60!__vbaVarTstLe

bpx msvbvm60!__vbaVarTstLt

bpx msvbvm60!__vbaVarTstNe

注意:VB程序仍然可以使用普通API函数,只要函数“最终”CALL了这个函数上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可

Visual Studio调试之断点进阶篇

在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel 系列CPU的一个指令,可以让程序产生一个中断或者异常。程序中如果有中断或者异常发生了以后,CPU会中断程序的执行,去一个叫做IDT的部件查找处理这个中断(或者异常)的例程(Handler)。IDT是操作系统在启动的时候初始化的,至于IDT的细节问题,例如什么是IDT,怎样编写一个IDT的例程,怎样初始化IDT,可以去网上搜索一些资料。 总之,这里我们只要知道,CPU在执行程序指令过程中,碰到INT 3中断程序的执行,CPU 然后去IDT表里面找到处理断点的例程入口。这个例程要做的事情就是: 1.先看看机器里面是不是安装了一个调试器—记住,这一步很重要,之所以重要以 后的文章里面会介绍。 2.如果机器里面没有安装调试器,那么操作系统就会终止程序的执行。 3.否则操作系统启动调试器,并将调试器附到进程上。 4.这样,我们才能在调试器里面检查程序内部变量的值。 前面文章里面的INT 3 (或者DebugBreak(),或者Debugger.Break())指令是我们自己在代码里面硬编码进去的,因此我们在Visual Studio里,在相应的代码行里面点一下,出现一个小红球,也就是说Visual Studio在程序指令集某个地方动态地添加了一个INT 3指令。现在的问题来了,Visual Studio是如何在程序中正确找到插入INT 3指令的位置的? 或者更具体一些,我们在源代码(文本文件)里面设置断点的,Visual Studio需要把代码行翻译成在程序指令集中的位置。Visual Studio之所以需要做翻译,是因为通常一行C++或者C#代码都会对应好几行汇编指令。 因此,Visual Studio需要一个额外的文件来执行这个翻译过程,这个额外的文件叫做调试符号文件(Symbols),是由编译器生成的。Visual Studio系列的编译器,不论是C#、https://www.wendangku.net/doc/af5133006.html,还是C++编译器都会生成这个调试符号文件,.pdb 文件。所以如果你花一点时间看看Debug文件夹的话,你就会发现这个文件。 因此我们来看看Visual Studio支持的各种断点,并解释各种断点的实现方式 条件断点 首先我们先看看如何设置条件断点,条件断点有两种,一种是根据触发的次数来设置,另外一种是根据一条预置的条件来设置。 根据触发次数设置 比如说,你有一个循环,循环1000次,你知道有一个BUG总是在500次之后才会出现,因此肯定希望在循环内设置一个断点,但是前面500次都不会触发这个断点,否则连续按500次的F5的确不是一件轻松的差事。

AS断点调试

1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。 2.开启调试会话 点击红色箭头指向的小虫子,开始进入调试。 IDE下方出现Debug视图,红色的箭头指向的是现在调试程序停留的代码行,方法f2()中,程序的第11行。红色箭头悬停的区域是程

序的方法调用栈区。在这个区域中显示了程序执行到断点处所调用过的所用方法,越下面的方法被调用的越早。 3.单步调试 3.1 step over 点击红色箭头指向的按钮,程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行) 3.2 step into 点击红色箭头指向的按钮,程序向下执行一行。如果该行有自定义方法,则运行进入自定义方法(不会进入官方类库的方法)。具体步骤如下:在自定义方法发f1()处设置断点,执行调试

点击

3.3 Force step into 该按钮在调试的时候能进入任何方法。 3.4 step out 如果在调试的时候你进入了一个方法(如f2()),并觉得该方法没有问题,你就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。 3.5 Drop frame

点击该按钮后,你将返回到当前方法的调用处(如上图,程序会回到main()中)重新执行,并且所有上下文变量的值也回到那个时候。只要调用链中还有上级方法,可以跳到其中的任何一个方法。 4. 高级调试 4.1 跨断点调试 设置多个断点,开启调试。

想移动到下一个断点,点击如下图: 程序将运行一个断点到下一个断点之间需要执行的代码。如果后面代码没有断点,再次点击该按钮将会执行完程序。 4.2 查看断点

VB程序设计的常用算法填空题

VB程序设计的常用算法 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 For i = 1 To If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If Then Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 Next i Form1.Print "统计结果" For i = 1 To 10 p = i If i = 10 Then p = 0 Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个" Next i End Sub 二、求两个整数的最大公约数、最小公倍数 m=inputBox("m=") n=inputBox("n=") nm=n*m If m < n Then r=m mod n Do While m=n n=r

如何高效使用GDB断点

在gdb中,断点通常有三种形式 断点(BreakPoint): 在代码的指定位置中断,这个是我们用得最多的一种。设置断点的命令是break,它通常有如下方式: 可以通过info breakpoints [n]命令查看当前断点信息。此外,还有如下几个配套的常用命令: 观察点(WatchPoint): 在变量读、写或变化时中断,这类方式常用来定位bug。

捕捉点(CatchPoint): 捕捉点用来补捉程序运行时的一些事件。如:载入共享库(动态链接库)、C++的异常等。通常也是用来定位bug。 捕捉点的命令格式是:catch ,event可以是下面的内容 自动删除。 捕捉点信息的查看方式和代码断点的命令是一样的,这里就不多介绍了。 在特定线程中中断 你可以定义你的断点是否在所有的线程上,或是在某个特定的线程。GDB很容易帮你完成这一工作。

break thread break thread if ... linespec指定了断点设置在的源程序的行号。threadno指定了线程的ID,注意,这个ID是GDB分配的,你可以通过"info threads"命令来查看正在运行程序中的线程信息。如果你不指定thread 则表示你的断点设在所有线程上面。你还可以为某线程指定断点条件。如: (gdb) break frik.c:13 thread 28 if bartab > lim 当你的程序被GDB停住时,所有的运行线程都会被停住。这方便你你查看运行程序的总体情况。而在你恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。 在特定条件下中断 条件断点的一种特殊场景是在断点命中指定次数后停下来。事实上每个断点都有一个 ignore count, 他是一个正整数。通常情况下它的值为0,所以看不出来它的存在。但是如果它是一个非0值, 那么它将在每次命中后都将 count 减 1,直到它为 0. ignore bnum count 恢复程序运行和单步调试 在gdb中,和调试步进相关的命令主要有如下几条: 参考资料

VB练习题

判断题: 1、VB中,每一种对象有着不同的属性设置,每一种对象能识别的事件也不同。(对) 2、Val(“123hello”) 和Val(“hello123”)返回值一样。(错) 3、赋值语句X=123+”123”和X=”123”+123中,X的值一样。(对) 4、赋值语句X=”123”+”123”和X=”123”+123中,X的值一样。(错) 5、执行Print 5*8 和Print “5*8 ”语句运行结果一样。(错) 6、标签框和文本框内容的最大区别就是在程序运行过程中标签框的内容不可编辑,而文本框的内容可编辑。(对) 7、用vb编写程序时,标签控件能代替文本框控件使用. (错) 8、VB程序代码中,Label1.Caption=””的作用是该标签框中得内容清除。(对) 9、变量名的长度最长可达1024个字符。(错)225个 10、sum和int.sum都可以作为VB的变量名。(错) 11、下列程序的运行结果是15 (对) Dim s as Double Dim i as Integer S=0 I=1 Do While i<=5 I=i+2 S=s+i Loop Label1.Caption=s 12、对于熟练的程序员,可以省略程序的调试过程。(错) 13、在VB中,使用if语句就可以根据条件改变程序的执行路径。(对) 14、VB编程的一般步骤应该是:分析问题——设计界面——编写代码——调试与运行程序。(对) 单项选择题 1、小明想用VB设计一个加法器程序,做了如下规划,下列说法错误的是。(D) A、程序运行时标题栏显示加法器 B、前两个标签框显示的内容分别为“+”和“=” C、Command1用来计算出结果 D、使用了三个命令按钮、两个标签框和三个文本框 2、从下面的对象属性可以看出,该对象的标题为(A)

eclipse断点调试指导

1.进入debug模式(基础知识列表) 1、设置断点 2、启动servers端的debug模式 3、运行程序,在后台遇到断点时,进入debug调试状态 ============================= 作用域功能快捷键 全局单步返回F7 全局单步跳过F6 全局单步跳入F5 全局单步跳入选择Ctrl+F5 全局调试上次启动F11 全局继续F8 全局使用过滤器单步执行Shift+F5 全局添加/去除断点Ctrl+Shift+B 全局显示Ctrl+D 全局运行上次启动Ctrl+F11 全局运行至行Ctrl+R 全局执行Ctrl+U ============================= 1.Step Into (also F5) 跳入 2.Step Over (also F6) 跳过 3.Step Return (also F7) 执行完当前method,然后return跳出此

method 4.step Filter 逐步过滤一直执行直到遇到未经过滤的位置或断点(设置Filter:window-preferences-java-Debug-step Filtering) 5.resume 重新开始执行debug,一直运行直到遇到breakpoint。 例如:A和B两个断点,debug过程中发现A断点已经无用,去除A 断点,运行resume就会跳过A直接到达B断点。 6.hit count 设置执行次数适合程序中的for循环(设置breakpoint view-右键hit count) 7.inspect 检查运算。执行一个表达式显示执行值 8.watch 实时地监视对象、方法或变量的变化 9.我们常说的断点(breakpoints)是指line breakpoints,除了line breakpoints,还有其他的断点类型:field(watchpoint)breakpoint,method breakpoint ,exception breakpoint. 10.field breakpoint 也叫watchpoint(监视点) 当成员变量被读取或修改时暂挂 11.添加method breakpoint 进入/离开此方法时暂挂(Run-method breakpoint) 12.添加Exception breakpoint 捕抓到Execption时暂挂(待续...) 断点属性: 1.hit count 执行多少次数后暂挂用于循环 2.enable condition 遇到符合你输入条件(为ture\改变时)就暂挂 3.suspend thread 多线程时暂挂此线程 4.suspend VM 暂挂虚拟机 13.variables 视图里的变量可以改变变量值,在variables 视图选择变

OD教程文库

OD教程文库.txt曾经拥有的不要忘记;不能得到的更要珍惜;属于自己的不要放弃;已经失去的留作回忆。OllyDbg完全教程 一,什么是 OllyDbg? OllyDbg 是一种具有可视化界面的 32 位汇编-分析调试器。它的特别之处在于可以在没有源代码时解决问题,并且可以处理其它编译器无法解决的难题。 Version 1.10 是最终的发布版本。这个工程已经停止,我不再继续支持这个软件了。但不用担心:全新打造的 OllyDbg 2.00 不久就会面世! 运行环境: OllyDbg 可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统中工作,但我们强烈建议您采用300-MHz以上的奔腾处理器以达到最佳效果。还有,OllyDbg 是极占内存的,因此如果您需要使用诸如追踪调试[Trace]之类的扩展功能话,建议您最好使用128MB以上的内存。 支持的处理器: OllyDbg 支持所有 80x86、奔腾、MMX、3DNOW!、Athlon 扩展指令集、SSE 指令集以及相关的数据格式,但是不支持SSE2指令集。 配置:有多达百余个(天呀!)选项用来设置 OllyDbg 的外观和运行。 数据格式: OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCII、UNICODE、 16/32位有/无符号/HEX整数、32/64/80位浮点数、地址、反汇编(MASM、IDEAL或是HLA)、PE文件头或线程数据块。 帮助:此文件中包含了关于理解和使用 OllyDbg 的必要的信息。如果您还有 Windows API 帮助文件的话(由于版权的问题 win32.hlp 没有包括在内),您可以将它挂在 OllyDbg 中,这样就可以快速获得系统函数的相关帮助。 启动:您可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直接拖放到OllyDbg中,或者重新启动上一个被调试程序,或是挂接[Attach]一个正在运行的程序。OllyDbg支持即时调试。OllyDbg根本不需要安装,可直接在软盘中运行! 调试DLLs:您可以利用OllyDbg调试标准动态链接库 (DLLs)。OllyDbg 会自动运行一个可执行程序。这个程序会加载链接库,并允许您调用链接库的输出函数。 源码级调试: OllyDbg 可以识别所有 Borland 和 Microsoft 格式的调试信息。这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。 代码高亮: OllyDbg 的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是无效的指令)和不同的操作数(常规[general]、 FPU/SSE、段/系统寄存器、在栈或内存中的操作数,常量)。您可以定制个性化高亮方案。 线程: OllyDbg 可以调试多线程程序。因此您可以在多个线程之间转换,挂起、恢复、终止线程或是改变线程优先级。并且线程窗口将会显示每个线程的错误(就像调用 GETLASTERROR

断点回归设计的步骤

近在做一个需要利用断点回归设计的研究。为了保证实践的规范性,并且避免未来审稿中可能面对的质疑,花了几天时间梳理了一下断点回归设计的标准操作,整理出来,供来人参考。本文参考了三篇文献,先摆在这里,建议大家去读原文: 第一篇:Lee, and Lemieux, 2010," Regression Discontinuity Designs in Economics ",Journal of Economic Literature, Vol. 48: 281–355. 第二篇:Pinotti, Paolo. "Clicking on heaven's door: The effect of immigrant legalization on crime." American Economic Review107.1 (2017): 138-68. 第三篇:Thoemmes, Felix, Wang Liao, and Ze Jin. "The Analysis of the Regression-Discontinuity Design in R." Journal of Educational and Behavioral Statistics 42.3 (2017): 341-360. 1.断点回归常规操作流程 第1步检查配置变量(assignment variable,又叫running variable、forcing variable)是否被操纵。这里的配置变量,其实就是RD中决定是否进入实验的分数(Score),是否被操纵的意思就是,是否存在某种跳跃性的变化。在实际操作中有两种方式来检验,一是画出配置变量的分布图。最直接的方法,是使用一定数量的箱体(bin),画出配置变量的历史直方图(histogrm)。为了观察出分布的总体形状,箱体的宽度要尽量小。频数(frequencies)在箱体间的跳跃式变化,能就断点处的跳跃是否正常给我们一些启发。从这个角度来说,最好利用核密度估计做出一个光滑的函数曲线。二是利用McCrary(2008)的核密度函数检验。(命令是DCdensity,介绍见陈强编著的《高级计量经济学及Stata应用》(第二版)第569页), Frandsen (2013)提出了一种新的检验方法,但目前被使用 的并不多。 第2步画因变量均值对配置变量的散点图,并选择带宽(bandwidth selection)。首先,挑选出一定数目的箱体,求因变量在每个箱体内的均值,画出均值对箱体中间点的散点图。一定要画每个箱体平均值的图。如果直接画原始数据的散点图,那么噪音太大,看不出潜在函数的形状。不要画非参数估计的连续统,因为这个方法自然地倾向于给出存在断点的印象,尽管总体中本来不存在这样的断点。然后,选择第三步骤中需要的带宽。Lee和Lemieux(2010)介绍了两种确定最优带宽的方法:拇指规则法(rule of thumb)和交叉验证法(CV)。还有另外两种比较受关注的方法:IK法和CCT法。IK法以Imbens和Kalyanaraman两个人命名,对应着论文Imbens和Kalyanaraman(2012)。这篇论文发表在Review of Economic Studies,Lee和Lemieux(2010)文中提到过此文2009年的NBER工作论文版。CCT法以Calonico、Cattaneo和Titiunik三个人命名,对应着论文Calonico、Cattaneo和Titiunik(2014a)。用非参数法做断点回归估计时的stata命令rd,就是用IK发确定最优带宽。stata命令rdrobust、rdbwselect,提供CV、IK、CCT三种不同的最优带宽计算方法选项。但是实际上rdrobust中已经更新了IK带宽选择函数,更新的算法与IK算法的区别有待考证,后续会补充。实际操作中一般是两种算法都会采纳,并汇报参数估计对带宽选择是不敏感的。

VB程序设计的常用算法4

VB程序设计的常用算法4 十、数制转换 将一个十进制整数m转换成→r(2-16)进制字符串。 方法:将m不断除r 取余数,直到商为零,以反序得到结果。下面写出一转换函数,参数idec为十进制数,ibase为要转换成数的基(如二进制的基是2,八进制的基是8等),函数输出结果是字符串。 Private Function TrDec(idec As Integer, ibase As Integer) As String Dim strDecR$, iDecR% strDecR = "" Do While idec <> 0 iDecR = idec Mod ibase If iDecR >= 10 Then strDecR = Chr$(65 + iDecR - 10) & strDecR Else strDecR = iDecR & strDecR End If idec = idec \ ibase Loop TrDec = strDecR End Function 十一、字符串的一般处理1.简单加密和解密 加密的思想是:将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式:c=chr(Asc(c)+k) 例如序数k为5,这时"A"→"F","a""f","B""G"…当加序数后的字母超过"Z"或"z"则c=Chr(Asc(c)+k -26) 例如:You are good→ Dtz fwj ltti 解密为加密的逆过程 将每个字母C减(或加)一序数K,即c=chr(Asc(c)-k), 例如序数k为5,这时"Z"→"U","z"→"u","Y"→"T"…当加序数后的字母小于"A"或"a"则c=Chr(Asc(c)-k +26) 下段程序是加密处理: i = 1: strp = "" nL = Len(RTrim(strI)) Do While (i <= nL) strT = Mid$(strI, i, 1) '取第i个字符 If (strT >= "A" And strT <= "Z") Then iA = Asc(strT) + 5 If iA > Asc("Z") Then iA = iA - 26 strp = strp + Chr$(iA) ElseIf (strT >= "a" And strT <= "z") Then iA = Asc(strT) + 5 If iA > Asc("z") Then iA = iA - 26 strp = strp + Chr$(iA) Else strp = strp + strT End If i = i + 1 Loop Print strp

od破解调试秘籍断点

拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本 拦截消息框: bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框 拦截警告声: bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声) 拦截对话框: bp DialogBox 创建模态对话框 bp DialogBoxParam(A) 创建模态对话框 bp DialogBoxIndirect 创建模态对话框 bp DialogBoxIndirectParam(A) 创建模态对话框 bp CreateDialog 创建非模态对话框 bp CreateDialogParam(A) 创建非模态对话框 bp CreateDialogIndirect 创建非模态对话框 bp CreateDialogIndirectParam(A) 创建非模态对话框 bp GetDlgItemText(A) 获取对话框文本 bp GetDlgItemInt 获取对话框整数值 拦截剪贴板: bp GetClipboardData 获取剪贴板数据 拦截注册表: bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健 功能限制拦截断点: bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口 拦截时间:

WinDBG技巧:设断点命令详解

WinDBG技巧:设断点命令详解(bp, bu, bm, ba 以及bl, bc, bd, be) WinDBG 提供了多种设断点的命令:bp, bu, bm, ba bp命令是在某个地址下断点,可以bp 0x7783FEB 也可以bp MyApp!SomeFuncti on。对于后者,WinDBG 会自动找到MyApp!SomeFunction对应的地址并设置断点。但是使用bp的问题在于:1)当代码修改之后,函数地址改变,该断点仍然保持在相同位置,不一定继续有效;2)WinDBG 不会把bp断点保存工作空间中。所以,我比较喜欢用bu 命令。 bu 命令是针对某个符号下断点。比如bu MyApp!SomeFunction。在代码被修改之后,该断点可以随着函数地址改变而自动更新到最新位置。而且bu 断点会保存在Win Dbg工作空间中,下次启动Windbg 的时候该断点会自动设置上去。 另外,在模块没有被加载的时候,bp 断点会失败(因为函数地址不存在),而bu 断点则可以成功。新版的WinDBG中bp失败后会自动被转成bu 。 bm命令也是针对符号下断点。但是它支持匹配表达式。很多时候你下好几个断点。比如,把MyClass 所有的成员函数都下断点:bu MyApp!MyClass::*,或者把所有以CreateWindow开头的函数都下断点:bu user32!CreateWindow* 。 以上三个命令是对代码下断点,我们还可以对数据下断点。 ba命令就是针对数据下断点的命令,该断点在指定内存被访问时触发。命令格式为 ba Access Size [地址] Access 是访问的方式,比如e(执行),r(读/写),w(写) Size是监控访问的位置的大小,以字节为单位。值为1、2或4,还可以是8(64位机)。 比如要对内存0x0483DFE进行写操作的时候下断点,可以用命令ba w4 0x0483DFE 这里顺便提以下其他断点命令: bl列出所有断点

VB程序设计的常用算法教案.doc

VB程序设计的常用算法教案 算法(algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,......个位是0的个数存放在x(10)。 将程序编写在一个gettjput过程中,代码如下: public sub gettjput() dim a(1 to 100) as integer

dim x(1 to 10) as integer dim i as integer, p as integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 for i = 1 to 100 a(i) = int(rnd * 100) if a(i) < 10 then form1.print space(2); a(i); else form1.print space(1); a(i); end if if i mod 10 = 0 then form1.print next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 for i = 1 to 100 p = a(i) mod 10 ' 求个位上的数字 if p = 0 then p = 10 x(p) = x(p) + 1 next i form1.print "统计结果"

使用OllyDbg从零开始Cracking 第三十二章-OEP寻踪

第三十二章-OEP寻踪 在上一章中我们提到了OEP(Original EntryPoint)的概念,也就是应用程序原本要执行的第一行代码,OEP %99的情况位于第一个区段中(本章中有一个例子,OEP就不在第一个区段,我是特意举的这个例子,嘿嘿)。 我们知道当到达OEP后,各个区段在内存中的分布跟原始程序很接近,这个时候我们就可以尝试将其转储到(dump)文件中,完成程序的重建工作(PS:脱壳)。 通常脱壳的基本步骤如下: 1:寻找OEP 2:转储(PS:传说中的dump) 3:修复IAT(修复导入表) 4:检查目标程序是否存在AntiDump等阻止程序被转储的保护措施,并尝试修复这些问题。 以上是脱壳的经典步骤,可能具体到不同的壳的话会有细微的差别。本章我们主要介绍定位OEP的方法。 很多时候我们遇到的壳会想方设法的隐藏原程序的OEP,要定位OEP的话就需要我们尝试各种各样的方法了。 首先我们来看看上一章CRACKME UPX,然后再来看其他的壳。 1)搜索JMP或者CALL指令的机器码(即一步直达法,只适用于少数壳,包括UPX,ASPACK壳) 对于一些简单的壳可以用这种方式来定位OEP,但是对于像AsProtect这类强壳(PS:AsProtect在04年算是强壳了,嘿嘿)就不适用了,我们可以直接搜索长跳转JMP(0E9)或者CALL(0E8)这类长转移的机器码,一般情况下(理想情况)壳在解密完原程序各个区段以后,需要一个长JMP或者CALL跳转到原程序代码段中的OEP处开始执行原程序代码。 下面我们将上一章中加了UPX壳的那个CrueHead的CrackMe加载到OD中: 这里我们按CTRL+B组合键搜索一下JMP的机器码E9,看看有没有这样一个JMP跳转到原程序的代码段。

STVD在调试的时候出现无法设置断点的问题

STVD在调试的时候出现无法设置断点的问题,提示One or more breakpoints are not positioned in valid files (no debug information or not a project file) --------------------------- ST Visual Develop --------------------------- One or more breakpoints are not positioned in valid files (no debug information or not a project file). These breakpoints have been removed. ---------------------------一个或多个断点未放置在有效文件(没有调试信息,或者不是一个项目文件)。这些断点已被删除(谷歌翻译)。 上图,如果点击确定,设置的断点便被清除,同时也会发现,右侧的反汇编窗口不能同时显示具体的汇编信息是由那句C语句生成的。 如果要设置断点,需要在Debug环境下才能放置断点。在Release环境下可以进行在线仿真,但是不能放置断点,并且仿真暂停的时候,也不知道程序停在了什么地方,不能进行单步调试等等。如下图:

1.一般情况下,我们新建的工程,都是在Release环境下建工程。并且project>settings中, 只在Release环境的设置,忽略了Debug的设置。如果在Release环境下进行了其他设置,同样的Debug下也要同样的设置。不然在调试环境下,无法通过编译,更不用提在线仿真,设置断点的问题。 2.一般进行程序编写编译的时候在Release环境中操作,此时可以进行在线仿真,但是无 法设置断点,给程序的调试带来很大的障碍,STVD环境下的设置方法如下,打开 project>settings,如下如: 此处默认设置,一般不做更改,是为了避免最后发行使用的程序忘记修改此处,避免编译的程序不是最优的。 在Debug环境下,如下图:

VB程序设计的常用算法

VB程序设计的常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,……个位是0的个数存放在x(10)。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If i Mod 10 = 0 Then Form1.Print Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 x(p) = x(p) + 1 Next i Form1.Print "统计结果" For i = 1 To 10 p = i If i = 10 Then p = 0 Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个" Next i End Sub 二、求两个整数的最大公约数、最小公倍数 分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数) (1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r; (3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4) m←n,n←r,再重复执行(2)。 例如:求m=14 ,n=6的最大公约数. m n r

中断的应用中对断点的保护

【016】中断的应用中对断点的保护 [51] 点击数:430 发布日期:2006-8-22 20:37:00 【收藏】【评论】【打印】【编程爱好者论坛】【关闭】 实验参考: 笨笨工作室-实验八、按键控制跑马灯(中断)。(查看) 实验板: FB51A。(查看) 实验目的: <1> 掌握堆栈在中断程序中的作用。 <2> 掌握让程序保护现场的方法。 实验现象: 二极管作左右跑马灯,当按下外部按键 K1 时, 8 个二极管全部闪烁 5 次后从 K1 按下之前的位置继续作跑马灯。 在应用中断时,若主程序在正常运行的过程中响应了中断就要转而去执行中断服务程序。那如何在执行完中断服务程序之后完全恢复原来的主程序呢?这就需要在执行中断服务程序之前将相关的状态保护起来,在中断完成后再将这些状态恢复,从而继续执行主程序。 51单片机中允许我们从内部 RAM 中指定一个空间专门保存这些断点处的状态,这个空间就是堆栈。并且还专门给了我们一个 8 位的堆栈指针,让我们用它来开辟堆栈空间。例如我们给堆栈指针赋值: mov sp, #70h ,就表示我们把内部数据 RAM 的地址为 70H 开始的单元设为堆栈。 MCS-51的片内存储器(RAM)共有256字节,高128字节是特殊功能寄存器,地址范围80H~FFH。这一部分可看作系统资源,不能随便利用。而剩下的低12 8字节区分如下: ──┬────────────┐ 7FHㄧ用户RAM区ㄧ ㄧ(数据缓冲区、堆栈区)ㄧ 30Hㄧ 80 byte ㄧ ──┼────────────┤ 2FHㄧ可位寻址区ㄧ 20Hㄧ 16 byte ㄧ ──┼────────────┤ 1FHㄧ第3组工作寄存器区ㄧ 18Hㄧ 8 byte ㄧ ──┼────────────┤ 17Hㄧ第2组工作寄存器区ㄧ 10Hㄧ 8 byte ㄧ ──┼────────────┤ 0FHㄧ第1组工作寄存器区ㄧ

OllyDBG常用API断点非常实用

OllyDbg常用断点 以前收集的资料,不知道作者是谁了。很抱歉! --liuyunagang OD常用断点 常用断点(OD中) 拦截窗口: bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本 拦截消息框: bp MessageBox(A) 创建消息框 bp MessageBoxExA 创建消息框 bp MessageBoxIndirect(A) 创建定制消息框 bp IsDialogMessageW 拦截警告声: bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声) 拦截对话框: bp DialogBox 创建模态对话框 bp DialogBoxParam(A) 创建模态对话框 bp DialogBoxIndirect 创建模态对话框 bp DialogBoxIndirectParam(A) 创建模态对话框 bp CreateDialog 创建非模态对话框 bp CreateDialogParam(A) 创建非模态对话框 bp CreateDialogIndirect 创建非模态对话框 bp CreateDialogIndirectParam(A) 创建非模态对话框 bp GetDlgItemText(A) 获取对话框文本 作用是得指定输入框输入字符串 bp GetDlgItemInt 获取对话框整数值 拦截剪贴板:

bp GetClipboardData 获取剪贴板数据 拦截注册表: bp RegOpenKey(A) 打开子健 bp RegOpenKeyEx 打开子健 bp RegQueryValue(A) 查找子健 bp RegQueryValueEx 查找子健 bp RegSetValue(A) 设置子健 bp RegSetValueEx(A) 设置子健 功能限制拦截断点: bp EnableMenuItem 禁止或允许菜单项 bp EnableWindow 禁止或允许窗口 拦截时间: bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数 GetDlgItemInt 得指定输入框整数值 GetDlgItemText 得指定输入框输入字符串 GetDlgItemTextA 得指定输入框输入字符串 拦截文件: bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) GetModuleFileNameA GetFileSize Setfilepointer fileopen FindFirstFileA ReadFile 拦截驱动器: bp GetDriveTypeA 获取磁盘驱动器类型 bp GetLogicalDrives 获取逻辑驱动器符号 bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径 ★★VB程序专用断点★★

黑马程序员java教程:断点调试模式运行java程序

断点调试模式运行java程序 1断点调试的目的 ●跟踪源代码; ●观察程序运行状态; 2调试程序1 编写求和代码 ●设置断点; ●debug运行; ●进入debug透视图; ●程序会运行到断点处停住; ●当前行还没有运行; ●查看变量值:选中变量→鼠标右键→Watch; ●F5(跳入)、F6(跳过)、F7(跳出); 3调试程序2 使用Arrays.binarySearch()编写折半搜索数组元素代码 ●设置断点; ●测试跳入; ●测试跳过; ●测试跳出; ●添加断点; ●测试进入下一断点; ●测试返回当前方法栈的头部(Drop To Frame); ●清除断点; ●清除表达式; ●注意,停止程序! MyEclipse快捷键 1MyEclipse常用快捷键1 ●Alt + /(内容助理):补全; ●Ctrl + 1(快速定位):出错时定位错误,与点击“红X”效果一样;

●Ctrl + Shift + O:导包; ●Ctrl + Shift + F:格式化代码块; 2MyEclipse常用快捷键2 ●Ctrl + Shift + T:查看源代码; ●Ctrl + 点击源代码:查看源代码; ●F3:查看选中类的源代码; ●Alt + 左键:查看源代码时的“原路返回”; ●Ctrl + Shift + X:把小写修改为大写; ●Ctrl + Shift + Y:把小写修改为小写; ●Ctrl + Alt + 下键:复制当前行; ●Ctrl + /:添加或撤销行注释; ●Ctrl + Shift + /:对选中代码添加段注释; ●Ctrl + Shift + \:撤销当前段注释; ●Alt + 上键:向上移动当前行; ●Alt + 下键:向上移动当前行; ●Ctrl + D:删除当前行; MyEclipse: ●工作空间; ●项目名称; ●包名; ●类名; ●Alt + /、Ctrl + 1、Ctrl + shift + o、Ctrl + shift + f

相关文档