-
-
[旧帖]
{讨论}OllyDBG反汇编时的问题
0.00雪花
-
发表于:
2009-7-2 08:56
3140
-
[旧帖] {讨论}OllyDBG反汇编时的问题
0.00雪花
各位,我也不知道怎么学习反汇编,我是这样学的,我学过DOS下的汇编(16位),后来听说现在都用32位的汇编,我就买了一本罗云彬的<WINDOWS环境下32位汇编语言程序设计> ,现在学的有点迷惑,呵呵,他书中让用W32DASM 这个软件反汇编,我个人不太喜欢,就在论谈上下载了一个OD, 因为是初学者,问题比较简单,大侠们别笑!!! 我怕不多说点没人理我.呵呵
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Hello.asm 汇编源码
; 使用 Win32ASM 写的 Hello, world 程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szCaption db 'A MessageBox !',0
szText db 'Hello, World !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
_________________________________________________________________
以下是OD反汇编程序
00401000 >/$ 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL
00401002 |. 68 00304000 push 00403000 ; |A MessageBox !
00401007 |. 68 0F304000 push 0040300F ; |Text = "Hello, World !"
0040100C |. 6A 00 push 0 ; |hOwner = NULL
0040100E |. E8 07000000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
00401013 |. 6A 00 push 0 ; /ExitCode = 0
00401015 \. E8 06000000 call <jmp.&KERNEL32.ExitProcess> ; \ExitProcess
0040101A $- FF25 08204000 jmp dword ptr [<&USER32.MessageBoxA>>; USER32.MessageBoxA
00401020 .- FF25 00204000 jmp dword ptr [<&KERNEL32.ExitProces>; kernel32.ExitProcess
________________________________________________________________
我想问的问题是:
看汇编和反汇编都很确的告诉我们,这个小程序调用了MessageBox(),ExitProcess(),这两个API, 但看这两句.当我点击这行 040101A $- FF25 08204000 jmp dword ptr [<&USER32.MessageBoxA>>; 下面会出现: ":[00402008]=77D5058A (USER32.MessageBoxA) 地调用来自 <模块入口点>+0E" 这句话是什么意思?
请高手指点.以下是附图
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课